linux_dsm_epyc7002/drivers/net/ethernet
Claudiu Manoil ba7797119b gianfar: Fix and cleanup Rx FCB indication
This fixes a less obvious error on one hand, and prevents futher
similar errors by disambiguating and optimizing RxFCB indication,
on the other hand.

The error consists in NETIF_F_HW_VLAN_TX flag being used as an
indication of Rx FCB insertion. This happened as soon gfar_uses_fcb(),
which despite its name indicates Rx FCB insertion, started
incorporating is_vlan_on().
is_vlan_on(), on the other hand, is also a misleading construct because
we need to differentiate b/w hw VLAN extraction/VLEX (marked by VLAN_RX
flag) and hw VLAN insertion/VLINS (VLAN_TX flag), which are different
mechanisms using different types of FCBs.

The hw spec for the RxFCB feature is as follows:
In the case of RxBD rings, FCBs (Frame Control Block) are inserted by
the eTSEC whenever RCTRL[PRSDEP] is set to a non-zero value. Only one
FCB is inserted per frame (in the buffer pointed to by the RxBD with
bit F set). TOE acceleration for receive is enabled for all rx frames
in this case.

This patch introduces priv->uses_rxfcb field to quickly signal RxFCB
insertion in accordance with the specification above.

The dependency on FSL_GIANFAR_DEV_HAS_TIMER was also eliminated as
another source of confusion. The actual dependency is to priv->hwts_rx_en.
Upon changing priv->hwts_rx_en via IOCTL, the gfar device is being
restarted and on init_mac() the priv->hwts_rx_en flag determines RxFCB
insertion, and rctrl is programmed accordingly. The patch takes care
of this case too.

Though maybe not as self documenting as the inlining version uses_fcb(),
priv->uses_rxfcb has the main purpose to quickly signal, on the hot path,
that the incoming frame has a *Rx* FCB block inserted which needs to be
pulled out before passing the skb to the stack. This is a performance
critical operation, it needs to happen fast, that's why uses_rxfcb is
placed in the first cacheline of gfar_private.
This is also why a cached rctrl cannot be used instead: 1) because
we don't have 32 bits available in the first cacheline of gfar_priv
(but only 16); 2) bit operations are expensive on the hot path.

