mirror_ubuntu-kernels/drivers/net/ethernet
Jacob Keller 30f1587409 ice: fix handling of burst Tx timestamps
Commit 1229b33973 ("ice: Add low latency Tx timestamp read") refactored
PTP timestamping logic to use a threaded IRQ instead of a separate kthread.

This implementation introduced ice_misc_intr_thread_fn and redefined the
ice_ptp_process_ts function interface to return a value of whether or not
the timestamp processing was complete.

ice_misc_intr_thread_fn would take the return value from ice_ptp_process_ts
and convert it into either IRQ_HANDLED if there were no more timestamps to
be processed, or IRQ_WAKE_THREAD if the thread should continue processing.

This is not correct, as the kernel does not re-schedule threaded IRQ
functions automatically. IRQ_WAKE_THREAD can only be used by the main IRQ
function.

This results in the ice_ptp_process_ts function (and in turn the
ice_ptp_tx_tstamp function) from only being called exactly once per
interrupt.

If an application sends a burst of Tx timestamps without waiting for a
response, the interrupt will trigger for the first timestamp. However,
later timestamps may not have arrived yet. This can result in dropped or
discarded timestamps. Worse, on E822 hardware this results in the interrupt
logic getting stuck such that no future interrupts will be triggered. The
result is complete loss of Tx timestamp functionality.

Fix this by modifying the ice_misc_intr_thread_fn to perform its own
polling of the ice_ptp_process_ts function. We sleep for a few microseconds
between attempts to avoid wasting significant CPU time. The value was
chosen to allow time for the Tx timestamps to complete without wasting so
much time that we overrun application wait budgets in the worst case.

The ice_ptp_process_ts function also currently returns false in the event
that the Tx tracker is not initialized. This would result in the threaded
IRQ handler never exiting if it gets started while the tracker is not
initialized.

Fix the function to appropriately return true when the tracker is not
initialized.

Note that this will not reproduce with default ptp4l behavior, as the
program always synchronously waits for a timestamp response before sending
another timestamp request.

