Skip to contentSkip to conversation

igb: protect TX timestamping from API misuse

PATCH New Cliff Spradlin 3 participants 3 messages Jun 19, 2017 – Jun 27, 2017

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 igb: protect TX timestamping from API misuse

HW timestamping can only be requested for a packet if the NIC is first setup via ioctl(SIOCSHWTSTAMP). If this step was skipped, then the igb driver still allowed TX packets to request HW timestamping. In this situation, the _IGB_PTP_TX_IN_PROGRESS flag was set and would never clear. This prevented any future HW timestamping requests to succeed.

Fix this by checking that the NIC is configured for HW TX timestamping before accepting a HW TX timestamping request.

---
 drivers/net/ethernet/intel/igb/igb_main.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/net/ethernet/intel/igb/igb_main.c +2 -1
index 63b035454cd0..4077a09fd4c2 100644
@@ -5388,7 +5388,8 @@ netdev_tx_t igb_xmit_frame_ring(struct sk_buff *skb,
 	if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
 		struct igb_adapter *adapter = netdev_priv(tx_ring->netdev);
 
-		if (!test_and_set_bit_lock(__IGB_PTP_TX_IN_PROGRESS,
+		if (adapter->tstamp_config.tx_type & HWTSTAMP_TX_ON &&
+		    !test_and_set_bit_lock(__IGB_PTP_TX_IN_PROGRESS,
 					   &adapter->state)) {
 			skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
 			tx_flags |= IGB_TX_FLAGS_TSTAMP;
Signature · 1 line
2.13.1.518.g3df882009-goog
#1 lore raw

PATCH 1/1 igb: protect TX timestamping from API misuse

Quoted 5 lines · Cliff Spradlin

HW timestamping can only be requested for a packet if the NIC is first setup via ioctl(SIOCSHWTSTAMP). If this step was skipped, then the igb driver still allowed TX packets to request HW timestamping. In this situation, the _IGB_PTP_TX_IN_PROGRESS flag was set and would never clear. This prevented any future HW timestamping requests to succeed.

Good catch!

This probably explains some weird cases I saw where HW timestamping stopped working and the only thing that fixed it was to rmmod && modprobe the igb driver. I suspected a faulty HW and it's probably just me messing with hwstamp_ctl at wrong time.

Thanks,

Signature · 1 line
Miroslav Lichvar
#2 lore raw

PATCH 1/1 igb: protect TX timestamping from API misuse

In reply to Cliff Spradlin
Quoted 13 lines

From: Intel-wired-lan [mailto:intel-wired-lan-bounces at osuosl.org] On Behalf Of Cliff Spradlin
Sent: Monday, June 19, 2017 1:31 PM
To: intel-wired-lan at lists.osuosl.org
Subject: [Intel-wired-lan] [PATCH] igb: protect TX timestamping from API misuse

HW timestamping can only be requested for a packet if the NIC is first setup via ioctl(SIOCSHWTSTAMP). If this step was skipped, then the igb driver still allowed TX packets to request HW timestamping. In this situation, the _IGB_PTP_TX_IN_PROGRESS flag was set and would never clear. This prevented any future HW timestamping requests to succeed.

Quoted 7 lines

Fix this by checking that the NIC is configured for HW TX timestamping before accepting a HW TX timestamping request.

---
 drivers/net/ethernet/intel/igb/igb_main.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)