- There are a few paths for e1000_down to be called in e1000 where RTNL is
- not currently being held:
- - e1000_shutdown (pci shutdown)
- - e1000_suspend (power management)
- - e1000_reinit_locked (via e1000_reset_task delayed work)
- - e1000_io_error_detected (via pci error handler)
- Hold RTNL in three places to fix this issue:
- - e1000_reset_task: igc, igb, and e100e all hold rtnl in this path.
- - e1000_io_error_detected (pci error handler): e1000e and ixgbe hold
- rtnl in this path. A patch has been posted for igc to do the same
- [1].
- - __e1000_shutdown (which is called from both e1000_shutdown and
- e1000_suspend): igb, ixgbe, and e1000e all hold rtnl in the same
- path.
- The other paths which call e1000_down seemingly hold RTNL and are OK:
- - e1000_close (ndo_stop)
- - e1000_change_mtu (ndo_change_mtu)
- Intel Wired LAN Driver Updates 2024-10-08 (ice, iavf, igb, e1000e, e1000)
- This series contains updates to ice, iavf, igb, e1000e, and e1000
- drivers.
- For ice:
- Wojciech adds support for ethtool reset.
- Paul adds support for hardware based VF mailbox limits for E830 devices.
- Jake adjusts to a common iterator in ice_vc_cfg_qs_msg() and moves
- storing of max_frame and rx_buf_len from VSI struct to the ring
- structure.
- Hongbo Li uses assign_bit() to replace an open-coded instance.
- Markus Elfring adjusts a couple of PTP error paths to use a common,
- shared exit point.
- Yue Haibing removes unused declarations.
- For iavf:
- Yue Haibing removes unused declarations.
- For igb:
- Yue Haibing removes unused declarations.
- For e1000e:
- Takamitsu Iwai removes unneccessary writel() calls.
- Joe Damato adds support for netdev-genl support to query IRQ, NAPI,
- and queue information.
- For e1000:
- Joe Damato adds support for netdev-genl support to query IRQ, NAPI,
- and queue information.
- * '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue:
- e1000: Link NAPI instances to queues and IRQs
- e1000e: Link NAPI instances to queues and IRQs
- e1000e: Remove duplicated writel() in e1000_configure_tx/rx()
- igb: Cleanup unused declarations
- iavf: Remove unused declarations
- ice: Cleanup unused declarations
- ice: Use common error handling code in two functions
- ice: Make use of assign_bit() API
- ice: store max_frame and rx_buf_len only in ice_rx_ring
- ice: consistently use q_idx in ice_vc_cfg_qs_msg()
- ice: add E830 HW VF mailbox message limit support
- ice: Implement ethtool reset support
- ====================
- e1000e: Link NAPI instances to queues and IRQs
- Add support for netdev-genl, allowing users to query IRQ, NAPI, and queue
- information.
- After this patch is applied, note the IRQs assigned to my NIC:
- $ cat /proc/interrupts | grep ens | cut -f1 --delimiter=':'
- 50
- 51
- 52
- While e1000e allocates 3 IRQs (RX, TX, and other), it looks like e1000e
- only has a single NAPI, so I've associated the NAPI with the RX IRQ (50
- on my system, seen above).
- e1000e: Remove duplicated writel() in e1000_configure_tx/rx()
- Duplicated register initialization codes exist in e1000_configure_tx()
- and e1000_configure_rx().
- For example, writel(0, tx_ring->head) writes 0 to tx_ring->head, which
- is adapter->hw.hw_addr + E1000_TDH(0).
- This initialization is already done in ew32(TDH(0), 0).
- ew32(TDH(0), 0) is equivalent to __ew32(hw, E1000_TDH(0), 0). It
- executes writel(0, hw->hw_addr + E1000_TDH(0)). Since variable hw is
- set to &adapter->hw, it is equal to writel(0, tx_ring->head).
- We can remove similar four writel() in e1000_configure_tx() and
- e1000_configure_rx().
- commit 0845d45e900c ("e1000e: Modify Tx/Rx configurations to avoid
- null pointer dereferences in e1000_open") has introduced these
- writel(). This commit moved register writing to
- e1000_configure_tx/rx(), and as result, it caused duplication in
- e1000_configure_tx/rx().
- This patch modifies the sequence of register writing, but removing
- these writes is safe because the same writes were already there before
- the commit.
- I also have checked the datasheets [0] [1] and have not found any
- description that we need to write RDH, RDT, TDH and TDT registers
- twice at initialization. Furthermore, we have tested this patch on an
- I219-V device physically.