linux/drivers/net/ethernet
Jacob Keller 1d1a79b5b9 ixgbe: Check PTP Rx timestamps via BPF filter
This patch fixes a potential Rx timestamp deadlock that causes the Rx
timestamping to stall indefinitely. The issue could occur when a PTP packet is
timestamped by hardware but never reaches the Rx queue. In order to prevent a
permanent loss of timestamping, the RXSTMP(L/H) registers have to be read to
unlock them. (This used to only occur when a packet that was timestamped
reached the software.) However the registers can't be read early otherwise
there is no way to correlate them to the packet.

This patch introduces a filter function which can be used to determine if a
packet should have been timestamped. Supplied with the filter setup by the
hwtstamp ioctl, check to make sure the PTP protocol and message type match the
expected values. If so, then read the timestamp registers (to free them.) At
this point check the descriptor bit, if the bit is set then we know this
packet correlates to the timestamp stored in the RXTSTAMP registers.
Otherwise, assume that packet was dropped by the hardware, and ignore this
timestamp value. However, we have at least unlocked the rxtstamp registers for
future timestamping.

Due to the way the driver handles skb data, it cannot be directly accessed. In
order to work around this, a copy of the skb data into a linear buffer is
made. From this buffer it becomes possible to read the data correctly

Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Richard Cochran <richardcochran@gmail.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2012-06-14 03:13:48 -07:00
..
3com Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2012-05-22 19:22:50 -07:00
8390 ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
adaptec starfire: remove deprecated options. 2012-04-07 11:45:26 +02:00
adi bfin: Fix build failure due to get_ts_info() changes. 2012-04-06 00:17:50 -04:00
aeroflex ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
alteon Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
amd ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
apple ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
atheros ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
broadcom Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-06-12 21:59:18 -07:00
brocade ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
cadence net/at91_ether: use gpio_to_irq for phy IRQ line 2012-04-28 21:48:39 -04:00
calxeda
chelsio ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
cirrus cirrus: cs89x0: Remove function prototypes and reorder declarations 2012-05-18 23:48:07 -04:00
cisco drivers/net: Convert compare_ether_addr to ether_addr_equal 2012-05-10 23:33:01 -04:00
davicom dm9000: some coldfire boards need this 2012-05-14 18:40:16 -04:00
dec ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
dlink Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-05-07 23:35:40 -04:00
emulex Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-06-12 21:59:18 -07:00
faraday
freescale ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
fujitsu drivers/net: delete all code/drivers depending on CONFIG_MCA 2012-05-17 16:37:41 -04:00
hp ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
i825xx ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
ibm ehea: fix losing of NEQ events when one event occurred early 2012-05-10 22:45:54 -04:00
icplus
intel ixgbe: Check PTP Rx timestamps via BPF filter 2012-06-14 03:13:48 -07:00
marvell Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-06-12 21:59:18 -07:00
mellanox ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
micrel net/ethernet: ks8851_mll unregister_netdev() before freeing 2012-06-07 13:15:09 -07:00
microchip
myricom myri10ge: stop using net_device.{base_addr, irq}. 2012-04-07 11:58:09 +02:00
natsemi drivers/net: delete all code/drivers depending on CONFIG_MCA 2012-05-17 16:37:41 -04:00
neterion ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
nuvoton
nvidia forcedeth: add transmit timestamping support 2012-04-30 21:33:27 -04:00
nxp lpc_eth: fix tx completion 2012-06-11 13:12:33 -07:00
octeon
oki-semi Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-05-16 22:17:37 -04:00
packetengines yellowfin: stop using net_device.{base_addr, irq}. 2012-04-07 11:45:26 +02:00
pasemi net/pasemi: fix compiler warning 2012-05-02 20:52:48 -04:00
qlogic qlcnic: Fix protcol type in case of inband vlan. 2012-06-07 13:18:54 -07:00
racal
rdc r6040: Do a Proper deinit at errorpath and also when driver unloads (calling r6040_remove_one) 2012-05-29 22:31:08 -04:00
realtek r8169: avoid NAPI scheduling delay. 2012-06-10 20:21:07 -07:00
renesas net: sh_eth: fix the rxdesc pointer when rx descriptor empty happens 2012-05-29 17:30:08 -04:00
seeq Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
sfc Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-05-16 22:17:37 -04:00
sgi ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
silan sc92031: stop using net_device.{base_addr, irq} 2012-04-07 11:45:27 +02:00
sis sis900: stop using net_device.{base_addr, irq} and convert to __iomem. 2012-04-07 11:47:18 +02:00
smsc ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
stmicro Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-06-12 21:59:18 -07:00
sun Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-06-12 21:59:18 -07:00
tehuti Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2012-05-22 19:22:50 -07:00
ti arm-soc: cleanups, part 2 2012-05-26 12:31:49 -07:00
tile tilegx network driver: initial support 2012-06-11 17:01:26 -07:00
toshiba drivers/net: Convert compare_ether_addr to ether_addr_equal 2012-05-10 23:33:01 -04:00
tundra Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
via ethernet: Remove casts to same type 2012-06-06 09:31:33 -07:00
wiznet net: WIZnet drivers: fix possible NULL dereference 2012-04-13 13:34:12 -04:00
xilinx Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-04-15 13:19:04 -04:00
xircom Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
xscale net: remove ixp2000 ethernet driver 2012-04-04 18:09:37 -04:00
dnet.c dnet: Support the get_ts_info ethtool method. 2012-04-04 05:28:46 -04:00
dnet.h
ethoc.c
fealnx.c fealnx: Remove unused local label 'out' in netdev_open(). 2012-04-07 09:02:32 -04:00
jme.c
jme.h
Kconfig Ethernet driver for the WIZnet W5300 chip 2012-04-05 01:43:02 -04:00
korina.c Remove all #inclusions of asm/system.h 2012-03-28 18:30:03 +01:00
lantiq_etop.c
Makefile Ethernet driver for the WIZnet W5300 chip 2012-04-05 01:43:02 -04:00
mipsnet.c
netx-eth.c
s6gmac.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial 2012-05-22 19:22:50 -07:00