linux_dsm_epyc7002/drivers/net/ethernet/mellanox/mlxsw
Petr Machata 8028ccda39 mlxsw: spectrum_ptp: Keep unmatched entries in a linked list
To identify timestamps for matching with their packets, Spectrum-1 uses a
five-tuple of (port, direction, domain number, message type, sequence ID).
If there are several clients from the same domain behind a single port
sending Delay_Req's, the only thing differentiating these packets, as far
as Spectrum-1 is concerned, is the sequence ID. Should sequence IDs between
individual clients be similar, conflicts may arise. That is not a problem
to hardware, which will simply deliver timestamps on a first comes, first
served basis.

However the driver uses a simple hash table to store the unmatched pieces.
When a new conflicting piece arrives, it pushes out the previously stored
one, which if it is a packet, is delivered without timestamp. Later on as
the corresponding timestamps arrive, the first one is mismatched to the
second packet, and the second one is never matched and eventually is GCd.

To correct this issue, instead of using a simple rhashtable, use rhltable
to keep the unmatched entries.

Previously, a found unmatched entry would always be removed from the hash
table. That is not the case anymore--an incompatible entry is left in the
hash table. Therefore removal from the hash table cannot be used to confirm
the validity of the looked-up pointer, instead the lookup would simply need
to be redone. Therefore move it inside the critical section. This
simplifies a lot of the code.