Signed-off-by: Claudiu Manoil <claudiu.manoil@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2013-02-14 13:32:25 -05:00
..
3com Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-01-29 15:32:13 -05:00
8390 drivers/net: delete the really obsolete 8390 based 10Mbit ISA drivers 2013-01-22 10:39:54 -05:00
adaptec drivers/net: fix up function prototypes after __dev* removals 2012-12-07 14:22:22 -05:00
adi Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-01-15 15:05:59 -05:00
aeroflex net: phy: remove flags argument from phy_{attach, connect, connect_direct} 2013-01-14 15:11:50 -05:00
alteon drivers/net: fix up function prototypes after __dev* removals 2012-12-07 14:22:22 -05:00
amd drivers: net: Remove remaining alloc/OOM messages 2013-02-08 17:44:39 -05:00
apple net/apple: remove __dev* attributes 2012-12-03 11:16:54 -08:00
atheros ethernet: Remove unnecessary alloc/OOM messages, alloc cleanups 2013-02-04 13:22:33 -05:00
broadcom bgmac: add read of interrupt mask after disabling interrupts 2013-02-14 13:23:24 -05:00
brocade bna: Driver Version Updated to 3.1.2.1 2012-12-11 18:25:53 -05:00
cadence net: phy: remove flags argument from phy_{attach, connect, connect_direct} 2013-01-14 15:11:50 -05:00
calxeda Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-01-29 15:32:13 -05:00
chelsio cxgb4vf: Fix VLAN extraction counter increment 2013-02-12 16:15:10 -05:00
cirrus ethtool: fix drvinfo strings set in drivers 2013-01-06 21:06:31 -08:00
cisco enic: change sprintf() to snprintf() 2013-01-18 14:34:48 -05:00
davicom ethtool: fix drvinfo strings set in drivers 2013-01-06 21:06:31 -08:00
dec drivers/net: delete Digital EtherWorks-3 support. 2013-01-22 10:39:55 -05:00
dlink drivers/net: delete old parallel port de600/de620 drivers 2013-01-22 10:39:49 -05:00
emulex be2net: remove BUG_ON() in be_mcc_compl_is_new() 2013-02-13 13:52:55 -05:00
faraday net: phy: remove flags argument from phy_{attach, connect, connect_direct} 2013-01-14 15:11:50 -05:00
freescale gianfar: Fix and cleanup Rx FCB indication 2013-02-14 13:32:25 -05:00
fujitsu drivers/net: delete old fujitsu based eth16i driver 2013-01-22 10:39:54 -05:00
hp drivers/net: fix up function prototypes after __dev* removals 2012-12-07 14:22:22 -05:00
i825xx drivers/net: delete Racal Interlan ISA ni52 (i825xx) driver 2013-01-22 10:39:52 -05:00
ibm ethernet: Remove unnecessary alloc/OOM messages, alloc cleanups 2013-02-04 13:22:33 -05:00
icplus drivers/net: fix up function prototypes after __dev* removals 2012-12-07 14:22:22 -05:00
intel bridge: Add vlan support to static neighbors 2013-02-13 19:42:16 -05:00
marvell ethernet: Remove unnecessary alloc/OOM messages, alloc cleanups 2013-02-04 13:22:33 -05:00
mellanox bridge: Add vlan support to static neighbors 2013-02-13 19:42:16 -05:00
micrel net: ks8851: convert to threaded IRQ 2013-01-29 13:32:00 -05:00
microchip net: remove unnecessary NET_ADDR_RANDOM "bitclean" 2013-01-03 22:37:36 -08:00
myricom ethernet: Remove unnecessary alloc/OOM messages, alloc cleanups 2013-02-04 13:22:33 -05:00
natsemi drivers/net: delete orphaned MCA ibmlana driver content 2013-01-14 21:26:06 -05:00
neterion remove init of dev->perm_addr in drivers 2013-01-08 18:00:48 -08:00
nuvoton ethtool: fix drvinfo strings set in drivers 2013-01-06 21:06:31 -08:00
nvidia Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-01-15 15:05:59 -05:00
nxp net: phy: remove flags argument from phy_{attach, connect, connect_direct} 2013-01-14 15:11:50 -05:00
octeon ethtool: fix drvinfo strings set in drivers 2013-01-06 21:06:31 -08:00
oki-semi pch_gbe, ptp_pch: Fix the dependency direction between these drivers 2012-11-17 22:11:45 -05:00
packetengines ethtool: fix drvinfo strings set in drivers 2013-01-06 21:06:31 -08:00
pasemi net/pasemi: remove __dev* attributes 2012-12-03 11:16:55 -08:00
qlogic bridge: Add vlan support to static neighbors 2013-02-13 19:42:16 -05:00
rdc ethernet: Remove unnecessary alloc/OOM messages, alloc cleanups 2013-02-04 13:22:33 -05:00
realtek Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-02-12 18:58:28 -05:00
renesas ethernet: Remove unnecessary alloc/OOM messages, alloc cleanups 2013-02-04 13:22:33 -05:00
seeq drivers/net: delete old x86 variant of the seeq8005 driver 2013-01-22 10:39:56 -05:00
sfc drivers/net/ethernet/sfc/ptp.c: adjust duplicate test 2013-01-21 15:44:58 -05:00
sgi ethtool: fix drvinfo strings set in drivers 2013-01-06 21:06:31 -08:00
silan remove init of dev->perm_addr in drivers 2013-01-08 18:00:48 -08:00
sis remove init of dev->perm_addr in drivers 2013-01-08 18:00:48 -08:00
smsc drivers: net: Remove remaining alloc/OOM messages 2013-02-08 17:44:39 -05:00
stmicro Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-02-12 18:58:28 -05:00
sun ethernet: Remove unnecessary alloc/OOM messages, alloc cleanups 2013-02-04 13:22:33 -05:00
tehuti ethtool: fix drvinfo strings set in drivers 2013-01-06 21:06:31 -08:00
ti net: ethernet: ti: remove redundant NULL check. 2013-02-13 13:41:44 -05:00
tile net: remove unnecessary NET_ADDR_RANDOM "bitclean" 2013-01-03 22:37:36 -08:00
toshiba net: phy: remove flags argument from phy_{attach, connect, connect_direct} 2013-01-14 15:11:50 -05:00
tundra drivers/net/ethernet/tundra/tsi108_eth.c: delete double assignment 2012-08-30 13:08:37 -04:00
via Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2013-02-05 14:12:20 -05:00
wiznet net: remove unnecessary NET_ADDR_RANDOM "bitclean" 2013-01-03 22:37:36 -08:00
xilinx ethernet: Remove unnecessary alloc/OOM messages, alloc cleanups 2013-02-04 13:22:33 -05:00
xircom ethtool: fix drvinfo strings set in drivers 2013-01-06 21:06:31 -08:00
xscale net: phy: remove flags argument from phy_{attach, connect, connect_direct} 2013-01-14 15:11:50 -05:00
dnet.c net: phy: remove flags argument from phy_{attach, connect, connect_direct} 2013-01-14 15:11:50 -05:00
dnet.h
ethoc.c ethoc: Cleanup driver format 2013-01-29 14:07:05 -05:00
fealnx.c drivers/net: fix up function prototypes after __dev* removals 2012-12-07 14:22:22 -05:00
jme.c jme: remove __dev* attributes 2012-12-03 11:16:54 -08:00
jme.h
Kconfig drivers/net: delete old 8 bit ISA Racal ni5010 support. 2013-01-22 10:39:52 -05:00
korina.c ethtool: fix drvinfo strings set in drivers 2013-01-06 21:06:31 -08:00
lantiq_etop.c net: phy: remove flags argument from phy_{attach, connect, connect_direct} 2013-01-14 15:11:50 -05:00
Makefile drivers/net: delete old 8 bit ISA Racal ni5010 support. 2013-01-22 10:39:52 -05:00
netx-eth.c ARM: netx: move platform_data definitions 2012-09-14 11:17:36 +02:00
s6gmac.c net: phy: remove flags argument from phy_{attach, connect, connect_direct} 2013-01-14 15:11:50 -05:00