linux/drivers/net/ethernet/intel/ice
Jakub Kicinski af7886fcfb Merge branch '40GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue
Tony Nguyen says:

====================
Fix i40e/ice/iavf VF bonding after netdev lock changes

Jose Ignacio Tornos Martinez says:

This series fixes VF bonding failures introduced by commit ad7c7b2172
("net: hold netdev instance lock during sysfs operations").

When adding VFs to a bond immediately after setting trust mode, MAC
address changes fail with -EAGAIN, preventing bonding setup. This
affects both i40e (700-series) and ice (800-series) Intel NICs.

The core issue is lock contention: iavf_set_mac() is now called with the
netdev lock held and waits for MAC change completion while holding it.
However, both the watchdog task that sends the request and the adminq_task
that processes PF responses also need this lock, creating a deadlock where
neither can run, causing timeouts.

Additionally, setting VF trust triggers an unnecessary ~10 second VF reset
in i40e driver that delays bonding setup, even though filter
synchronization happens naturally during normal VF operation. For ice
driver, the delay is not so big, but in the same way the operation is not
necessary.

This series:
1. Eliminates unnecessary VF reset when setting trust in i40e (reset only
   if revoking trust and VF has advanced features configured).
2. Fixes lock contention by polling admin queue synchronously
3. Eliminates unnecessary VF reset when setting trust in ice, (reset only
   if revoking trust and VF has advanced features configured).

The key fix (patch 2/3) implements a synchronous MAC change operation
similar to the approach used for ndo_change_mtu deadlock fix:
https://lore.kernel.org/20260211191855.1532226-1-poros@redhat.com
Instead of scheduling work and waiting, it:

- Sends the virtchnl message directly (not via watchdog)
- Polls the admin queue hardware directly for responses
- Processes all messages inline (including non-MAC messages)
- Returns when complete or times out

This allows the operation to complete synchronously while holding
netdev_lock, without relying on watchdog or adminq_task.

The function can sleep for up to 2.5 seconds polling hardware, but this
is acceptable since netdev_lock is per-device and only serializes
operations on the same interface.

Testing shows VF bonding now works reliably in ~5 seconds vs 15+ seconds
before (i40e), without timeouts or errors (i40e and ice).

Tested on Intel 700-series (i40e) and 800-series (ice) dual-port NICs
with iavf driver.

Thanks to Jan Tluka <jtluka@redhat.com> and Yuying Ma <yuma@redhat.com> for
reporting the issues.

* '40GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue:
  ice: skip unnecessary VF reset when setting trust
  iavf: send MAC change request synchronously
  i40e: skip unnecessary VF reset when setting trust
====================

