igb: protect TX timestamping from API misuse
Subsystems (2)
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
@@ -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
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_PROGRESSflag 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
Brown
PATCH 1/1 igb: protect TX timestamping from API misuse
In reply to Cliff SpradlinQuoted 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 misuseHW 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_PROGRESSflag 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.
Signed-off-by Cliff Spradlin <[email protected]>--- drivers/net/ethernet/intel/igb/igb_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)