> -----Original Message----- > From: Jacob Keller <[email protected]> > Sent: Friday, September 25, 2026 4:57 PM > To: Intel Wired LAN <[email protected]>; Machnikowski, Maciej > <[email protected]>; Keller, Jacob E <[email protected]>; > Korba, Przemyslaw <[email protected]>; Nguyen, Anthony L > <[email protected]>; Nitka, Grzegorz <[email protected]>; > Kubalewski, Arkadiusz <[email protected]> > Cc: Keller, Jacob E <[email protected]> > Subject: [PATCH iwl-net v3 04/15] ice: set in_use only after preparing Tx > timestamp index > > The ice_ptp_request_ts() function is used to request a timestamp index for > use with a packet. When reserving an index, it sets the start time and saves > a pointer to the skb into the appropriate index. The function marks the > in_use bit first before doing any of these steps. The IRQ handler which > clears the timestamps reads the in_use bits uses a lockless flow for reading > the in_use bits to determine which ones are in-use. This is necessary as > actually processing a complete timestamp must be able to sleep so we cannot > hold the timestamp tracker lock over the entire sequence. > Additionally, blocking the Tx hotpath with such a lock indefinitely would be > problematic. > > However, the existing flow now has a very narrow window where the IRQ handler > could see a timestamp as in-use but read a stale value for its "start" time. > > Fix this by ordering the sequence to mark the in_use bit last, and add a > memory barrier to prevent re-ordering of the previous writes to setup the > index. > > This was found and reported by Sashiko while reviewing an unrelated change. > > Closes: > https://sashiko.dev/#/patchset/20260821-jk-e825c-minimized-fixes-v1-0-9d0731eb4858%40intel.com?part=7 > Fixes: ea9b847cda64 ("ice: enable transmit timestamps for E810 devices") > Signed-off-by: Jacob Keller <[email protected]> > --- > drivers/net/ethernet/intel/ice/ice_ptp.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-)
Tested-by: Alexander Nowlin <[email protected]>
