linux/drivers/net/ethernet/intel/ice
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
..
ice.h ice: Introduce enabling promiscuous mode on multiple VF's 2022-07-28 11:44:22 -07:00
ice_adminq_cmd.h ice: add i2c write command 2022-07-21 11:22:45 -07:00
ice_arfs.c
ice_arfs.h
ice_base.c
ice_base.h
ice_cgu_regs.h
ice_common.c ice: add i2c write command 2022-07-21 11:22:45 -07:00
ice_common.h ice: add i2c write command 2022-07-21 11:22:45 -07:00
ice_controlq.c
ice_controlq.h
ice_dcb.c
ice_dcb.h
ice_dcb_lib.c
ice_dcb_lib.h
ice_dcb_nl.c
ice_dcb_nl.h
ice_devids.h ice: handle E822 generic device ID in PLDM header 2022-07-12 09:25:34 -07:00
ice_devlink.c ice: change devlink code to read NVM in blocks 2022-07-12 09:25:47 -07:00
ice_devlink.h
ice_eswitch.c ice: Introduce enabling promiscuous mode on multiple VF's 2022-07-28 11:44:22 -07:00
ice_eswitch.h ice: allow creating VFs for !CONFIG_NET_SWITCHDEV 2022-04-14 08:19:54 -07:00
ice_ethtool.c ice: track and warn when PHC update is late 2022-08-16 09:04:38 -07:00
ice_ethtool_fdir.c ice: Use correct order for the parameters of devm_kcalloc() 2022-06-08 08:55:13 -07:00
ice_fdir.c
ice_fdir.h
ice_flex_pipe.c ice: Add support for PPPoE hardware offload 2022-07-26 10:56:32 -07:00
ice_flex_pipe.h
ice_flex_type.h
ice_flow.c
ice_flow.h
ice_fltr.c
ice_fltr.h
ice_fw_update.c ice: handle E822 generic device ID in PLDM header 2022-07-12 09:25:34 -07:00
ice_fw_update.h
ice_gnss.c ice: add write functionality for GNSS TTY 2022-07-21 13:25:17 -07:00
ice_gnss.h ice: add write functionality for GNSS TTY 2022-07-21 13:25:17 -07:00
ice_hw_autogen.h
ice_idc.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-05-12 16:15:30 -07:00
ice_idc_int.h
ice_lag.c ice: Remove unnecessary NULL check before dev_put 2022-06-30 13:53:33 -07:00
ice_lag.h
ice_lan_tx_rx.h
ice_lib.c ice: initialize cached_phctime when creating Rx rings 2022-08-16 09:04:37 -07:00
ice_lib.h ice: Introduce enabling promiscuous mode on multiple VF's 2022-07-28 11:44:22 -07:00
ice_main.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-08-03 09:04:55 +02:00
ice_nvm.c ice: Fix memory leak in ice_get_orom_civd_data() 2022-04-14 08:31:01 -07:00
ice_nvm.h
ice_osdep.h
ice_pf_vsi_vlan_ops.c
ice_pf_vsi_vlan_ops.h
ice_protocol_type.h ice: Add support for PPPoE hardware offload 2022-07-26 10:56:32 -07:00
ice_ptp.c ice: introduce ice_ptp_reset_cached_phctime function 2022-08-16 09:04:38 -07:00
ice_ptp.h ice: track and warn when PHC update is late 2022-08-16 09:04:38 -07:00
ice_ptp_consts.h
ice_ptp_hw.c
ice_ptp_hw.h
ice_repr.c ice: link representors to PCI device 2022-05-06 09:43:01 -07:00
ice_repr.h
ice_sbq_cmd.h
ice_sched.c
ice_sched.h
ice_sriov.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-07-28 18:21:16 -07:00
ice_sriov.h
ice_switch.c Bitmap patches for v6.0-rc1 2022-08-07 17:52:35 -07:00
ice_switch.h ice: Introduce enabling promiscuous mode on multiple VF's 2022-07-28 11:44:22 -07:00
ice_tc_lib.c ice: Add support for PPPoE hardware offload 2022-07-26 10:56:32 -07:00
ice_tc_lib.h ice: Add support for PPPoE hardware offload 2022-07-26 10:56:32 -07:00
ice_trace.h
ice_txrx.c ice: track Tx timestamp stats similar to other Intel drivers 2022-08-16 09:04:38 -07:00
ice_txrx.h Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-05-19 11:23:59 -07:00
ice_txrx_lib.c
ice_txrx_lib.h
ice_type.h ice: Introduce enabling promiscuous mode on multiple VF's 2022-07-28 11:44:22 -07:00
ice_vf_lib.c ice: Fix promiscuous mode not turning off 2022-07-28 11:44:40 -07:00
ice_vf_lib.h ice: Fix promiscuous mode not turning off 2022-07-28 11:44:40 -07:00
ice_vf_lib_private.h
ice_vf_mbx.c
ice_vf_mbx.h
ice_vf_vsi_vlan_ops.c
ice_vf_vsi_vlan_ops.h
ice_virtchnl.c Merge branch '100GbE' of git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/next-queue 2022-07-29 21:26:10 -07:00
ice_virtchnl.h
ice_virtchnl_allowlist.c
ice_virtchnl_allowlist.h
ice_virtchnl_fdir.c ice: always check VF VSI pointer values 2022-05-05 11:28:36 -07:00
ice_virtchnl_fdir.h
ice_vlan.h
ice_vlan_mode.c ice: Add support for VLAN TPID filters in switchdev 2022-06-30 13:53:33 -07:00
ice_vlan_mode.h
ice_vsi_vlan_lib.c
ice_vsi_vlan_lib.h
ice_vsi_vlan_ops.c
ice_vsi_vlan_ops.h
ice_xsk.c Merge https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next 2022-04-27 17:09:32 -07:00
ice_xsk.h
Makefile ice: fix access-beyond-end in the switch code 2022-06-02 12:41:10 +02:00