• Nick Child's avatar
    ibmvnic: Free any outstanding tx skbs during scrq reset · 49bbeb57
    Nick Child authored
    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: 65d6470d ("ibmvnic: clean pending indirect buffs during reset")
    Signed-off-by: default avatarNick Child <nnac123@linux.ibm.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    49bbeb57
ibmvnic.c 183 KB