On Fri, Feb 21, 2025 at 05:42:49PM +0800, Furong Xu wrote: > > +void ethtool_mmsv_link_state_handle(struct ethtool_mmsv *mmsv, bool up) > > +{ > > + unsigned long flags; > > + > > + ethtool_mmsv_stop(mmsv); > > + > > + spin_lock_irqsave(&mmsv->lock, flags); > > + > > + if (up && mmsv->pmac_enabled) { > > + /* VERIFY process requires pMAC enabled when NIC comes up */ > > + ethtool_mmsv_configure_pmac(mmsv, true); > > + > > + /* New link => maybe new partner => new verification process */ > > + ethtool_mmsv_apply(mmsv); > > + } else { > > + mmsv->status = ETHTOOL_MM_VERIFY_STATUS_INITIAL; > > Tested this patch on my side, everything works well, but the verify-status > is a little weird: > > # kernel booted, check initial states: > ethtool --include-statistics --json --show-mm eth1 > [ { > "ifname": "eth1", > "pmac-enabled": false, > "tx-enabled": false, > "tx-active": false, > "tx-min-frag-size": 60, > "rx-min-frag-size": 60, > "verify-enabled": false, > "verify-time": 128, > "max-verify-time": 128, > "verify-status": "INITIAL", > "statistics": { > "MACMergeFrameAssErrorCount": 0, > "MACMergeFrameSmdErrorCount": 0, > "MACMergeFrameAssOkCount": 0, > "MACMergeFragCountRx": 0, > "MACMergeFragCountTx": 0, > "MACMergeHoldCount": 0 > } > } ] > > # Enable pMAC by: ethtool --set-mm eth1 pmac-enabled on > ethtool --include-statistics --json --show-mm eth1 > [ { > "ifname": "eth1", > "pmac-enabled": true, > "tx-enabled": false, > "tx-active": false, > "tx-min-frag-size": 60, > "rx-min-frag-size": 60, > "verify-enabled": false, > "verify-time": 128, > "max-verify-time": 128, > "verify-status": "DISABLED", > "statistics": { > "MACMergeFrameAssErrorCount": 0, > "MACMergeFrameSmdErrorCount": 0, > "MACMergeFrameAssOkCount": 0, > "MACMergeFragCountRx": 0, > "MACMergeFragCountTx": 0, > "MACMergeHoldCount": 0 > } > } ] > > # Disable pMAC by: ethtool --set-mm eth1 pmac-enabled off > ethtool --include-statistics --json --show-mm eth1 > [ { > "ifname": "eth1", > "pmac-enabled": true, > "tx-enabled": false, > "tx-active": false, > "tx-min-frag-size": 60, > "rx-min-frag-size": 60, > "verify-enabled": false, > "verify-time": 128, > "max-verify-time": 128, > "verify-status": "DISABLED", > "statistics": { > "MACMergeFrameAssErrorCount": 0, > "MACMergeFrameSmdErrorCount": 0, > "MACMergeFrameAssOkCount": 0, > "MACMergeFragCountRx": 0, > "MACMergeFragCountTx": 0, > "MACMergeHoldCount": 0 > } > } ] > > verify-status always normal on other cases. Thanks for testing and for reporting this inconsistency. > @Vladimir, maybe we shouldn't update mmsv->status in ethtool_mmsv_link_state_handle()? > Or, update mmsv->status like below: > mmsv->status = mmsv->pmac_enabled ? > ETHTOOL_MM_VERIFY_STATUS_INITIAL : > ETHTOOL_MM_VERIFY_STATUS_DISABLED; You mean mmsv->status = mmsv->verify_enabled ? ETHTOOL_MM_VERIFY_STATUS_INITIAL : ~~~~~~~~~~~~~~~~~~~~ ETHTOOL_MM_VERIFY_STATUS_DISABLED? > Anyway, this is too minor, so: > > Tested-by: Furong Xu <0x1207@xxxxxxxxx> > > > > + mmsv->verify_retries = ETHTOOL_MM_MAX_VERIFY_RETRIES; > > + > > + /* No link or pMAC not enabled */ > > + ethtool_mmsv_configure_pmac(mmsv, false); > > + ethtool_mmsv_configure_tx(mmsv, false); > > + } > > + > > + spin_unlock_irqrestore(&mmsv->lock, flags); > > +} > > +EXPORT_SYMBOL_GPL(ethtool_mmsv_link_state_handle);