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