linux/drivers/net/ethernet
Alexander Duyck f800326dca ixgbe: Replace standard receive path with a page based receive
This patch replaces the existing Rx hot-path in the ixgbe driver with a new
implementation that is based on performing a double buffered receive.  The
ixgbe driver already had something similar in place for its' packet split
path, however in that case we were still receiving the header for the
packet into the sk_buff.  The big change here is the entire receive path
will receive into pages only, and then pull the header out of the page and
copy it into the sk_buff data.  There are several motivations behind this
approach.

First, this allows us to avoid several cache misses as we were taking a
set of cache misses for allocating the sk_buff and then another set for
receiving data into the sk_buff.  We are able to avoid these misses on
receive now as we allocate the sk_buff when data is available.

Second we are able to see a considerable performance gain when an IOMMU is
enabled because we are no longer unmapping every buffer on receive.
Instead we can delay the unmap until we are unable to use the page, and
instead we can simply call sync_single_range on the half of the page that
contains new data.

Finally we are able to drop a considerable amount of code from the driver
as we no longer have to support 2 different receive modes, packet split and
one buffer.  This allows us to optimize the Rx path further since less
branching is required.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Ross Brattain <ross.b.brattain@intel.com>
Tested-by: Stephen Ko <stephen.s.ko@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2012-03-17 01:04:27 -07:00
..
3com 3com/typhoon: reuse eth_mac_addr() 2012-02-22 14:46:37 -05:00
8390 netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-06 11:41:20 -05:00
adaptec netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-06 11:41:20 -05:00
adi adi: adapt to eth_hw_addr_random() and changes in arch/blackfin 2012-02-19 19:03:04 -05:00
aeroflex ethernet: unify return value of .ndo_set_mac_address if address is invalid 2012-02-23 17:03:20 -05:00
alteon drivers/net: Remove alloc_etherdev error messages 2012-01-31 16:20:48 -05:00
amd amd/hplance.c: print MAC via printk format specifier 2012-02-24 15:40:59 -05:00
apple netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-08 18:46:38 -05:00
atheros Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-03-09 14:34:20 -08:00
broadcom bnx2x: code doesn't use stats for allocating Rx BDs 2012-03-12 17:10:50 -07:00
brocade drivers/net: Remove boolean comparisons to true/false 2012-02-13 00:47:40 -05:00
cadence net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
calxeda net: use eth_hw_addr_random() and reset addr_assign_type 2012-02-15 15:34:17 -05:00
chelsio Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-03-09 14:34:20 -08:00
cirrus mac89x0: Fix build error. 2012-02-28 15:48:42 -05:00
cisco enic: Fix addr valid check in enic_set_vf_mac 2012-03-08 00:28:19 -08:00
davicom net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
dec dec/tulip/de4x5: print MAC via printk format specifier 2012-02-24 15:40:59 -05:00
dlink ethernet: unify return value of .ndo_set_mac_address if address is invalid 2012-02-23 17:03:20 -05:00
emulex be2net: Remove unused OFFSET_IN_PAGE() macro 2012-03-01 17:21:49 -05:00
faraday net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
freescale ucc_geth: separate out rx/tx ring alloc and free operations 2012-03-04 20:54:01 -05:00
fujitsu netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-06 11:52:27 -05:00
hp netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-06 11:52:27 -05:00
i825xx netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-06 11:52:27 -05:00
ibm net: powerpc: remove the legacy iSeries ethernet driver 2012-03-09 23:41:26 -05:00
icplus netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-06 11:52:27 -05:00
intel ixgbe: Replace standard receive path with a page based receive 2012-03-17 01:04:27 -07:00
marvell pxa168: remove unused stats member. 2012-03-16 21:54:44 -07:00
mellanox Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-03-09 14:34:20 -08:00
micrel Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-02-26 21:55:51 -05:00
microchip net: use eth_hw_addr_random() and reset addr_assign_type 2012-02-15 15:34:17 -05:00
myricom drivers/net: Remove alloc_etherdev error messages 2012-01-31 16:20:48 -05:00
natsemi net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
neterion ethernet: unify return value of .ndo_set_mac_address if address is invalid 2012-02-23 17:03:20 -05:00
nuvoton netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-08 18:46:38 -05:00
nvidia net: use eth_hw_addr_random() and reset addr_assign_type 2012-02-15 15:34:17 -05:00
nxp lpc32xx: Added ethernet driver 2012-03-12 17:08:34 -07:00
octeon octeon: fix PHY name to match MDIO bus name 2012-02-13 16:04:09 -05:00
oki-semi net/pch_gbe: supports eg20t ptp clock 2012-03-09 13:55:38 -08:00
packetengines Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-03-05 21:16:26 -05:00
pasemi ethernet: unify return value of .ndo_set_mac_address if address is invalid 2012-02-23 17:03:20 -05:00
qlogic netxen: qlogic ethernet : Fix endian bug. 2012-03-16 22:20:44 -07:00
racal netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-08 18:46:38 -05:00
rdc net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
realtek r8169: enable transmit time stamping. 2012-03-11 15:43:40 -07:00
renesas net: sh_eth: add support for VLAN tag filtering 2012-02-16 17:08:09 -05:00
seeq netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-08 18:46:38 -05:00
sfc sfc: Log the part number on probe 2012-03-06 18:14:16 +00:00
sgi net: meth: Add set_rx_mode hook to fix ICMPv6 neighbor discovery 2011-12-27 13:17:34 -05:00
silan
sis net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
smsc net: use eth_hw_addr_random() and reset addr_assign_type 2012-02-15 15:34:17 -05:00
stmicro stmmac: Add device-tree support 2012-03-16 22:48:53 -07:00
sun sun/sunqe: print MAC via printk format specifier 2012-02-24 15:40:59 -05:00
tehuti netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-08 18:46:38 -05:00
ti Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-02-26 21:55:51 -05:00
tile ethernet: unify return value of .ndo_set_mac_address if address is invalid 2012-02-23 17:03:20 -05:00
toshiba net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
tundra ethernet: unify return value of .ndo_set_mac_address if address is invalid 2012-02-23 17:03:20 -05:00
via net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
xilinx ll_temac: Fix build. 2012-02-20 00:46:06 -05:00
xircom netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-08 18:46:38 -05:00
xscale xscale/ixp2000/ixpdev: print MAC via printk format specifier 2012-02-24 15:41:00 -05:00
dnet.c net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
dnet.h
ethoc.c ethoc: set addr_assign_type if random_ether_addr() used 2012-02-17 15:58:06 -05:00
fealnx.c netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-06 11:48:09 -05:00
jme.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-02-26 21:55:51 -05:00
jme.h jme: Fix FIFO flush issue 2012-02-22 14:44:41 -05:00
Kconfig lpc32xx: Added ethernet driver 2012-03-12 17:08:34 -07:00
korina.c drivers/net: Remove alloc_etherdev error messages 2012-01-31 16:20:48 -05:00
lantiq_etop.c ethernet: Fix typo in lantiq_etop.c 2012-02-19 19:02:42 -05:00
Makefile lpc32xx: Added ethernet driver 2012-03-12 17:08:34 -07:00
mipsnet.c net: replace random_ether_addr() with eth_hw_addr_random() 2012-02-15 15:34:16 -05:00
netx-eth.c netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-08 18:46:38 -05:00
s6gmac.c netdev: ethernet dev_alloc_skb to netdev_alloc_skb 2012-02-08 18:46:38 -05:00