linux/drivers/net/ethernet/intel/ixgbe
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
..
ixgbe_82598.c ixgbe: Do not disable read relaxed ordering when DCA is enabled 2012-03-14 00:30:17 -07:00
ixgbe_82599.c ixgbe: Fix race condition where RX buffer could become corrupted. 2012-03-14 00:47:42 -07:00
ixgbe_common.c ixgbe: Fix race condition where RX buffer could become corrupted. 2012-03-14 00:47:42 -07:00
ixgbe_common.h ixgbe: Fix race condition where RX buffer could become corrupted. 2012-03-14 00:47:42 -07:00
ixgbe_dcb_82598.c ixgbe: update copyright to 2012 2012-02-03 03:05:30 -08:00
ixgbe_dcb_82598.h ixgbe: update copyright to 2012 2012-02-03 03:05:30 -08:00
ixgbe_dcb_82599.c ixgbe: update copyright to 2012 2012-02-03 03:05:30 -08:00
ixgbe_dcb_82599.h ixgbe: update copyright to 2012 2012-02-03 03:05:30 -08:00
ixgbe_dcb_nl.c net: dcb: getnumtcs()/setnumtcs() should return an int 2012-03-02 18:16:49 -08:00
ixgbe_dcb.c ixgbe: update copyright to 2012 2012-02-03 03:05:30 -08:00
ixgbe_dcb.h ixgbe: update copyright to 2012 2012-02-03 03:05:30 -08:00
ixgbe_ethtool.c ixgbe: Replace standard receive path with a page based receive 2012-03-17 01:04:27 -07:00
ixgbe_fcoe.c ixgbe: Add function for testing status bits in Rx descriptor 2012-02-10 15:51:33 -08:00
ixgbe_fcoe.h ixgbe: update copyright to 2012 2012-02-03 03:05:30 -08:00
ixgbe_main.c ixgbe: Replace standard receive path with a page based receive 2012-03-17 01:04:27 -07:00
ixgbe_mbx.c ixgbe: update copyright to 2012 2012-02-03 03:05:30 -08:00
ixgbe_mbx.h ixgbe: update copyright to 2012 2012-02-03 03:05:30 -08:00
ixgbe_phy.c Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net 2012-02-04 16:39:32 -05:00
ixgbe_phy.h ixgbe: update copyright to 2012 2012-02-03 03:05:30 -08:00
ixgbe_sriov.c drivers/net: Remove boolean comparisons to true/false 2012-02-13 00:47:40 -05:00
ixgbe_sriov.h ixgbe: update copyright to 2012 2012-02-03 03:05:30 -08:00
ixgbe_type.h ixgbe: Fix race condition where RX buffer could become corrupted. 2012-03-14 00:47:42 -07:00
ixgbe_x540.c ixgbe: Fix race condition where RX buffer could become corrupted. 2012-03-14 00:47:42 -07:00
ixgbe.h ixgbe: Replace standard receive path with a page based receive 2012-03-17 01:04:27 -07:00
Makefile ixgbe: update copyright to 2012 2012-02-03 03:05:30 -08:00