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

Reply via email to