forked from Minki/linux
i40e: free the skb after clearing the bitlock
In commitbbc4e7d273
("i40e: fix race condition with PTP_TX_IN_PROGRESS bits") we modified the code which handles Tx timestamps so that we would clear the progress bit as soon as possible. A later commit0bc0706b46
("i40e: check for Tx timestamp timeouts during watchdog") introduced similar code for detecting and handling cleanup of a blocked Tx timestamp. This code did not use the same pattern for cleaning up the skb. Update this code to wait to free the skb until after the bit lock is free, by first setting the ptp_tx_skb to NULL and clearing the lock. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
9c0c3b83d3
commit
c79756cb5f
@ -321,6 +321,8 @@ void i40e_ptp_rx_hang(struct i40e_pf *pf)
|
||||
**/
|
||||
void i40e_ptp_tx_hang(struct i40e_pf *pf)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
|
||||
if (!(pf->flags & I40E_FLAG_PTP) || !pf->ptp_tx)
|
||||
return;
|
||||
|
||||
@ -333,9 +335,12 @@ void i40e_ptp_tx_hang(struct i40e_pf *pf)
|
||||
* within a second it is reasonable to assume that we never will.
|
||||
*/
|
||||
if (time_is_before_jiffies(pf->ptp_tx_start + HZ)) {
|
||||
dev_kfree_skb_any(pf->ptp_tx_skb);
|
||||
skb = pf->ptp_tx_skb;
|
||||
pf->ptp_tx_skb = NULL;
|
||||
clear_bit_unlock(__I40E_PTP_TX_IN_PROGRESS, pf->state);
|
||||
|
||||
/* Free the skb after we clear the bitlock */
|
||||
dev_kfree_skb_any(skb);
|
||||
pf->tx_hwtstamp_timeouts++;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user