mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2026-11-10 20:48:12 +00:00
net: enetc: add PSI-to-VSI link status notification support for VF
Let ENETC v4 VFs track PF link status through the PSI-to-VSI messaging channel. Add two enetc_si_ops hooks, vf_reg_link_status_notifier and vf_unreg_link_status_notifier, populated only in enetc4_vsi_ops; rev1 hardware is unaffected. A dedicated MSI-X vector on the VF handles incoming PSI-to-VSI messages. Its handler schedules a work item on an ordered workqueue that reads the notification via VSIMSGRR, updates the carrier state and sets congestion mode from the PF TX PAUSE state in the message. Reading VSIMSGRR also acknowledges the PF so it can send the next message. The workqueue is set up in enetc_vf_probe() and torn down in enetc_vf_remove(). On a VF, enetc_phylink_connect() registers the notifier with the PF and enetc_close() unregisters it. On registration the PF immediately sends the current link status and then broadcasts every later transition; if registration fails, fall back to the LS1028A behaviour and assert carrier unconditionally. Register the notifier only after the Tx/Rx resources are allocated in enetc_open(), because once registered the PF may queue si->msg_task via a link-up message. An error unwind cannot drain that work item, since enetc_open() and the work item both take the RTNL lock and waiting would deadlock; and as __LINK_STATE_START is set before ndo_open() runs, netif_running() stays true during the unwind, so the queued work could still call netif_carrier_on() and leave carrier 'on' after a failed open. Signed-off-by: Wei Fang <wei.fang@nxp.com> Link: https://patch.msgid.link/20260909100733.1139689-15-wei.fang@oss.nxp.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
e05f290292
commit
36a16ed591
4 changed files with 261 additions and 9 deletions
Loading…
Add table
Add a link
Reference in a new issue