Fixes: 8748642751 ("mlxsw: spectrum: PTP: Support SIOCGHWTSTAMP, SIOCSHWTSTAMP ioctls")
Reported-by: Alex Veber <alexve@mellanox.com>
Signed-off-by: Petr Machata <petrm@mellanox.com>
Signed-off-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2019-08-11 21:35:39 -07:00
..
cmd.h mlxsw: cmd: Free running clock PCI BAR and offsets via query firmware 2019-06-13 22:34:55 -07:00
core_acl_flex_actions.c
core_acl_flex_actions.h
core_acl_flex_keys.c mlxsw: spectrum_acl: Avoid size check for RX_ACL_SYSTEM_PORT element 2019-06-19 10:09:22 -04:00
core_acl_flex_keys.h mlxsw: spectrum_acl: Fix SRC_SYS_PORT element size 2019-06-19 10:09:22 -04:00
core_env.c mlxsw: core: Reduce buffer size in transactions for SFP modules temperature readout 2019-05-30 12:59:46 -07:00
core_env.h mlxsw: core: Move ethtool module callbacks to a common location 2019-03-03 22:23:00 -08:00
core_hwmon.c mlxsw: core: Add support for negative temperature readout 2019-06-24 08:15:42 -07:00
core_thermal.c mlxsw: core: Add support for negative temperature readout 2019-06-24 08:15:42 -07:00
core.c mlxsw: pci: PTP: Hook into packet transmit path 2019-07-01 18:58:34 -07:00
core.h mlxsw: pci: PTP: Hook into packet transmit path 2019-07-01 18:58:34 -07:00
emad.h
i2c.c mlxsw: i2c: Allow flexible setting of I2C transactions size 2019-05-30 12:59:46 -07:00
i2c.h
ib.h
item.h
Kconfig mlxsw: spectrum: PTP: Support timestamping on Spectrum-1 2019-07-01 18:58:34 -07:00
Makefile mlxsw: spectrum_ptp: Add implementation for physical hardware clock operations 2019-06-13 22:34:55 -07:00
minimal.c mlxsw: i2c: Extend initialization with querying firmware info 2019-05-30 12:59:46 -07:00
pci_hw.h mlxsw: pci: Query free running clock PCI BAR and offsets 2019-06-13 22:34:55 -07:00
pci.c ethernet: remove redundant memset 2019-07-15 11:06:27 -07:00
pci.h
port.h
reg.h mlxsw: reg: Add QoS PTP Shaper Configuration Register 2019-07-05 15:28:57 -07:00
resources.h mlxsw: resources: Add local_ports_in_{1x, 2x} 2019-05-04 01:21:36 -04:00
spectrum1_acl_tcam.c
spectrum1_kvdl.c
spectrum1_mr_tcam.c
spectrum2_acl_tcam.c
spectrum2_kvdl.c
spectrum2_mr_tcam.c
spectrum_acl_atcam.c
spectrum_acl_bloom_filter.c mlxsw: spectrum_acl: Introduce mutex to guard Bloom Filter updates 2019-02-24 20:25:29 -08:00
spectrum_acl_ctcam.c
spectrum_acl_erp.c mlxsw: spectrum_acl: Avoid warning after identical rules insertion 2019-05-30 12:30:47 -07:00
spectrum_acl_flex_actions.c
spectrum_acl_flex_actions.h
spectrum_acl_flex_keys.c mlxsw: spectrum_acl: Fix SRC_SYS_PORT element size 2019-06-19 10:09:22 -04:00
spectrum_acl_tcam.c mlxsw: spectrum_acl: Rename rehash_dis trace 2019-03-31 11:01:23 -07:00
spectrum_acl_tcam.h mlxsw: spectrum_acl: Don't take rtnl lock during vregion_rehash_intrvl_set() 2019-02-24 20:25:29 -08:00
spectrum_acl.c mlxsw: spectrum_flower: Implement support for ingress device matching 2019-06-19 10:09:22 -04:00
spectrum_buffers.c mlxsw: spectrum_buffers: Further reduce pool size on Spectrum-2 2019-07-31 08:22:12 -07:00
spectrum_cnt.c
spectrum_cnt.h
spectrum_dcb.c mlxsw: spectrum_dcb: Configure DSCP map as the last rule is removed 2019-07-17 15:19:46 -07:00
spectrum_dpipe.c
spectrum_dpipe.h mlxsw: spectrum: Assume CONFIG_NET_DEVLINK is always enabled 2019-04-19 15:03:55 -07:00
spectrum_fid.c mlxsw: spectrum: Do not process learned records with a dummy FID 2019-07-17 15:19:46 -07:00
spectrum_flower.c net: flow_offload: rename tc_cls_flower_offload to flow_cls_offload 2019-07-09 14:38:51 -07:00
spectrum_ipip.c
spectrum_ipip.h
spectrum_kvdl.c
spectrum_mr_tcam.c
spectrum_mr_tcam.h
spectrum_mr.c
spectrum_mr.h
spectrum_nve_vxlan.c mlxsw: spectrum_ptp: Increase parsing depth when PTP is enabled 2019-07-29 13:55:05 -07:00
spectrum_nve.c mlxsw: spectrum_ptp: Increase parsing depth when PTP is enabled 2019-07-29 13:55:05 -07:00
spectrum_nve.h mlxsw: spectrum_ptp: Increase parsing depth when PTP is enabled 2019-07-29 13:55:05 -07:00
spectrum_ptp.c mlxsw: spectrum_ptp: Keep unmatched entries in a linked list 2019-08-11 21:35:39 -07:00
spectrum_ptp.h mlxsw: spectrum: Set up PTP shaper when port status has changed 2019-07-05 15:28:57 -07:00
spectrum_qdisc.c
spectrum_router.c ipv6: Stop sending in-kernel notifications for each nexthop 2019-06-18 09:45:37 -07:00
spectrum_router.h
spectrum_span.c ipv4: Add support to rtable for ipv6 gateway 2019-04-08 15:22:40 -07:00
spectrum_span.h
spectrum_switchdev.c mlxsw: spectrum: Do not process learned records with a dummy FID 2019-07-17 15:19:46 -07:00
spectrum_switchdev.h
spectrum.c mlxsw: spectrum: Fix error path in mlxsw_sp_module_init() 2019-07-31 08:22:12 -07:00
spectrum.h mlxsw: spectrum_ptp: Increase parsing depth when PTP is enabled 2019-07-29 13:55:05 -07:00
switchib.c mlxsw: switch_ib: Pass valid HW id down to mlxsw_core_port_init() 2019-04-04 17:42:36 -07:00
switchx2.c mlxsw: core: Add support for using SKB control buffer 2019-07-01 18:58:34 -07:00
trap.h mlxsw: spectrum: PTP: Support timestamping on Spectrum-1 2019-07-01 18:58:34 -07:00
txheader.h