Reported-by: Siddaraju DH <siddaraju.dh@intel.com>
Fixes: 1229b33973 ("ice: Add low latency Tx timestamp read")
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Gurucharan G <gurucharanx.g@intel.com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Link: https://lore.kernel.org/r/20221118222729.1565317-1-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2022-11-21 20:50:35 -08:00
..
3com net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
8390 ethernet: 8390: remove unnecessary check of mem 2022-09-29 11:05:23 +02:00
actions net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
adaptec net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
adi net: ethernet: adi: adin1110: Fix notifiers 2022-10-28 21:54:21 -07:00
aeroflex net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
agere net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
alacritech net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
allwinner net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
alteon net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
altera net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
amazon net: ena: Fix error handling in ena_init() 2022-11-15 12:55:59 +01:00
amd amd-xgbe: add the bit rate quirk for Molex cables 2022-10-21 22:40:22 -07:00
apm drivers: net: xgene: disable napi when register irq failed in xgene_enet_open() 2022-11-08 15:15:55 +01:00
apple
aquantia net: atlantic: macsec: clear encryption keys from the stack 2022-11-10 11:58:52 +01:00
arc net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
asix net: ax88796c: Use skb_put_data() instead of skb_put/memcpy pair 2022-09-29 09:37:29 +02:00
atheros net: ag71xx: call phylink_disconnect_phy if ag71xx_hw_enable() fail in ag71xx_open() 2022-11-15 20:22:12 -08:00
broadcom bnxt_en: Remove debugfs when pci_register_driver failed 2022-11-14 10:53:29 +00:00
brocade net: bna: Fix spelling mistake "muliple" -> "multiple" 2022-09-30 13:01:16 +01:00
cadence net: macb: Specify PHY PM management done by MAC 2022-10-20 21:12:00 -07:00
calxeda net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
cavium net: liquidio: simplify if expression 2022-11-18 10:27:20 +00:00
chelsio cxgb4vf: shut down the adapter when t4vf_update_port_info() failed in cxgb4vf_open() 2022-11-09 19:30:30 -08:00
cirrus net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
cisco net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
cortina net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
davicom net: davicom: Fix return type of dm9000_start_xmit 2022-09-19 18:23:14 -07:00
dec net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
dlink net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
emulex net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
engleder tsnep: Use page pool for RX 2022-09-30 11:32:27 +01:00
ezchip
faraday net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
freescale net: fman: Unregister ethernet device on removal 2022-11-04 19:33:38 -07:00
fujitsu net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
fungible net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
google net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
hisilicon net: hns3: fix setting incorrect phy link ksettings for firmware in resetting process 2022-11-15 13:29:26 +01:00
huawei net: hinic: Fix error handling in hinic_module_init() 2022-11-11 19:57:37 -08:00
i825xx
ibm ibmveth: Reduce default tx queues to 8 2022-11-08 17:46:24 -08:00
intel ice: fix handling of burst Tx timestamps 2022-11-21 20:50:35 -08:00
litex net: ethernet: litex: Fix return type of liteeth_start_xmit 2022-09-19 18:23:39 -07:00
marvell octeontx2-af: cn10k: mcs: Fix copy and paste bug in mcs_bbe_intr_handler() 2022-11-21 13:04:28 +00:00
mediatek net: ethernet: mtk_eth_soc: fix error handling in mtk_open() 2022-11-18 19:33:05 -08:00
mellanox net/mlx4: Check retval of mlx4_bitmap_init 2022-11-18 19:34:30 -08:00
micrel net: ksz884x: fix missing pci_disable_device() on error in pcidev_init() 2022-10-25 19:46:35 -07:00
microchip net: microchip: sparx5: Fix return value in sparx5_tc_setup_qdisc_ets() 2022-11-21 11:02:33 +00:00
microsoft Including fixes from wifi, netfilter and can. 2022-09-22 10:58:13 -07:00
moxa net: moxa: fix endianness-related issues from 'sparse' 2022-09-06 10:24:42 +02:00
mscc Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2022-09-29 14:30:51 -07:00
myricom net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
natsemi net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
neterion ethernet: s2io: disable napi when start nic failed in s2io_card_up() 2022-11-10 13:00:59 +01:00
netronome nfp: add port from netdev validation for EEPROM access 2022-11-18 19:41:21 -08:00
ni net: nixge: disable napi when enable interrupts failed in nixge_open() 2022-11-08 17:44:02 -08:00
nvidia net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
nxp net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
oki-semi net: pch_gbe: fix pci device refcount leak while module exiting 2022-11-18 19:40:14 -08:00
packetengines net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
pasemi net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
pensando net: ionic: Fix error handling in ionic_init_module() 2022-11-14 18:50:53 -08:00
qlogic net/qla3xxx: fix potential memleak in ql3xxx_send() 2022-11-18 19:39:05 -08:00
qualcomm net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
rdc net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
realtek r8169: add rtl_disable_rxdvgate() 2022-09-30 18:17:06 -07:00
renesas net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
rocker treewide: use get_random_bytes() when possible 2022-10-11 17:42:58 -06:00
samsung net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
seeq
sfc sfc: Fix an error handling path in efx_pci_probe() 2022-11-01 09:09:47 -07:00
sgi net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
silan
sis net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
smsc net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
socionext net: ethernet: ave: Fix MAC to be in charge of PHY PM 2022-10-26 20:21:34 -07:00
stmicro net: stmmac: ensure tx function is not running in stmmac_xdp_release() 2022-11-11 19:59:36 -08:00
sun sunhme: Uninitialized variable in happy_meal_init() 2022-10-15 11:14:24 +01:00
sunplus eth: sp7021: drop free_netdev() from spl2sw_init_netdev() 2022-11-10 16:27:33 -08:00
synopsys net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
tehuti net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
ti net: cpsw: disable napi in cpsw_ndo_open() 2022-11-09 18:30:40 -08:00
toshiba net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
tundra ethernet: tundra: free irq when alloc ring failed in tsi108_open() 2022-11-10 15:39:08 +01:00
vertexcom net: vertexcom: mse102x: Silence no spi_device_id warnings 2022-09-26 12:46:16 -07:00
via net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
wangxun net: ngbe: Add build support for ngbe 2022-08-30 12:32:51 +02:00
wiznet net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
xilinx net: emaclite: update reset_lock member documentation 2022-10-28 11:39:57 +01:00
xircom net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
xscale net: xscale: Fix return type for implementation of ndo_start_xmit 2022-09-02 21:18:56 -07:00
dnet.c net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
dnet.h
ec_bhf.c
ethoc.c net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
fealnx.c net: ethernet: move from strlcpy with unused retval to strscpy 2022-08-31 14:11:26 -07:00
jme.c net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
jme.h
Kconfig net: ethernet: adi: Add ADIN1110 support 2022-09-20 15:00:30 +02:00
korina.c net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
lantiq_etop.c net: lantiq_etop: don't free skb when returning NETDEV_TX_BUSY 2022-10-24 13:02:18 +01:00
lantiq_xrx200.c net: drop the weight argument from netif_napi_add 2022-09-28 18:57:14 -07:00
Makefile net: ethernet: adi: Add ADIN1110 support 2022-09-20 15:00:30 +02:00