]> www.infradead.org Git - users/jedix/linux-maple.git/commit
ibmvnic: Free any outstanding tx skbs during scrq reset
authorNick Child <nnac123@linux.ibm.com>
Thu, 20 Jun 2024 15:23:12 +0000 (10:23 -0500)
committerDavid S. Miller <davem@davemloft.net>
Sat, 22 Jun 2024 10:34:34 +0000 (11:34 +0100)
commit49bbeb5719c2f56907d3a9623b47c6c15c2c431d
treef4b51fdf5cb794c80171892f8eb72d7886fa5677
parent2ea8a02a35ed627fd5d91c765b78718ef5d330fc
ibmvnic: Free any outstanding tx skbs during scrq reset

There are 2 types of outstanding tx skb's:
Type 1: Packets that are sitting in the drivers ind_buff that are
waiting to be batch sent to the NIC. During a device reset, these are
freed with a call to ibmvnic_tx_scrq_clean_buffer()
Type 2: Packets that have been sent to the NIC and are awaiting a TX
completion IRQ. These are free'd during a reset with a call to
clean_tx_pools()

During any reset which requires us to free the tx irq, ensure that the
Type 2 skb references are freed. Since the irq is released, it is
impossible for the NIC to inform of any completions.

Furthermore, later in the reset process is a call to init_tx_pools()
which marks every entry in the tx pool as free (ie not outstanding).
So if the driver is to make a call to init_tx_pools(), it must first
be sure that the tx pool is empty of skb references.

This issue was discovered by observing the following in the logs during
EEH testing:
TX free map points to untracked skb (tso_pool 0 idx=4)
TX free map points to untracked skb (tso_pool 0 idx=5)
TX free map points to untracked skb (tso_pool 1 idx=36)

Fixes: 65d6470d139a ("ibmvnic: clean pending indirect buffs during reset")
Signed-off-by: Nick Child <nnac123@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ibm/ibmvnic.c