amd-xgbe: Add a check for an skb in the timestamp path
Spurious Tx timestamp interrupts can cause an oops in the Tx timestamp processing function if a Tx timestamp skb is NULL. Add a check to insure a Tx timestamp skb is present before attempting to use it. Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
3abc7cff67
commit
93845d5f1b
@ -1212,6 +1212,10 @@ static void xgbe_tx_tstamp(struct work_struct *work)
|
|||||||
u64 nsec;
|
u64 nsec;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&pdata->tstamp_lock, flags);
|
||||||
|
if (!pdata->tx_tstamp_skb)
|
||||||
|
goto unlock;
|
||||||
|
|
||||||
if (pdata->tx_tstamp) {
|
if (pdata->tx_tstamp) {
|
||||||
nsec = timecounter_cyc2time(&pdata->tstamp_tc,
|
nsec = timecounter_cyc2time(&pdata->tstamp_tc,
|
||||||
pdata->tx_tstamp);
|
pdata->tx_tstamp);
|
||||||
@ -1223,8 +1227,9 @@ static void xgbe_tx_tstamp(struct work_struct *work)
|
|||||||
|
|
||||||
dev_kfree_skb_any(pdata->tx_tstamp_skb);
|
dev_kfree_skb_any(pdata->tx_tstamp_skb);
|
||||||
|
|
||||||
spin_lock_irqsave(&pdata->tstamp_lock, flags);
|
|
||||||
pdata->tx_tstamp_skb = NULL;
|
pdata->tx_tstamp_skb = NULL;
|
||||||
|
|
||||||
|
unlock:
|
||||||
spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
|
spin_unlock_irqrestore(&pdata->tstamp_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user