提交 93845d5f 编写于 作者: L Lendacky, Thomas 提交者: David S. Miller

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: NTom Lendacky <thomas.lendacky@amd.com>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 3abc7cff
...@@ -1212,6 +1212,10 @@ static void xgbe_tx_tstamp(struct work_struct *work) ...@@ -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) ...@@ -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);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册