Link: https://patch.msgid.link/20260928224454.483072-1-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-10-05 15:44:46 -07:00
..
devlink ice: fix use-after-free in dynamic port cleanup 2026-10-02 13:38:08 -07:00
virt virtchnl: move virtchnl and virtchnl2 headers to 'include/linux/net/intel' 2026-08-12 13:56:50 -07:00
ice_adapter.c ice: implement CPI support for E825C 2026-06-13 13:24:35 -07:00
ice_adapter.h ice: implement CPI support for E825C 2026-06-13 13:24:35 -07:00
ice_adminq_cmd.h ice: add Tx reference clock index handling to AN restart command 2026-06-13 13:24:35 -07:00
ice_arfs.c Convert more 'alloc_obj' cases to default GFP_KERNEL arguments 2026-02-21 20:03:00 -08:00
ice_arfs.h ice: use napi's irq affinity and rmap IRQ notifiers 2025-02-26 19:51:37 -08:00
ice_base.c ice: change XDP RxQ frag_size from DMA write length to xdp.frame_sz 2026-03-05 08:02:04 -08:00
ice_base.h ice: add E830 Earliest TxTime First Offload support 2025-09-19 08:42:07 -07:00
ice_common.c ice: add missing xa_destroy for sched_node_ids 2026-09-08 13:10:35 -07:00
ice_common.h virtchnl: move virtchnl and virtchnl2 headers to 'include/linux/net/intel' 2026-08-12 13:56:50 -07:00
ice_controlq.c ice, libie: move generic adminq descriptors to lib 2025-07-24 09:22:26 -07:00
ice_controlq.h ice, libie: move generic adminq descriptors to lib 2025-07-24 09:22:26 -07:00
ice_cpi.c ice: implement CPI support for E825C 2026-06-13 13:24:35 -07:00
ice_cpi.h ice: implement CPI support for E825C 2026-06-13 13:24:35 -07:00
ice_dcb_lib.c ice: fix locking in ice_dcb_rebuild() 2026-05-08 16:01:09 -07:00
ice_dcb_lib.h iidc/ice/irdma: Update IDC to support multiple consumers 2025-05-09 11:35:43 -07:00
ice_dcb_nl.c ice: Replace ice specific DSCP mapping num with a kernel define 2025-04-30 13:09:08 -07:00
ice_dcb_nl.h
ice_dcb.c ice, libie: move generic adminq descriptors to lib 2025-07-24 09:22:26 -07:00
ice_dcb.h
ice_ddp.c ice: don't leave device non-functional if Tx scheduler config fails 2025-08-25 09:44:43 -07:00
ice_ddp.h ice: support optional flags in signature segment header 2024-11-13 10:30:09 -08:00
ice_debugfs.c ice: move debugfs code to fwlog 2025-09-11 12:10:31 -07:00
ice_devids.h ice: add E835 device IDs 2025-07-18 09:02:28 -07:00
ice_dpll.c ice: suppress DPLL errors during reset recovery 2026-07-28 11:23:01 -07:00
ice_dpll.h ice: implement E825 TX ref clock control and TXC hardware sync status 2026-06-13 13:24:36 -07:00
ice_eswitch_br.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
ice_eswitch_br.h ice: Flush FDB entries before reset 2024-10-08 14:08:19 -07:00
ice_eswitch.c ice: fix metadata_dst refcount handling on representor teardown 2026-10-02 13:41:12 -07:00
ice_eswitch.h ice: rename devlink_port.[ch] to port.[ch] 2024-12-17 09:32:08 -08:00
ice_ethtool_fdir.c ice: make const read-only array dflt_rules static 2025-04-11 11:58:57 -07:00
ice_ethtool.c ice: acquire NVM lock around each flash read 2026-08-11 13:22:57 -07:00
ice_ethtool.h ice: remove invalid parameter of equalizer 2025-01-24 10:49:42 -08:00
ice_fdir.c ice: fix comment typo and correct module format string 2025-11-27 18:34:21 -08:00
ice_fdir.h ice: change q_index variable type to s16 to store -1 value 2024-11-04 13:09:33 -08:00
ice_flex_pipe.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
ice_flex_pipe.h ice: convert ice_add_prof() to bitmap 2025-07-18 09:02:28 -07:00
ice_flex_type.h ice: improve TCAM priority handling for RSS profiles 2025-11-06 14:19:43 -08:00
ice_flow.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
ice_flow.h ice: add flow parsing for GTP and new protocol field support 2025-11-06 14:19:39 -08:00
ice_fltr.c
ice_fltr.h
ice_fw_update.c ice: mention fw_activate action along with devlink reload 2026-05-02 19:12:46 -07:00
ice_fw_update.h
ice_gnss.c ice: use kzalloc() to allocate staging buffer for reading from GNSS 2026-07-08 10:44:43 +02:00
ice_gnss.h ice: Don't check device type when checking GNSS presence 2025-02-10 08:52:04 -08:00
ice_hw_autogen.h ice: add E830 Earliest TxTime First Offload support 2025-09-19 08:42:07 -07:00
ice_hwmon.c
ice_hwmon.h
ice_idc_int.h iidc/ice/irdma: Break iidc.h into two headers 2025-04-30 13:09:08 -07:00
ice_idc.c Merge branch '200GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue 2026-02-28 08:43:56 -08:00
ice_irq.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
ice_irq.h ice: simplify VF MSI-X managing 2025-02-05 09:04:57 -08:00
ice_lag.c ice: fix LAG recipe to profile association 2026-07-23 09:00:50 -07:00
ice_lag.h ice: Remove deprecated ice_lag_move_new_vf_nodes() call 2025-09-19 08:42:08 -07:00
ice_lan_tx_rx.h ice: implement configurable header split for regular Rx 2025-10-29 13:55:21 -07:00
ice_lib.c ice: clear the default forwarding VSI rule when releasing a VSI 2026-08-11 13:22:57 -07:00
ice_lib.h ice: use u64_stats API to access pkts/bytes in dim sample 2026-01-26 09:32:36 -08:00
ice_main.c ice: wait for reset completion in ice_resume() 2026-07-28 11:23:01 -07:00
ice_nvm.c ice: acquire NVM lock around each flash read 2026-08-11 13:22:57 -07:00
ice_nvm.h ice: acquire NVM lock around each flash read 2026-08-11 13:22:57 -07:00
ice_osdep.h
ice_parser_rt.c ice: fix ice_parser_rt::bst_key array size 2025-01-24 10:49:30 -08:00
ice_parser.c ice: reject out-of-range ptype in ice_parser_profile_init 2026-07-23 09:00:50 -07:00
ice_parser.h ice: fix ice_parser_rt::bst_key array size 2025-01-24 10:49:30 -08:00
ice_pf_vsi_vlan_ops.c
ice_pf_vsi_vlan_ops.h
ice_protocol_type.h ice: add flow parsing for GTP and new protocol field support 2025-11-06 14:19:39 -08:00
ice_ptp_consts.h ice: update PCS latency settings for E825 10G/25Gb modes 2026-04-18 12:01:33 -07:00
ice_ptp_hw.c ice: fall back to SBQ when LL PHY timer interface times out 2026-08-11 13:22:56 -07:00
ice_ptp_hw.h ice: implement E825 TX ref clock control and TXC hardware sync status 2026-06-13 13:24:36 -07:00
ice_ptp.c ice: fix PTP Call Trace during PTP release 2026-07-23 09:00:50 -07:00
ice_ptp.h ice: implement E825 TX ref clock control and TXC hardware sync status 2026-06-13 13:24:36 -07:00
ice_repr.c ice: use ice_update_eth_stats() for representor stats 2026-03-23 13:29:07 -07:00
ice_repr.h ice: check if SF is ready in ethtool ops 2024-09-06 11:01:24 -07:00
ice_sbq_cmd.h ice: implement CPI support for E825C 2026-06-13 13:24:35 -07:00
ice_sched.c ice: add missing xa_destroy for sched_node_ids 2026-09-08 13:10:35 -07:00
ice_sched.h
ice_sf_eth.c ice: fix double free in ice_sf_eth_activate() error path 2026-04-18 12:01:33 -07:00
ice_sf_eth.h ice: subfunction activation and base devlink ops 2024-09-06 11:01:24 -07:00
ice_sf_vsi_vlan_ops.c ice: basic support for VLAN in subfunctions 2024-09-06 11:01:24 -07:00
ice_sf_vsi_vlan_ops.h ice: basic support for VLAN in subfunctions 2024-09-06 11:01:24 -07:00
ice_sriov.c ice: skip unnecessary VF reset when setting trust 2026-09-28 09:09:06 -07:00
ice_sriov.h ice: add virt/ and move ice_virtchnl* files there 2025-08-25 10:59:57 +02:00
ice_switch.c ice: use bitmap_weighted_xor() in ice_find_free_recp_res_idx() 2026-04-09 13:27:48 -04:00
ice_switch.h
ice_tc_lib.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
ice_tc_lib.h ice: enable LLDP TX for VFs through tc 2025-04-11 10:45:52 -07:00
ice_trace.h eth: ice: don't dereference pointers from TP_printk() 2026-09-08 13:10:35 -07:00
ice_tspll.c ice: dpll: Support E825-C SyncE and dynamic pin discovery 2026-02-05 15:57:46 +01:00
ice_tspll.h ice: dpll: Support E825-C SyncE and dynamic pin discovery 2026-02-05 15:57:46 +01:00
ice_txclk.c ice: implement E825 TX ref clock control and TXC hardware sync status 2026-06-13 13:24:36 -07:00
ice_txclk.h ice: implement E825 TX ref clock control and TXC hardware sync status 2026-06-13 13:24:36 -07:00
ice_txrx_lib.c ice: reshuffle and group Rx and Tx queue fields by cachelines 2026-01-26 09:32:36 -08:00
ice_txrx_lib.h ice: shorten ring stat names and add accessors 2026-01-26 09:32:36 -08:00
ice_txrx.c ice: Restore Ordered MMIO Writes for Tx Doorbells 2026-10-02 13:41:05 -07:00
ice_txrx.h ice: fix race condition in TX timestamp ring cleanup 2026-04-18 12:01:34 -07:00
ice_type.h ice: add missing xa_destroy for sched_node_ids 2026-09-08 13:10:35 -07:00
ice_vf_lib_private.h ice: fix VF interrupts cleanup 2026-07-28 11:23:01 -07:00
ice_vf_lib.c ice: fix VF interrupts cleanup 2026-07-28 11:23:01 -07:00
ice_vf_lib.h virtchnl: move virtchnl and virtchnl2 headers to 'include/linux/net/intel' 2026-08-12 13:56:50 -07:00
ice_vf_mbx.c ice, libie: move generic adminq descriptors to lib 2025-07-24 09:22:26 -07:00
ice_vf_mbx.h ice: add E830 HW VF mailbox message limit support 2024-10-08 14:37:15 -07:00
ice_vf_vsi_vlan_ops.c
ice_vf_vsi_vlan_ops.h
ice_vlan_mode.c ice, libie: move generic adminq descriptors to lib 2025-07-24 09:22:26 -07:00
ice_vlan_mode.h
ice_vlan.h
ice_vsi_vlan_lib.c Convert 'alloc_obj' family to use the new default GFP_KERNEL argument 2026-02-21 17:09:51 -08:00
ice_vsi_vlan_lib.h ice: clear port vlan config during reset 2024-09-30 14:23:31 -07:00
ice_vsi_vlan_ops.c ice: basic support for VLAN in subfunctions 2024-09-06 11:01:24 -07:00
ice_vsi_vlan_ops.h
ice_xsk.c ice: fix rxq info registering in mbuf packets 2026-03-05 08:02:03 -08:00
ice_xsk.h ice: switch to Page Pool 2025-10-29 13:55:16 -07:00
ice.h virtchnl: move virtchnl and virtchnl2 headers to 'include/linux/net/intel' 2026-08-12 13:56:50 -07:00
Makefile ice: implement E825 TX ref clock control and TXC hardware sync status 2026-06-13 13:24:36 -07:00