On Thu, Apr 01, 2021 at 10:56:03AM -0700, Shannon Nelson wrote:
> +int ionic_lif_hwstamp_set(struct ionic_lif *lif, struct ifreq *ifr)
> +{
> + struct ionic *ionic = lif->ionic;
> + struct hwtstamp_config config;
> + int tx_mode = 0;
> + u64 rx_filt = 0;
> + int err, err2;
> + bool rx_all;
> + __le64 mask;
> +
> + if (!lif->phc || !lif->phc->ptp)
> + return -EOPNOTSUPP;
> +
> + if (ifr) {
> + if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
> + return -EFAULT;
> + } else {
> + /* if called with ifr == NULL, behave as if called with the
> + * current ts_config from the initial cleared state.
> + */
> + memcpy(&config, &lif->phc->ts_config, sizeof(config));
> + memset(&lif->phc->ts_config, 0, sizeof(config));
> + }
> +
> + tx_mode = ionic_hwstamp_tx_mode(config.tx_type);
> + if (tx_mode < 0)
> + return tx_mode;
> +
> + mask = cpu_to_le64(BIT_ULL(tx_mode));
> + if ((ionic->ident.lif.eth.hwstamp_tx_modes & mask) != mask)
> + return -ERANGE;
> +
> + rx_filt = ionic_hwstamp_rx_filt(config.rx_filter);
> + rx_all = config.rx_filter != HWTSTAMP_FILTER_NONE && !rx_filt;
> +
> + mask = cpu_to_le64(rx_filt);
> + if ((ionic->ident.lif.eth.hwstamp_rx_filters & mask) != mask) {
> + rx_filt = 0;
> + rx_all = true;
> + config.rx_filter = HWTSTAMP_FILTER_ALL;
> + }
> +
> + dev_dbg(ionic->dev, "config_rx_filter %d rx_filt %#llx rx_all %d\n",
> + config.rx_filter, rx_filt, rx_all);
> +
> + mutex_lock(&lif->phc->config_lock);
> +
> + if (tx_mode) {
> + err = ionic_lif_create_hwstamp_txq(lif);
This function NDE yet. It first appears in Patch #6. Please make
sure each patch compiles. That way, bisection always works.
Thanks,
Richard