linux/drivers/net/ethernet/intel
Jacob Keller b1a582e64b ice: introduce ice_ptp_reset_cached_phctime function
If the PTP hardware clock is adjusted, the ice driver must update the
cached PHC timestamp. This is required in order to perform timestamp
extension on the shorter timestamps captured by the PHY.

Currently, we simply call ice_ptp_update_cached_phctime in the settime and
adjtime callbacks. This has a few issues:

1) if ICE_CFG_BUSY is set because another thread is updating the Rx rings,
   we will exit with an error. This is not checked, and the functions do
   not re-schedule the update. This could leave the cached timestamp
   incorrect until the next scheduled work item execution.

2) even if we did handle an update, any currently outstanding Tx timestamp
   would be extended using the wrong cached PHC time. This would produce
   incorrect results.

To fix these issues, introduce a new ice_ptp_reset_cached_phctime function.
This function calls the ice_ptp_update_cached_phctime, and discards
outstanding Tx timestamps.

If the ice_ptp_update_cached_phctime function fails because ICE_CFG_BUSY is
set, we log a warning and schedule the thread to execute soon. The update
function is modified so that it always updates the cached copy in the PF
regardless. This ensures we have the most up to date values possible and
minimizes the risk of a packet timestamp being extended with the wrong
value.

It would be nice if we could skip reporting Rx timestamps until the cached
values are up to date. However, we can't access the Rx rings while
ICE_CFG_BUSY is set because they are actively being updated by another
thread.

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Gurucharan <gurucharanx.g@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
2022-08-16 09:04:38 -07:00
..
e1000 net: add skb_[inner_]tcp_all_headers helpers 2022-07-02 16:22:25 +01:00
e1000e e1000e: convert .adjfreq to .adjfine 2022-07-28 10:57:06 -07:00
fm10k intel/fm10k:fix repeated words in comments 2022-06-30 10:56:01 -07:00
i40e Merge branch '1GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue 2022-08-01 11:15:40 -07:00
iavf Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-08-03 09:04:55 +02:00
ice ice: introduce ice_ptp_reset_cached_phctime function 2022-08-16 09:04:38 -07:00
igb igb: convert .adjfreq to .adjfine 2022-07-28 11:03:01 -07:00
igbvf intel/igbvf:fix repeated words in comments 2022-06-30 11:04:14 -07:00
igc Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-07-21 13:03:39 -07:00
ixgb net: add skb_[inner_]tcp_all_headers helpers 2022-07-02 16:22:25 +01:00
ixgbe ixgbe: convert .adjfreq to .adjfine 2022-07-28 11:02:02 -07:00
ixgbevf intel/ixgbevf:fix repeated words in comments 2022-06-30 11:08:45 -07:00
e100.c intel: remove unused macros 2022-06-30 09:40:55 -07:00
Kconfig ice: support crosstimestamping on E822 devices if supported 2021-12-21 09:11:40 -08:00
Makefile