e1000e: add timeout for TX HW time stamping work
Hardware may fail to report time stamp e.g.: - when hardware time stamping is not enabled - when time stamp is requested shortly after ifup Timeout time stamp reading work to prevent it from scheduling itself indefinitely. Report timeout events via system log and device stats. Signed-off-by: Jakub Kicinski <kubakici@wp.pl> Tested-by: Aaron Brown <aaron.f.brown@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:

committed by
Jeff Kirsher

parent
13c2884f15
commit
59c871c5f0
@@ -1163,6 +1163,12 @@ static void e1000e_tx_hwtstamp_work(struct work_struct *work)
|
||||
skb_tstamp_tx(adapter->tx_hwtstamp_skb, &shhwtstamps);
|
||||
dev_kfree_skb_any(adapter->tx_hwtstamp_skb);
|
||||
adapter->tx_hwtstamp_skb = NULL;
|
||||
} else if (time_after(jiffies, adapter->tx_hwtstamp_start
|
||||
+ adapter->tx_timeout_factor * HZ)) {
|
||||
dev_kfree_skb_any(adapter->tx_hwtstamp_skb);
|
||||
adapter->tx_hwtstamp_skb = NULL;
|
||||
adapter->tx_hwtstamp_timeouts++;
|
||||
e_warn("clearing Tx timestamp hang");
|
||||
} else {
|
||||
/* reschedule to check later */
|
||||
schedule_work(&adapter->tx_hwtstamp_work);
|
||||
@@ -5567,6 +5573,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
||||
skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
|
||||
tx_flags |= E1000_TX_FLAGS_HWTSTAMP;
|
||||
adapter->tx_hwtstamp_skb = skb_get(skb);
|
||||
adapter->tx_hwtstamp_start = jiffies;
|
||||
schedule_work(&adapter->tx_hwtstamp_work);
|
||||
} else {
|
||||
skb_tx_timestamp(skb);
|
||||
|
Reference in New Issue
Block a user