netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [net-next 0/9][pull request] Intel Wired LAN Driver Updates
@ 2011-10-06 11:02 Jeff Kirsher
  2011-10-06 18:33 ` David Miller
  0 siblings, 1 reply; 33+ messages in thread
From: Jeff Kirsher @ 2011-10-06 11:02 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

The following series contains updates to e1000e, igb and ixgbe.  Here
is a quick summary:
  - e1000e: fixes for 2 WoL issues
  - igb: fix for I2C, and 2 Alt. MAC address updates
  - ixgbe: fix dependencies for 8 traffic classes, add X540 traffic
    class support and a fix for PFC mask generation

The following are changes since commit f0cd7bdc042310b6b104f133bbfd520a72b3c08a:
  bnx2x: remove some dead code
and are available in the git repository at
  git://github.com/Jkirsher/net-next.git

Akeem G. Abodunrin (3):
  igb: Code to prevent overwriting SFP I2C
  igb: Alternate MAC Address EEPROM Updates
  igb: Alternate MAC Address Updates for Func2&3

Bruce Allan (2):
  e1000e: WoL can fail on 82578DM
  e1000e: WoL fails on device ID 0x1501

John Fastabend (3):
  ixgbe: fixup hard dependencies on supporting 8 traffic classes
  ixgbe: DCB X540 devices support max traffic class of 4
  ixgbe: X540 devices RX PFC frames pause traffic even if disabled

Mark Rustad (1):
  ixgbe: Fix PFC mask generation

 drivers/net/ethernet/intel/e1000e/ich8lan.c        |   25 +++++---
 drivers/net/ethernet/intel/igb/e1000_mac.c         |    9 ++-
 drivers/net/ethernet/intel/igb/e1000_phy.c         |    6 ++
 drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.c       |   22 ++++++--
 drivers/net/ethernet/intel/ixgbe/ixgbe_dcb.h       |    3 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.c |   46 ++++++++++++---
 drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_82599.h |    2 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_dcb_nl.c    |   60 +++++++++++++++-----
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c      |   29 ++++++++--
 drivers/net/ethernet/intel/ixgbe/ixgbe_type.h      |    3 +-
 10 files changed, 158 insertions(+), 47 deletions(-)

-- 
1.7.6.4

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [net-next 0/9][pull request] Intel Wired LAN Driver Updates
  2011-10-06 11:02 Jeff Kirsher
@ 2011-10-06 18:33 ` David Miller
  0 siblings, 0 replies; 33+ messages in thread
From: David Miller @ 2011-10-06 18:33 UTC (permalink / raw)
  To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann

From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Thu,  6 Oct 2011 04:02:30 -0700

> The following series contains updates to e1000e, igb and ixgbe.  Here
> is a quick summary:
>   - e1000e: fixes for 2 WoL issues
>   - igb: fix for I2C, and 2 Alt. MAC address updates
>   - ixgbe: fix dependencies for 8 traffic classes, add X540 traffic
>     class support and a fix for PFC mask generation
> 
> The following are changes since commit f0cd7bdc042310b6b104f133bbfd520a72b3c08a:
>   bnx2x: remove some dead code
> and are available in the git repository at
>   git://github.com/Jkirsher/net-next.git

Pulled, thanks Jeff.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [net-next 0/9][pull request] Intel Wired LAN Driver Updates
@ 2011-12-23  9:09 Jeff Kirsher
  0 siblings, 0 replies; 33+ messages in thread
From: Jeff Kirsher @ 2011-12-23  9:09 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

The following series contains updates to igb, ixgbe and ixgbevf.  Most of
the changes are adding support of some kind.  There are 3 fixes, one fix
for ixgbevf to fix register defines.  The other two fixes are for ixgbe,
one being a minor comment spelling fix and the other is to fix register
reads.

Here is a list of the new support added:
 - 2 new device id's in ixgbe
 - igb flow control advertising to ethtool
 - ixgbe thermal data sensor

The following are changes since commit 2c64580046a122fa15bb586d8ca4fd5e4b69a1e7:
  netlink: wake up netlink listeners sooner (v2)
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Alexander Duyck (1):
  ixgbevf: Fix register defines to correctly handle complex expressions

Carolyn Wyborny (1):
  igb: Add flow control advertising to ethtool setting.

Don Skidmore (3):
  ixgbe: add support functions for gathering thermal data sensor
  ixgbe: add interface to export thermal data
  ixgbe: add support for new 82599 device.

Emil Tantilov (3):
  ixgbe: fix incorrect PHY register reads
  ixgbe: add write flush in ixgbe_clock_out_i2c_byte()
  ixgbe: add support for new 82599 device id

Stephen Hemminger (1):
  ixgbe: fix typo's

 drivers/net/ethernet/intel/igb/igb_ethtool.c     |    6 +-
 drivers/net/ethernet/intel/ixgbe/Makefile        |    2 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe.h         |    4 +
 drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c   |    3 +
 drivers/net/ethernet/intel/ixgbe/ixgbe_common.c  |  158 +++++++++++-
 drivers/net/ethernet/intel/ixgbe/ixgbe_common.h  |   13 +
 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c |   15 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c    |   32 ++-
 drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c     |    1 +
 drivers/net/ethernet/intel/ixgbe/ixgbe_sysfs.c   |  305 ++++++++++++++++++++++
 drivers/net/ethernet/intel/ixgbe/ixgbe_type.h    |   40 +++
 drivers/net/ethernet/intel/ixgbevf/mbx.h         |    4 +-
 drivers/net/ethernet/intel/ixgbevf/regs.h        |   42 ++--
 13 files changed, 583 insertions(+), 42 deletions(-)
 create mode 100644 drivers/net/ethernet/intel/ixgbe/ixgbe_sysfs.c

-- 
1.7.7.4

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [net-next 0/9][pull request] Intel Wired LAN Driver Updates
@ 2012-06-09  8:20 Jeff Kirsher
  0 siblings, 0 replies; 33+ messages in thread
From: Jeff Kirsher @ 2012-06-09  8:20 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

This series contains updates to igb and ixgbe.

The following are changes since commit fbfe95a42e90b3dd079cc9019ba7d7700feee0f6:
  inet: Create and use rt{,6}_get_peer_create().
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Carolyn Wyborny (4):
  igb: Add support functions to access thermal data.
  igb: Add hwmon interface to export thermal data.
  igb: Update firmware info output
  igb: Version bump

Emil Tantilov (1):
  ixgbe: do not compile ixgbe_sysfs.c when CONFIG_IXGBE_HWMON is not
    set

Jacob Keller (3):
  ixgbe: ptp code cleanup
  ixgbe: PTP Fix hwtstamp mode settings
  ixgbe: Check PTP Rx timestamps via BPF filter

John Fastabend (1):
  ixgbe: align flow control DV macros with datasheet

 drivers/net/ethernet/intel/Kconfig             |   10 +
 drivers/net/ethernet/intel/igb/Makefile        |    2 +-
 drivers/net/ethernet/intel/igb/e1000_82575.c   |  659 +++++++++++++++++++++++-
 drivers/net/ethernet/intel/igb/e1000_82575.h   |   31 ++
 drivers/net/ethernet/intel/igb/e1000_defines.h |   15 +-
 drivers/net/ethernet/intel/igb/e1000_hw.h      |   21 +-
 drivers/net/ethernet/intel/igb/e1000_regs.h    |   15 +
 drivers/net/ethernet/intel/igb/igb.h           |   44 ++
 drivers/net/ethernet/intel/igb/igb_ethtool.c   |   16 +-
 drivers/net/ethernet/intel/igb/igb_main.c      |   97 +++-
 drivers/net/ethernet/intel/igb/igb_sysfs.c     |  245 +++++++++
 drivers/net/ethernet/intel/ixgbe/Makefile      |    4 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe.h       |    2 +
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c  |   11 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c   |  149 ++++--
 drivers/net/ethernet/intel/ixgbe/ixgbe_sysfs.c |    2 -
 drivers/net/ethernet/intel/ixgbe/ixgbe_type.h  |   37 +-
 17 files changed, 1284 insertions(+), 76 deletions(-)
 create mode 100644 drivers/net/ethernet/intel/igb/igb_sysfs.c

-- 
1.7.10.2

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [net-next 0/9][pull request] Intel Wired LAN Driver Updates
@ 2012-06-20  8:44 Jeff Kirsher
  2012-06-20 22:26 ` David Miller
  0 siblings, 1 reply; 33+ messages in thread
From: Jeff Kirsher @ 2012-06-20  8:44 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

This series contains updates to e1000, igb and ixgbe

The following are changes since commit 41063e9dd11956f2d285e12e4342e1d232ba0ea2:
  ipv4: Early TCP socket demux.
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Carolyn Wyborny (4):
  igb: Add switch case for supported hardware to igb_ptp_remove.
  igb: Support the get_ts_info ethtool method.
  igb: Update firmware info output
  igb: Version bump

Jacob Keller (2):
  ixgbe: add support for 1G SX modules
  ixgbe: clean up ixgbe_get_settings ethtool function

Lior Levy (1):
  igb: A fix to VF TX rate limit

Matthew Vick (1):
  igb: Streamline RSS queue and queue pairing assignment logic.

Tushar Dave (1):
  e1000: Combining Bitwise OR in one expression.

 drivers/net/ethernet/intel/e1000/e1000_main.c    |   12 +-
 drivers/net/ethernet/intel/igb/e1000_regs.h      |    1 +
 drivers/net/ethernet/intel/igb/igb.h             |   25 +++-
 drivers/net/ethernet/intel/igb/igb_ethtool.c     |   52 ++++++--
 drivers/net/ethernet/intel/igb/igb_main.c        |  156 +++++++++++++++++-----
 drivers/net/ethernet/intel/igb/igb_ptp.c         |   12 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c   |    4 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c |  147 +++++++++-----------
 drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c     |   23 +++-
 drivers/net/ethernet/intel/ixgbe/ixgbe_type.h    |    2 +
 10 files changed, 291 insertions(+), 143 deletions(-)

-- 
1.7.10.2

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [net-next 0/9][pull request] Intel Wired LAN Driver Updates
  2012-06-20  8:44 Jeff Kirsher
@ 2012-06-20 22:26 ` David Miller
  0 siblings, 0 replies; 33+ messages in thread
From: David Miller @ 2012-06-20 22:26 UTC (permalink / raw)
  To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann

From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Wed, 20 Jun 2012 01:44:54 -0700

> This series contains updates to e1000, igb and ixgbe
> 
> The following are changes since commit 41063e9dd11956f2d285e12e4342e1d232ba0ea2:
>   ipv4: Early TCP socket demux.
> and are available in the git repository at:
>   git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Pulled, thanks Jeff.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [net-next 0/9][pull request] Intel Wired LAN Driver Updates
@ 2012-07-18 20:31 Jeff Kirsher
  2012-07-19 15:26 ` David Miller
  0 siblings, 1 reply; 33+ messages in thread
From: Jeff Kirsher @ 2012-07-18 20:31 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

This series contains updates to ixgbevf & ixgbe.

The following are changes since commit ddbe503203855939946430e39bae58de11b70b69:
  ipv6: add ipv6_addr_hash() helper
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Alexander Duyck (8):
  ixgbevf: Do not rewind the Rx ring before bumping tail
  ixgbevf: Add netdev to ring structure
  ixgbevf: Consolidate Tx context descriptor creation code
  ixgbevf: Fix multiple issues in ixgbevf_get/set_ringparam
  ixgbe: Update configure virtualization to allow for multiple PF pools
  ixgbe: Add support for SR-IOV w/ DCB or RSS
  ixgbe: Retire RSS enabled and capable flags
  ixgbe: Cleanup holes in flags after removing several of them

Pascal Bouchareine (1):
  ixgbevf: fix VF untagging when 802.1 prio is set

 drivers/net/ethernet/intel/ixgbe/ixgbe.h          |   56 +--
 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c  |    4 -
 drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c      |  387 ++++++++++++++++++--
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c     |   90 +++--
 drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c    |   52 ++-
 drivers/net/ethernet/intel/ixgbevf/defines.h      |    1 +
 drivers/net/ethernet/intel/ixgbevf/ethtool.c      |  159 ++++----
 drivers/net/ethernet/intel/ixgbevf/ixgbevf.h      |    2 +
 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c |  405 ++++++++++-----------
 9 files changed, 745 insertions(+), 411 deletions(-)

-- 
1.7.10.4

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [net-next 0/9][pull request] Intel Wired LAN Driver Updates
  2012-07-18 20:31 Jeff Kirsher
@ 2012-07-19 15:26 ` David Miller
  0 siblings, 0 replies; 33+ messages in thread
From: David Miller @ 2012-07-19 15:26 UTC (permalink / raw)
  To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann

From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Wed, 18 Jul 2012 13:31:47 -0700

> This series contains updates to ixgbevf & ixgbe.
> 
> The following are changes since commit ddbe503203855939946430e39bae58de11b70b69:
>   ipv6: add ipv6_addr_hash() helper
> and are available in the git repository at:
>   git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master
> 
> Alexander Duyck (8):
>   ixgbevf: Do not rewind the Rx ring before bumping tail
>   ixgbevf: Add netdev to ring structure
>   ixgbevf: Consolidate Tx context descriptor creation code
>   ixgbevf: Fix multiple issues in ixgbevf_get/set_ringparam
>   ixgbe: Update configure virtualization to allow for multiple PF pools
>   ixgbe: Add support for SR-IOV w/ DCB or RSS
>   ixgbe: Retire RSS enabled and capable flags
>   ixgbe: Cleanup holes in flags after removing several of them
> 
> Pascal Bouchareine (1):
>   ixgbevf: fix VF untagging when 802.1 prio is set

Pulled, thanks Jeff.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [net-next 0/9][pull request] Intel Wired LAN Driver Updates
@ 2012-07-20  1:23 Jeff Kirsher
  2012-07-20 18:13 ` David Miller
  0 siblings, 1 reply; 33+ messages in thread
From: Jeff Kirsher @ 2012-07-20  1:23 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

This series contains updates to ixgbe.

The following are changes since commit 769162e38b91e1d300752e666260fa6c7b203fbc:
  Merge branch 'net' of git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Alexander Duyck (9):
  ixgbe: Use VMDq offset to indicate the default pool
  ixgbe: Fix memory leak when SR-IOV VFs are direct assigned
  ixgbe: Drop references to deprecated pci_ DMA api and instead use
    dma_ API
  ixgbe: Cleanup configuration of FCoE registers
  ixgbe: Merge all FCoE percpu values into a single structure
  ixgbe: Make FCoE allocation and configuration closer to how rings
    work
  ixgbe: Correctly set SAN MAC RAR pool to default pool of PF
  ixgbe: Only enable anti-spoof on VF pools
  ixgbe: Enable FCoE FSO and CRC offloads based on CAPABLE instead of
    ENABLED flag

 drivers/net/ethernet/intel/ixgbe/ixgbe.h        |    5 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_82599.c  |    4 +
 drivers/net/ethernet/intel/ixgbe/ixgbe_common.c |   45 ++-
 drivers/net/ethernet/intel/ixgbe/ixgbe_common.h |    1 +
 drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.c   |  378 ++++++++++++-----------
 drivers/net/ethernet/intel/ixgbe/ixgbe_fcoe.h   |   15 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c   |  117 +++----
 drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c  |   20 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_type.h   |    3 +
 drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c   |    4 +
 10 files changed, 344 insertions(+), 248 deletions(-)

-- 
1.7.10.4

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [net-next 0/9][pull request] Intel Wired LAN Driver Updates
  2012-07-20  1:23 Jeff Kirsher
@ 2012-07-20 18:13 ` David Miller
  0 siblings, 0 replies; 33+ messages in thread
From: David Miller @ 2012-07-20 18:13 UTC (permalink / raw)
  To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann

From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Thu, 19 Jul 2012 18:23:57 -0700

> This series contains updates to ixgbe.
> 
> The following are changes since commit 769162e38b91e1d300752e666260fa6c7b203fbc:
>   Merge branch 'net' of git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile
> and are available in the git repository at:
>   git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Pulled, thanks Jeff.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [net-next 0/9][pull request] Intel Wired LAN Driver Updates
@ 2012-08-16 22:48 Peter P Waskiewicz Jr
  2012-08-16 22:48 ` [net-next 1/9] ixgbe: Remove code that was initializing Rx page offset Peter P Waskiewicz Jr
                   ` (9 more replies)
  0 siblings, 10 replies; 33+ messages in thread
From: Peter P Waskiewicz Jr @ 2012-08-16 22:48 UTC (permalink / raw)
  To: davem; +Cc: Peter P Waskiewicz Jr, netdev, gospo, sassmann

This series contains multiple updates to the ixgbe driver.

The following are changes since commit 02644a17457414f38e29f32d5c640b06d08fa092:
    sctp: fix bogus if statement in sctp_auth_recv_cid()
  
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/ppwaskie/net-next master

Alexander Duyck (9):
  ixgbe: Remove code that was initializing Rx page offset
  ixgbe: combine ixgbe_add_rx_frag and ixgbe_can_reuse_page
  ixgbe: Only use double buffering if page size is less than 8K
  ixgbe: Have the CPU take ownership of the buffers sooner
  ixgbe: Make pull tail function separate from rest of cleanup_headers
  ixgbe: Copybreak sooner to avoid get_page/put_page and offset change
    overhead
  ixgbe: Make allocating skb and placing data in it a separate function
  ixgbe: Roll RSC code into non-EOP code
  ixgbe: Rewrite code related to configuring IFCS bit in Tx descriptor

 drivers/net/ethernet/intel/ixgbe/ixgbe.h      |  25 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 497 ++++++++++++++------------
 2 files changed, 284 insertions(+), 238 deletions(-)

-- 
1.7.11.2

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [net-next 1/9] ixgbe: Remove code that was initializing Rx page offset
  2012-08-16 22:48 [net-next 0/9][pull request] Intel Wired LAN Driver Updates Peter P Waskiewicz Jr
@ 2012-08-16 22:48 ` Peter P Waskiewicz Jr
  2012-08-16 22:48 ` [net-next 2/9] ixgbe: combine ixgbe_add_rx_frag and ixgbe_can_reuse_page Peter P Waskiewicz Jr
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 33+ messages in thread
From: Peter P Waskiewicz Jr @ 2012-08-16 22:48 UTC (permalink / raw)
  To: davem; +Cc: Alexander Duyck, netdev, gospo, sassmann, Peter P Waskiewicz Jr

From: Alexander Duyck <alexander.h.duyck@intel.com>

This change reverts an earlier patch that introduced
ixgbe_init_rx_page_offset. The idea behind the function was to provide
some variation in the starting offset for the page in order to reduce
hot-spots in the cache. However it doesn't appear to provide any
significant benefit in the testing I have done. It has however been a
source of several bugs, and it blocks us from being able to use 2K
fragments on larger page sizes. So the decision I made was to remove it.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 27 +--------------------------
 1 file changed, 1 insertion(+), 26 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 4326f74..f7351c6 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -1167,7 +1167,7 @@ static bool ixgbe_alloc_mapped_page(struct ixgbe_ring *rx_ring,
 	}
 
 	bi->dma = dma;
-	bi->page_offset ^= ixgbe_rx_bufsz(rx_ring);
+	bi->page_offset = 0;
 
 	return true;
 }
@@ -4130,27 +4130,6 @@ void ixgbe_reset(struct ixgbe_adapter *adapter)
 }
 
 /**
- * ixgbe_init_rx_page_offset - initialize page offset values for Rx buffers
- * @rx_ring: ring to setup
- *
- * On many IA platforms the L1 cache has a critical stride of 4K, this
- * results in each receive buffer starting in the same cache set.  To help
- * reduce the pressure on this cache set we can interleave the offsets so
- * that only every other buffer will be in the same cache set.
- **/
-static void ixgbe_init_rx_page_offset(struct ixgbe_ring *rx_ring)
-{
-	struct ixgbe_rx_buffer *rx_buffer = rx_ring->rx_buffer_info;
-	u16 i;
-
-	for (i = 0; i < rx_ring->count; i += 2) {
-		rx_buffer[0].page_offset = 0;
-		rx_buffer[1].page_offset = ixgbe_rx_bufsz(rx_ring);
-		rx_buffer = &rx_buffer[2];
-	}
-}
-
-/**
  * ixgbe_clean_rx_ring - Free Rx Buffers per Queue
  * @rx_ring: ring to free buffers from
  **/
@@ -4195,8 +4174,6 @@ static void ixgbe_clean_rx_ring(struct ixgbe_ring *rx_ring)
 	size = sizeof(struct ixgbe_rx_buffer) * rx_ring->count;
 	memset(rx_ring->rx_buffer_info, 0, size);
 
-	ixgbe_init_rx_page_offset(rx_ring);
-
 	/* Zero out the descriptor ring */
 	memset(rx_ring->desc, 0, rx_ring->size);
 
@@ -4646,8 +4623,6 @@ int ixgbe_setup_rx_resources(struct ixgbe_ring *rx_ring)
 	rx_ring->next_to_clean = 0;
 	rx_ring->next_to_use = 0;
 
-	ixgbe_init_rx_page_offset(rx_ring);
-
 	return 0;
 err:
 	vfree(rx_ring->rx_buffer_info);
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [net-next 2/9] ixgbe: combine ixgbe_add_rx_frag and ixgbe_can_reuse_page
  2012-08-16 22:48 [net-next 0/9][pull request] Intel Wired LAN Driver Updates Peter P Waskiewicz Jr
  2012-08-16 22:48 ` [net-next 1/9] ixgbe: Remove code that was initializing Rx page offset Peter P Waskiewicz Jr
@ 2012-08-16 22:48 ` Peter P Waskiewicz Jr
  2012-08-16 22:48 ` [net-next 3/9] ixgbe: Only use double buffering if page size is less than 8K Peter P Waskiewicz Jr
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 33+ messages in thread
From: Peter P Waskiewicz Jr @ 2012-08-16 22:48 UTC (permalink / raw)
  To: davem; +Cc: Alexander Duyck, netdev, gospo, sassmann, Peter P Waskiewicz Jr

From: Alexander Duyck <alexander.h.duyck@intel.com>

This patch combines ixgbe_add_rx_frag and ixgbe_can_reuse_page into a
single function. The main motivation behind this is to make better use of
the values so that we don't have to load them from memory and into
registers twice.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 73 +++++++++++++--------------
 1 file changed, 34 insertions(+), 39 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index f7351c6..6a8c484 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -1560,33 +1560,17 @@ static bool ixgbe_cleanup_headers(struct ixgbe_ring *rx_ring,
 }
 
 /**
- * ixgbe_can_reuse_page - determine if we can reuse a page
- * @rx_buffer: pointer to rx_buffer containing the page we want to reuse
- *
- * Returns true if page can be reused in another Rx buffer
- **/
-static inline bool ixgbe_can_reuse_page(struct ixgbe_rx_buffer *rx_buffer)
-{
-	struct page *page = rx_buffer->page;
-
-	/* if we are only owner of page and it is local we can reuse it */
-	return likely(page_count(page) == 1) &&
-	       likely(page_to_nid(page) == numa_node_id());
-}
-
-/**
  * ixgbe_reuse_rx_page - page flip buffer and store it back on the ring
  * @rx_ring: rx descriptor ring to store buffers on
  * @old_buff: donor buffer to have page reused
  *
- * Syncronizes page for reuse by the adapter
+ * Synchronizes page for reuse by the adapter
  **/
 static void ixgbe_reuse_rx_page(struct ixgbe_ring *rx_ring,
 				struct ixgbe_rx_buffer *old_buff)
 {
 	struct ixgbe_rx_buffer *new_buff;
 	u16 nta = rx_ring->next_to_alloc;
-	u16 bufsz = ixgbe_rx_bufsz(rx_ring);
 
 	new_buff = &rx_ring->rx_buffer_info[nta];
 
@@ -1597,17 +1581,13 @@ static void ixgbe_reuse_rx_page(struct ixgbe_ring *rx_ring,
 	/* transfer page from old buffer to new buffer */
 	new_buff->page = old_buff->page;
 	new_buff->dma = old_buff->dma;
-
-	/* flip page offset to other buffer and store to new_buff */
-	new_buff->page_offset = old_buff->page_offset ^ bufsz;
+	new_buff->page_offset = old_buff->page_offset;
 
 	/* sync the buffer for use by the device */
 	dma_sync_single_range_for_device(rx_ring->dev, new_buff->dma,
-					 new_buff->page_offset, bufsz,
+					 new_buff->page_offset,
+					 ixgbe_rx_bufsz(rx_ring),
 					 DMA_FROM_DEVICE);
-
-	/* bump ref count on page before it is given to the stack */
-	get_page(new_buff->page);
 }
 
 /**
@@ -1617,20 +1597,38 @@ static void ixgbe_reuse_rx_page(struct ixgbe_ring *rx_ring,
  * @rx_desc: descriptor containing length of buffer written by hardware
  * @skb: sk_buff to place the data into
  *
- * This function is based on skb_add_rx_frag.  I would have used that
- * function however it doesn't handle the truesize case correctly since we
- * are allocating more memory than might be used for a single receive.
+ * This function will add the data contained in rx_buffer->page to the skb.
+ * This is done either through a direct copy if the data in the buffer is
+ * less than the skb header size, otherwise it will just attach the page as
+ * a frag to the skb.
+ *
+ * The function will then update the page offset if necessary and return
+ * true if the buffer can be reused by the adapter.
  **/
-static void ixgbe_add_rx_frag(struct ixgbe_ring *rx_ring,
+static bool ixgbe_add_rx_frag(struct ixgbe_ring *rx_ring,
 			      struct ixgbe_rx_buffer *rx_buffer,
-			      struct sk_buff *skb, int size)
+			      union ixgbe_adv_rx_desc *rx_desc,
+			      struct sk_buff *skb)
 {
-	skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags,
-			   rx_buffer->page, rx_buffer->page_offset,
-			   size);
-	skb->len += size;
-	skb->data_len += size;
-	skb->truesize += ixgbe_rx_bufsz(rx_ring);
+	struct page *page = rx_buffer->page;
+	unsigned int size = le16_to_cpu(rx_desc->wb.upper.length);
+	unsigned int truesize = ixgbe_rx_bufsz(rx_ring);
+
+	skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, page,
+			rx_buffer->page_offset, size, truesize);
+
+	/* if we are only owner of page and it is local we can reuse it */
+	if (unlikely(page_count(page) != 1) ||
+	    unlikely(page_to_nid(page) != numa_node_id()))
+		return false;
+
+	/* flip page offset to other buffer */
+	rx_buffer->page_offset ^= truesize;
+
+	/* bump ref count on page before it is given to the stack */
+	get_page(page);
+
+	return true;
 }
 
 /**
@@ -1731,10 +1729,7 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
 		}
 
 		/* pull page into skb */
-		ixgbe_add_rx_frag(rx_ring, rx_buffer, skb,
-				  le16_to_cpu(rx_desc->wb.upper.length));
-
-		if (ixgbe_can_reuse_page(rx_buffer)) {
+		if (ixgbe_add_rx_frag(rx_ring, rx_buffer, rx_desc, skb)) {
 			/* hand second half of page back to the ring */
 			ixgbe_reuse_rx_page(rx_ring, rx_buffer);
 		} else if (IXGBE_CB(skb)->dma == rx_buffer->dma) {
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [net-next 3/9] ixgbe: Only use double buffering if page size is less than 8K
  2012-08-16 22:48 [net-next 0/9][pull request] Intel Wired LAN Driver Updates Peter P Waskiewicz Jr
  2012-08-16 22:48 ` [net-next 1/9] ixgbe: Remove code that was initializing Rx page offset Peter P Waskiewicz Jr
  2012-08-16 22:48 ` [net-next 2/9] ixgbe: combine ixgbe_add_rx_frag and ixgbe_can_reuse_page Peter P Waskiewicz Jr
@ 2012-08-16 22:48 ` Peter P Waskiewicz Jr
  2012-08-16 22:48 ` [net-next 4/9] ixgbe: Have the CPU take ownership of the buffers sooner Peter P Waskiewicz Jr
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 33+ messages in thread
From: Peter P Waskiewicz Jr @ 2012-08-16 22:48 UTC (permalink / raw)
  To: davem; +Cc: Alexander Duyck, netdev, gospo, sassmann, Peter P Waskiewicz Jr

From: Alexander Duyck <alexander.h.duyck@intel.com>

This change makes it so that we do not use double buffering if the page
size is larger than 4K.  Instead we will simply walk through the page using
up to 3K per receive, and if we receive less than we only move the offset
by that amount.  We will free the page when there is no longer any space
left that we can use instead of checking the page count to see if we can
cycle back to the start.

The main motivation behind this is to avoid the unnecessary truesize cost
for using a half page when most packets are 2K or smaller. With this new
approach the largest possible truesize for a page fragment will be 3K when
PAGE_SIZE is larger than 4K.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe.h      | 24 ++++++++++++----
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 40 ++++++++++++++++++---------
 2 files changed, 45 insertions(+), 19 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index b9623e9..fd2bc69 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -78,6 +78,9 @@
 
 /* Supported Rx Buffer Sizes */
 #define IXGBE_RXBUFFER_256    256  /* Used for skb receive header */
+#define IXGBE_RXBUFFER_2K    2048
+#define IXGBE_RXBUFFER_3K    3072
+#define IXGBE_RXBUFFER_4K    4096
 #define IXGBE_MAX_RXBUFFER  16384  /* largest size for a single descriptor */
 
 /*
@@ -293,16 +296,25 @@ struct ixgbe_ring_feature {
  * this is twice the size of a half page we need to double the page order
  * for FCoE enabled Rx queues.
  */
-#if defined(IXGBE_FCOE) && (PAGE_SIZE < 8192)
-static inline unsigned int ixgbe_rx_pg_order(struct ixgbe_ring *ring)
+static inline unsigned int ixgbe_rx_bufsz(struct ixgbe_ring *ring)
 {
-	return test_bit(__IXGBE_RX_FCOE, &ring->state) ? 1 : 0;
+#ifdef IXGBE_FCOE
+	if (test_bit(__IXGBE_RX_FCOE, &ring->state))
+		return (PAGE_SIZE < 8192) ? IXGBE_RXBUFFER_4K :
+					    IXGBE_RXBUFFER_3K;
+#endif
+	return IXGBE_RXBUFFER_2K;
 }
-#else
-#define ixgbe_rx_pg_order(_ring) 0
+
+static inline unsigned int ixgbe_rx_pg_order(struct ixgbe_ring *ring)
+{
+#ifdef IXGBE_FCOE
+	if (test_bit(__IXGBE_RX_FCOE, &ring->state))
+		return (PAGE_SIZE < 8192) ? 1 : 0;
 #endif
+	return 0;
+}
 #define ixgbe_rx_pg_size(_ring) (PAGE_SIZE << ixgbe_rx_pg_order(_ring))
-#define ixgbe_rx_bufsz(_ring) ((PAGE_SIZE / 2) << ixgbe_rx_pg_order(_ring))
 
 struct ixgbe_ring_container {
 	struct ixgbe_ring *ring;	/* pointer to linked list of rings */
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 6a8c484..9305e9a 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -1612,21 +1612,45 @@ static bool ixgbe_add_rx_frag(struct ixgbe_ring *rx_ring,
 {
 	struct page *page = rx_buffer->page;
 	unsigned int size = le16_to_cpu(rx_desc->wb.upper.length);
+#if (PAGE_SIZE < 8192)
 	unsigned int truesize = ixgbe_rx_bufsz(rx_ring);
+#else
+	unsigned int truesize = ALIGN(size, L1_CACHE_BYTES);
+	unsigned int last_offset = ixgbe_rx_pg_size(rx_ring) -
+				   ixgbe_rx_bufsz(rx_ring);
+#endif
 
 	skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, page,
 			rx_buffer->page_offset, size, truesize);
 
-	/* if we are only owner of page and it is local we can reuse it */
-	if (unlikely(page_count(page) != 1) ||
-	    unlikely(page_to_nid(page) != numa_node_id()))
+	/* avoid re-using remote pages */
+	if (unlikely(page_to_nid(page) != numa_node_id()))
+		return false;
+
+#if (PAGE_SIZE < 8192)
+	/* if we are only owner of page we can reuse it */
+	if (unlikely(page_count(page) != 1))
 		return false;
 
 	/* flip page offset to other buffer */
 	rx_buffer->page_offset ^= truesize;
 
+	/*
+	 * since we are the only owner of the page and we need to
+	 * increment it, just set the value to 2 in order to avoid
+	 * an unecessary locked operation
+	 */
+	atomic_set(&page->_count, 2);
+#else
+	/* move offset up to the next cache line */
+	rx_buffer->page_offset += truesize;
+
+	if (rx_buffer->page_offset > last_offset)
+		return false;
+
 	/* bump ref count on page before it is given to the stack */
 	get_page(page);
+#endif
 
 	return true;
 }
@@ -2863,11 +2887,7 @@ static void ixgbe_configure_srrctl(struct ixgbe_adapter *adapter,
 	srrctl = IXGBE_RX_HDR_SIZE << IXGBE_SRRCTL_BSIZEHDRSIZE_SHIFT;
 
 	/* configure the packet buffer length */
-#if PAGE_SIZE > IXGBE_MAX_RXBUFFER
-	srrctl |= IXGBE_MAX_RXBUFFER >> IXGBE_SRRCTL_BSIZEPKT_SHIFT;
-#else
 	srrctl |= ixgbe_rx_bufsz(rx_ring) >> IXGBE_SRRCTL_BSIZEPKT_SHIFT;
-#endif
 
 	/* configure descriptor type */
 	srrctl |= IXGBE_SRRCTL_DESCTYPE_ADV_ONEBUF;
@@ -2975,13 +2995,7 @@ static void ixgbe_configure_rscctl(struct ixgbe_adapter *adapter,
 	 * total size of max desc * buf_len is not greater
 	 * than 65536
 	 */
-#if (PAGE_SIZE <= 8192)
 	rscctrl |= IXGBE_RSCCTL_MAXDESC_16;
-#elif (PAGE_SIZE <= 16384)
-	rscctrl |= IXGBE_RSCCTL_MAXDESC_8;
-#else
-	rscctrl |= IXGBE_RSCCTL_MAXDESC_4;
-#endif
 	IXGBE_WRITE_REG(hw, IXGBE_RSCCTL(reg_idx), rscctrl);
 }
 
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [net-next 4/9] ixgbe: Have the CPU take ownership of the buffers sooner
  2012-08-16 22:48 [net-next 0/9][pull request] Intel Wired LAN Driver Updates Peter P Waskiewicz Jr
                   ` (2 preceding siblings ...)
  2012-08-16 22:48 ` [net-next 3/9] ixgbe: Only use double buffering if page size is less than 8K Peter P Waskiewicz Jr
@ 2012-08-16 22:48 ` Peter P Waskiewicz Jr
  2012-08-16 22:48 ` [net-next 5/9] ixgbe: Make pull tail function separate from rest of cleanup_headers Peter P Waskiewicz Jr
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 33+ messages in thread
From: Peter P Waskiewicz Jr @ 2012-08-16 22:48 UTC (permalink / raw)
  To: davem; +Cc: Alexander Duyck, netdev, gospo, sassmann, Peter P Waskiewicz Jr

From: Alexander Duyck <alexander.h.duyck@intel.com>

This patch makes it so that we will always have ownership of the buffers by
the time we get to ixgbe_add_rx_frag. This is necessary as I am planning to
add a copy-break to ixgbe_add_rx_frag and in order for that to function
correctly we need the CPU to have ownership of the buffer.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 52 +++++++++++++++++++--------
 1 file changed, 38 insertions(+), 14 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 9305e9a..b0020fc 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -1458,6 +1458,36 @@ static bool ixgbe_is_non_eop(struct ixgbe_ring *rx_ring,
 }
 
 /**
+ * ixgbe_dma_sync_frag - perform DMA sync for first frag of SKB
+ * @rx_ring: rx descriptor ring packet is being transacted on
+ * @skb: pointer to current skb being updated
+ *
+ * This function provides a basic DMA sync up for the first fragment of an
+ * skb.  The reason for doing this is that the first fragment cannot be
+ * unmapped until we have reached the end of packet descriptor for a buffer
+ * chain.
+ */
+static void ixgbe_dma_sync_frag(struct ixgbe_ring *rx_ring,
+				struct sk_buff *skb)
+{
+	/* if the page was released unmap it, else just sync our portion */
+	if (unlikely(IXGBE_CB(skb)->page_released)) {
+		dma_unmap_page(rx_ring->dev, IXGBE_CB(skb)->dma,
+			       ixgbe_rx_pg_size(rx_ring), DMA_FROM_DEVICE);
+		IXGBE_CB(skb)->page_released = false;
+	} else {
+		struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[0];
+
+		dma_sync_single_range_for_cpu(rx_ring->dev,
+					      IXGBE_CB(skb)->dma,
+					      frag->page_offset,
+					      ixgbe_rx_bufsz(rx_ring),
+					      DMA_FROM_DEVICE);
+	}
+	IXGBE_CB(skb)->dma = 0;
+}
+
+/**
  * ixgbe_cleanup_headers - Correct corrupted or empty headers
  * @rx_ring: rx descriptor ring packet is being transacted on
  * @rx_desc: pointer to the EOP Rx descriptor
@@ -1484,20 +1514,6 @@ static bool ixgbe_cleanup_headers(struct ixgbe_ring *rx_ring,
 	unsigned char *va;
 	unsigned int pull_len;
 
-	/* if the page was released unmap it, else just sync our portion */
-	if (unlikely(IXGBE_CB(skb)->page_released)) {
-		dma_unmap_page(rx_ring->dev, IXGBE_CB(skb)->dma,
-			       ixgbe_rx_pg_size(rx_ring), DMA_FROM_DEVICE);
-		IXGBE_CB(skb)->page_released = false;
-	} else {
-		dma_sync_single_range_for_cpu(rx_ring->dev,
-					      IXGBE_CB(skb)->dma,
-					      frag->page_offset,
-					      ixgbe_rx_bufsz(rx_ring),
-					      DMA_FROM_DEVICE);
-	}
-	IXGBE_CB(skb)->dma = 0;
-
 	/* verify that the packet does not have any known errors */
 	if (unlikely(ixgbe_test_staterr(rx_desc,
 					IXGBE_RXDADV_ERR_FRAME_ERR_MASK) &&
@@ -1742,8 +1758,16 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
 			 * after the writeback.  Only unmap it when EOP is
 			 * reached
 			 */
+			if (likely(ixgbe_test_staterr(rx_desc,
+						      IXGBE_RXD_STAT_EOP)))
+				goto dma_sync;
+
 			IXGBE_CB(skb)->dma = rx_buffer->dma;
 		} else {
+			if (ixgbe_test_staterr(rx_desc, IXGBE_RXD_STAT_EOP))
+				ixgbe_dma_sync_frag(rx_ring, skb);
+
+dma_sync:
 			/* we are reusing so sync this buffer for CPU use */
 			dma_sync_single_range_for_cpu(rx_ring->dev,
 						      rx_buffer->dma,
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [net-next 5/9] ixgbe: Make pull tail function separate from rest of cleanup_headers
  2012-08-16 22:48 [net-next 0/9][pull request] Intel Wired LAN Driver Updates Peter P Waskiewicz Jr
                   ` (3 preceding siblings ...)
  2012-08-16 22:48 ` [net-next 4/9] ixgbe: Have the CPU take ownership of the buffers sooner Peter P Waskiewicz Jr
@ 2012-08-16 22:48 ` Peter P Waskiewicz Jr
  2012-08-16 22:48 ` [net-next 6/9] ixgbe: Copybreak sooner to avoid get_page/put_page and offset change overhead Peter P Waskiewicz Jr
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 33+ messages in thread
From: Peter P Waskiewicz Jr @ 2012-08-16 22:48 UTC (permalink / raw)
  To: davem; +Cc: Alexander Duyck, netdev, gospo, sassmann, Peter P Waskiewicz Jr

From: Alexander Duyck <alexander.h.duyck@intel.com>

This change creates a separate function for functionality similar to
pskb_pull_tail.  The main motivation for moving it to a separate function
is so that later I can just skip this function in the case where we have
already copied the buffer into skb->head.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 94 ++++++++++++++++-----------
 1 file changed, 57 insertions(+), 37 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index b0020fc..d926973 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -1458,6 +1458,61 @@ static bool ixgbe_is_non_eop(struct ixgbe_ring *rx_ring,
 }
 
 /**
+ * ixgbe_pull_tail - ixgbe specific version of skb_pull_tail
+ * @rx_ring: rx descriptor ring packet is being transacted on
+ * @skb: pointer to current skb being adjusted
+ *
+ * This function is an ixgbe specific version of __pskb_pull_tail.  The
+ * main difference between this version and the original function is that
+ * this function can make several assumptions about the state of things
+ * that allow for significant optimizations versus the standard function.
+ * As a result we can do things like drop a frag and maintain an accurate
+ * truesize for the skb.
+ */
+static void ixgbe_pull_tail(struct ixgbe_ring *rx_ring,
+			    struct sk_buff *skb)
+{
+	struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[0];
+	unsigned char *va;
+	unsigned int pull_len;
+
+	/*
+	 * it is valid to use page_address instead of kmap since we are
+	 * working with pages allocated out of the lomem pool per
+	 * alloc_page(GFP_ATOMIC)
+	 */
+	va = skb_frag_address(frag);
+
+	/*
+	 * we need the header to contain the greater of either ETH_HLEN or
+	 * 60 bytes if the skb->len is less than 60 for skb_pad.
+	 */
+	pull_len = skb_frag_size(frag);
+	if (pull_len > IXGBE_RX_HDR_SIZE)
+		pull_len = ixgbe_get_headlen(va, IXGBE_RX_HDR_SIZE);
+
+	/* align pull length to size of long to optimize memcpy performance */
+	skb_copy_to_linear_data(skb, va, ALIGN(pull_len, sizeof(long)));
+
+	/* update all of the pointers */
+	skb_frag_size_sub(frag, pull_len);
+	frag->page_offset += pull_len;
+	skb->data_len -= pull_len;
+	skb->tail += pull_len;
+
+	/*
+	 * if we sucked the frag empty then we should free it,
+	 * if there are other frags here something is screwed up in hardware
+	 */
+	if (skb_frag_size(frag) == 0) {
+		BUG_ON(skb_shinfo(skb)->nr_frags != 1);
+		skb_shinfo(skb)->nr_frags = 0;
+		__skb_frag_unref(frag);
+		skb->truesize -= ixgbe_rx_bufsz(rx_ring);
+	}
+}
+
+/**
  * ixgbe_dma_sync_frag - perform DMA sync for first frag of SKB
  * @rx_ring: rx descriptor ring packet is being transacted on
  * @skb: pointer to current skb being updated
@@ -1509,10 +1564,7 @@ static bool ixgbe_cleanup_headers(struct ixgbe_ring *rx_ring,
 				  union ixgbe_adv_rx_desc *rx_desc,
 				  struct sk_buff *skb)
 {
-	struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[0];
 	struct net_device *netdev = rx_ring->netdev;
-	unsigned char *va;
-	unsigned int pull_len;
 
 	/* verify that the packet does not have any known errors */
 	if (unlikely(ixgbe_test_staterr(rx_desc,
@@ -1522,40 +1574,8 @@ static bool ixgbe_cleanup_headers(struct ixgbe_ring *rx_ring,
 		return true;
 	}
 
-	/*
-	 * it is valid to use page_address instead of kmap since we are
-	 * working with pages allocated out of the lomem pool per
-	 * alloc_page(GFP_ATOMIC)
-	 */
-	va = skb_frag_address(frag);
-
-	/*
-	 * we need the header to contain the greater of either ETH_HLEN or
-	 * 60 bytes if the skb->len is less than 60 for skb_pad.
-	 */
-	pull_len = skb_frag_size(frag);
-	if (pull_len > IXGBE_RX_HDR_SIZE)
-		pull_len = ixgbe_get_headlen(va, IXGBE_RX_HDR_SIZE);
-
-	/* align pull length to size of long to optimize memcpy performance */
-	skb_copy_to_linear_data(skb, va, ALIGN(pull_len, sizeof(long)));
-
-	/* update all of the pointers */
-	skb_frag_size_sub(frag, pull_len);
-	frag->page_offset += pull_len;
-	skb->data_len -= pull_len;
-	skb->tail += pull_len;
-
-	/*
-	 * if we sucked the frag empty then we should free it,
-	 * if there are other frags here something is screwed up in hardware
-	 */
-	if (skb_frag_size(frag) == 0) {
-		BUG_ON(skb_shinfo(skb)->nr_frags != 1);
-		skb_shinfo(skb)->nr_frags = 0;
-		__skb_frag_unref(frag);
-		skb->truesize -= ixgbe_rx_bufsz(rx_ring);
-	}
+	/* place header in linear portion of buffer */
+	ixgbe_pull_tail(rx_ring, skb);
 
 #ifdef IXGBE_FCOE
 	/* do not attempt to pad FCoE Frames as this will disrupt DDP */
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [net-next 6/9] ixgbe: Copybreak sooner to avoid get_page/put_page and offset change overhead
  2012-08-16 22:48 [net-next 0/9][pull request] Intel Wired LAN Driver Updates Peter P Waskiewicz Jr
                   ` (4 preceding siblings ...)
  2012-08-16 22:48 ` [net-next 5/9] ixgbe: Make pull tail function separate from rest of cleanup_headers Peter P Waskiewicz Jr
@ 2012-08-16 22:48 ` Peter P Waskiewicz Jr
  2012-08-16 22:48 ` [net-next 7/9] ixgbe: Make allocating skb and placing data in it a separate function Peter P Waskiewicz Jr
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 33+ messages in thread
From: Peter P Waskiewicz Jr @ 2012-08-16 22:48 UTC (permalink / raw)
  To: davem; +Cc: Alexander Duyck, netdev, gospo, sassmann, Peter P Waskiewicz Jr

From: Alexander Duyck <alexander.h.duyck@intel.com>

This change makes it so that if only the first 256 bytes of a buffer are
used we just copy the data out and leave the offset and page count
unchanged. There are multiple advantages to this. First it allows us to
reuse the page much more in the case of pages larger than 4K. It also
allows us to avoid some expensive atomic operations in the form of
get_page/put_page. In perf I have seen CPU utilization for put_page drop
from 3.5% to 1.8% as a result of this patch when doing small packet routing,
and packet rates increased by about 3%.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 32 ++++++++++++++-------------
 1 file changed, 17 insertions(+), 15 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index d926973..d11fac5 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -1487,9 +1487,7 @@ static void ixgbe_pull_tail(struct ixgbe_ring *rx_ring,
 	 * we need the header to contain the greater of either ETH_HLEN or
 	 * 60 bytes if the skb->len is less than 60 for skb_pad.
 	 */
-	pull_len = skb_frag_size(frag);
-	if (pull_len > IXGBE_RX_HDR_SIZE)
-		pull_len = ixgbe_get_headlen(va, IXGBE_RX_HDR_SIZE);
+	pull_len = ixgbe_get_headlen(va, IXGBE_RX_HDR_SIZE);
 
 	/* align pull length to size of long to optimize memcpy performance */
 	skb_copy_to_linear_data(skb, va, ALIGN(pull_len, sizeof(long)));
@@ -1499,17 +1497,6 @@ static void ixgbe_pull_tail(struct ixgbe_ring *rx_ring,
 	frag->page_offset += pull_len;
 	skb->data_len -= pull_len;
 	skb->tail += pull_len;
-
-	/*
-	 * if we sucked the frag empty then we should free it,
-	 * if there are other frags here something is screwed up in hardware
-	 */
-	if (skb_frag_size(frag) == 0) {
-		BUG_ON(skb_shinfo(skb)->nr_frags != 1);
-		skb_shinfo(skb)->nr_frags = 0;
-		__skb_frag_unref(frag);
-		skb->truesize -= ixgbe_rx_bufsz(rx_ring);
-	}
 }
 
 /**
@@ -1575,7 +1562,8 @@ static bool ixgbe_cleanup_headers(struct ixgbe_ring *rx_ring,
 	}
 
 	/* place header in linear portion of buffer */
-	ixgbe_pull_tail(rx_ring, skb);
+	if (skb_is_nonlinear(skb))
+		ixgbe_pull_tail(rx_ring, skb);
 
 #ifdef IXGBE_FCOE
 	/* do not attempt to pad FCoE Frames as this will disrupt DDP */
@@ -1656,6 +1644,20 @@ static bool ixgbe_add_rx_frag(struct ixgbe_ring *rx_ring,
 				   ixgbe_rx_bufsz(rx_ring);
 #endif
 
+	if ((size <= IXGBE_RX_HDR_SIZE) && !skb_is_nonlinear(skb)) {
+		unsigned char *va = page_address(page) + rx_buffer->page_offset;
+
+		memcpy(__skb_put(skb, size), va, ALIGN(size, sizeof(long)));
+
+		/* we can reuse buffer as-is, just make sure it is local */
+		if (likely(page_to_nid(page) == numa_node_id()))
+			return true;
+
+		/* this page cannot be reused so discard it */
+		put_page(page);
+		return false;
+	}
+
 	skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags, page,
 			rx_buffer->page_offset, size, truesize);
 
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [net-next 7/9] ixgbe: Make allocating skb and placing data in it a separate function
  2012-08-16 22:48 [net-next 0/9][pull request] Intel Wired LAN Driver Updates Peter P Waskiewicz Jr
                   ` (5 preceding siblings ...)
  2012-08-16 22:48 ` [net-next 6/9] ixgbe: Copybreak sooner to avoid get_page/put_page and offset change overhead Peter P Waskiewicz Jr
@ 2012-08-16 22:48 ` Peter P Waskiewicz Jr
  2012-08-16 22:48 ` [net-next 8/9] ixgbe: Roll RSC code into non-EOP code Peter P Waskiewicz Jr
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 33+ messages in thread
From: Peter P Waskiewicz Jr @ 2012-08-16 22:48 UTC (permalink / raw)
  To: davem; +Cc: Alexander Duyck, netdev, gospo, sassmann, Peter P Waskiewicz Jr

From: Alexander Duyck <alexander.h.duyck@intel.com>

This patch creates a function named ixgbe_fetch_rx_buffer. The sole
purpose of this function is to retrieve a single buffer off of the ring and
to place it in an skb.

The advantage to doing this is that it helps improve the readability since
I can decrease the indentation and for the code in this section.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 166 ++++++++++++++------------
 1 file changed, 89 insertions(+), 77 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index d11fac5..9e72ae6 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -1693,6 +1693,89 @@ static bool ixgbe_add_rx_frag(struct ixgbe_ring *rx_ring,
 	return true;
 }
 
+static struct sk_buff *ixgbe_fetch_rx_buffer(struct ixgbe_ring *rx_ring,
+					     union ixgbe_adv_rx_desc *rx_desc)
+{
+	struct ixgbe_rx_buffer *rx_buffer;
+	struct sk_buff *skb;
+	struct page *page;
+
+	rx_buffer = &rx_ring->rx_buffer_info[rx_ring->next_to_clean];
+	page = rx_buffer->page;
+	prefetchw(page);
+
+	skb = rx_buffer->skb;
+
+	if (likely(!skb)) {
+		void *page_addr = page_address(page) +
+				  rx_buffer->page_offset;
+
+		/* prefetch first cache line of first page */
+		prefetch(page_addr);
+#if L1_CACHE_BYTES < 128
+		prefetch(page_addr + L1_CACHE_BYTES);
+#endif
+
+		/* allocate a skb to store the frags */
+		skb = netdev_alloc_skb_ip_align(rx_ring->netdev,
+						IXGBE_RX_HDR_SIZE);
+		if (unlikely(!skb)) {
+			rx_ring->rx_stats.alloc_rx_buff_failed++;
+			return NULL;
+		}
+
+		/*
+		 * we will be copying header into skb->data in
+		 * pskb_may_pull so it is in our interest to prefetch
+		 * it now to avoid a possible cache miss
+		 */
+		prefetchw(skb->data);
+
+		/*
+		 * Delay unmapping of the first packet. It carries the
+		 * header information, HW may still access the header
+		 * after the writeback.  Only unmap it when EOP is
+		 * reached
+		 */
+		if (likely(ixgbe_test_staterr(rx_desc, IXGBE_RXD_STAT_EOP)))
+			goto dma_sync;
+
+		IXGBE_CB(skb)->dma = rx_buffer->dma;
+	} else {
+		if (ixgbe_test_staterr(rx_desc, IXGBE_RXD_STAT_EOP))
+			ixgbe_dma_sync_frag(rx_ring, skb);
+
+dma_sync:
+		/* we are reusing so sync this buffer for CPU use */
+		dma_sync_single_range_for_cpu(rx_ring->dev,
+					      rx_buffer->dma,
+					      rx_buffer->page_offset,
+					      ixgbe_rx_bufsz(rx_ring),
+					      DMA_FROM_DEVICE);
+	}
+
+	/* pull page into skb */
+	if (ixgbe_add_rx_frag(rx_ring, rx_buffer, rx_desc, skb)) {
+		/* hand second half of page back to the ring */
+		ixgbe_reuse_rx_page(rx_ring, rx_buffer);
+	} else if (IXGBE_CB(skb)->dma == rx_buffer->dma) {
+		/* the page has been released from the ring */
+		IXGBE_CB(skb)->page_released = true;
+	} else {
+		/* we are not reusing the buffer so unmap it */
+		dma_unmap_page(rx_ring->dev, rx_buffer->dma,
+			       ixgbe_rx_pg_size(rx_ring),
+			       DMA_FROM_DEVICE);
+	}
+
+	/* clear contents of buffer_info */
+	rx_buffer->skb = NULL;
+	rx_buffer->dma = 0;
+	rx_buffer->page = NULL;
+
+	return skb;
+}
+
 /**
  * ixgbe_clean_rx_irq - Clean completed descriptors from Rx ring - bounce buf
  * @q_vector: structure containing interrupt and ring information
@@ -1718,11 +1801,8 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
 	u16 cleaned_count = ixgbe_desc_unused(rx_ring);
 
 	do {
-		struct ixgbe_rx_buffer *rx_buffer;
 		union ixgbe_adv_rx_desc *rx_desc;
 		struct sk_buff *skb;
-		struct page *page;
-		u16 ntc;
 
 		/* return some buffers to hardware, one at a time is too slow */
 		if (cleaned_count >= IXGBE_RX_BUFFER_WRITE) {
@@ -1730,9 +1810,7 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
 			cleaned_count = 0;
 		}
 
-		ntc = rx_ring->next_to_clean;
-		rx_desc = IXGBE_RX_DESC(rx_ring, ntc);
-		rx_buffer = &rx_ring->rx_buffer_info[ntc];
+		rx_desc = IXGBE_RX_DESC(rx_ring, rx_ring->next_to_clean);
 
 		if (!ixgbe_test_staterr(rx_desc, IXGBE_RXD_STAT_DD))
 			break;
@@ -1744,78 +1822,12 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
 		 */
 		rmb();
 
-		page = rx_buffer->page;
-		prefetchw(page);
-
-		skb = rx_buffer->skb;
-
-		if (likely(!skb)) {
-			void *page_addr = page_address(page) +
-					  rx_buffer->page_offset;
-
-			/* prefetch first cache line of first page */
-			prefetch(page_addr);
-#if L1_CACHE_BYTES < 128
-			prefetch(page_addr + L1_CACHE_BYTES);
-#endif
-
-			/* allocate a skb to store the frags */
-			skb = netdev_alloc_skb_ip_align(rx_ring->netdev,
-							IXGBE_RX_HDR_SIZE);
-			if (unlikely(!skb)) {
-				rx_ring->rx_stats.alloc_rx_buff_failed++;
-				break;
-			}
-
-			/*
-			 * we will be copying header into skb->data in
-			 * pskb_may_pull so it is in our interest to prefetch
-			 * it now to avoid a possible cache miss
-			 */
-			prefetchw(skb->data);
-
-			/*
-			 * Delay unmapping of the first packet. It carries the
-			 * header information, HW may still access the header
-			 * after the writeback.  Only unmap it when EOP is
-			 * reached
-			 */
-			if (likely(ixgbe_test_staterr(rx_desc,
-						      IXGBE_RXD_STAT_EOP)))
-				goto dma_sync;
+		/* retrieve a buffer from the ring */
+		skb = ixgbe_fetch_rx_buffer(rx_ring, rx_desc);
 
-			IXGBE_CB(skb)->dma = rx_buffer->dma;
-		} else {
-			if (ixgbe_test_staterr(rx_desc, IXGBE_RXD_STAT_EOP))
-				ixgbe_dma_sync_frag(rx_ring, skb);
-
-dma_sync:
-			/* we are reusing so sync this buffer for CPU use */
-			dma_sync_single_range_for_cpu(rx_ring->dev,
-						      rx_buffer->dma,
-						      rx_buffer->page_offset,
-						      ixgbe_rx_bufsz(rx_ring),
-						      DMA_FROM_DEVICE);
-		}
-
-		/* pull page into skb */
-		if (ixgbe_add_rx_frag(rx_ring, rx_buffer, rx_desc, skb)) {
-			/* hand second half of page back to the ring */
-			ixgbe_reuse_rx_page(rx_ring, rx_buffer);
-		} else if (IXGBE_CB(skb)->dma == rx_buffer->dma) {
-			/* the page has been released from the ring */
-			IXGBE_CB(skb)->page_released = true;
-		} else {
-			/* we are not reusing the buffer so unmap it */
-			dma_unmap_page(rx_ring->dev, rx_buffer->dma,
-				       ixgbe_rx_pg_size(rx_ring),
-				       DMA_FROM_DEVICE);
-		}
-
-		/* clear contents of buffer_info */
-		rx_buffer->skb = NULL;
-		rx_buffer->dma = 0;
-		rx_buffer->page = NULL;
+		/* exit if we failed to retrieve a buffer */
+		if (!skb)
+			break;
 
 		ixgbe_get_rsc_cnt(rx_ring, rx_desc, skb);
 
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [net-next 8/9] ixgbe: Roll RSC code into non-EOP code
  2012-08-16 22:48 [net-next 0/9][pull request] Intel Wired LAN Driver Updates Peter P Waskiewicz Jr
                   ` (6 preceding siblings ...)
  2012-08-16 22:48 ` [net-next 7/9] ixgbe: Make allocating skb and placing data in it a separate function Peter P Waskiewicz Jr
@ 2012-08-16 22:48 ` Peter P Waskiewicz Jr
  2012-08-16 22:48 ` [net-next 9/9] ixgbe: Rewrite code related to configuring IFCS bit in Tx descriptor Peter P Waskiewicz Jr
  2012-08-20  9:31 ` [net-next 0/9][pull request] Intel Wired LAN Driver Updates David Miller
  9 siblings, 0 replies; 33+ messages in thread
From: Peter P Waskiewicz Jr @ 2012-08-16 22:48 UTC (permalink / raw)
  To: davem; +Cc: Alexander Duyck, netdev, gospo, sassmann, Peter P Waskiewicz Jr

From: Alexander Duyck <alexander.h.duyck@intel.com>

This change moves the RSC code into the non-EOP descriptor handling
function. The main motivation behind this change is to help reduce the
overhead in the non-RSC case. Previously the non-RSC path code would
always be checking for append count even if RSC had been disabled. Now
this code is completely skipped in a single conditional check instead of
having to make two separate checks.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 51 ++++++++++-----------------
 1 file changed, 19 insertions(+), 32 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 9e72ae6..aa37b84 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -1320,29 +1320,6 @@ static unsigned int ixgbe_get_headlen(unsigned char *data,
 		return max_len;
 }
 
-static void ixgbe_get_rsc_cnt(struct ixgbe_ring *rx_ring,
-			      union ixgbe_adv_rx_desc *rx_desc,
-			      struct sk_buff *skb)
-{
-	__le32 rsc_enabled;
-	u32 rsc_cnt;
-
-	if (!ring_is_rsc_enabled(rx_ring))
-		return;
-
-	rsc_enabled = rx_desc->wb.lower.lo_dword.data &
-		      cpu_to_le32(IXGBE_RXDADV_RSCCNT_MASK);
-
-	/* If this is an RSC frame rsc_cnt should be non-zero */
-	if (!rsc_enabled)
-		return;
-
-	rsc_cnt = le32_to_cpu(rsc_enabled);
-	rsc_cnt >>= IXGBE_RXDADV_RSCCNT_SHIFT;
-
-	IXGBE_CB(skb)->append_cnt += rsc_cnt - 1;
-}
-
 static void ixgbe_set_rsc_gso_size(struct ixgbe_ring *ring,
 				   struct sk_buff *skb)
 {
@@ -1440,16 +1417,28 @@ static bool ixgbe_is_non_eop(struct ixgbe_ring *rx_ring,
 
 	prefetch(IXGBE_RX_DESC(rx_ring, ntc));
 
-	if (likely(ixgbe_test_staterr(rx_desc, IXGBE_RXD_STAT_EOP)))
-		return false;
+	/* update RSC append count if present */
+	if (ring_is_rsc_enabled(rx_ring)) {
+		__le32 rsc_enabled = rx_desc->wb.lower.lo_dword.data &
+				     cpu_to_le32(IXGBE_RXDADV_RSCCNT_MASK);
+
+		if (unlikely(rsc_enabled)) {
+			u32 rsc_cnt = le32_to_cpu(rsc_enabled);
+
+			rsc_cnt >>= IXGBE_RXDADV_RSCCNT_SHIFT;
+			IXGBE_CB(skb)->append_cnt += rsc_cnt - 1;
 
-	/* append_cnt indicates packet is RSC, if so fetch nextp */
-	if (IXGBE_CB(skb)->append_cnt) {
-		ntc = le32_to_cpu(rx_desc->wb.upper.status_error);
-		ntc &= IXGBE_RXDADV_NEXTP_MASK;
-		ntc >>= IXGBE_RXDADV_NEXTP_SHIFT;
+			/* update ntc based on RSC value */
+			ntc = le32_to_cpu(rx_desc->wb.upper.status_error);
+			ntc &= IXGBE_RXDADV_NEXTP_MASK;
+			ntc >>= IXGBE_RXDADV_NEXTP_SHIFT;
+		}
 	}
 
+	/* if we are the last buffer then there is nothing else to do */
+	if (likely(ixgbe_test_staterr(rx_desc, IXGBE_RXD_STAT_EOP)))
+		return false;
+
 	/* place skb in next buffer to be received */
 	rx_ring->rx_buffer_info[ntc].skb = skb;
 	rx_ring->rx_stats.non_eop_descs++;
@@ -1829,8 +1818,6 @@ static bool ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,
 		if (!skb)
 			break;
 
-		ixgbe_get_rsc_cnt(rx_ring, rx_desc, skb);
-
 		cleaned_count++;
 
 		/* place incomplete frames back on ring for completion */
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* [net-next 9/9] ixgbe: Rewrite code related to configuring IFCS bit in Tx descriptor
  2012-08-16 22:48 [net-next 0/9][pull request] Intel Wired LAN Driver Updates Peter P Waskiewicz Jr
                   ` (7 preceding siblings ...)
  2012-08-16 22:48 ` [net-next 8/9] ixgbe: Roll RSC code into non-EOP code Peter P Waskiewicz Jr
@ 2012-08-16 22:48 ` Peter P Waskiewicz Jr
  2012-08-20  9:31 ` [net-next 0/9][pull request] Intel Wired LAN Driver Updates David Miller
  9 siblings, 0 replies; 33+ messages in thread
From: Peter P Waskiewicz Jr @ 2012-08-16 22:48 UTC (permalink / raw)
  To: davem; +Cc: Alexander Duyck, netdev, gospo, sassmann, Peter P Waskiewicz Jr

From: Alexander Duyck <alexander.h.duyck@intel.com>

This change updates the code related to configuring the transmit frame
checksum.  Specifically I have updated the code so that we can only skip
inserting the checksum in the case that we are not performing some other
offload that will modify the frame data.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
---
 drivers/net/ethernet/intel/ixgbe/ixgbe.h      |  1 +
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 16 ++++++++++------
 2 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe.h b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
index fd2bc69..bffcf1f 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe.h
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe.h
@@ -107,6 +107,7 @@
 #define IXGBE_TX_FLAGS_FSO		(u32)(1 << 6)
 #define IXGBE_TX_FLAGS_TXSW		(u32)(1 << 7)
 #define IXGBE_TX_FLAGS_TSTAMP		(u32)(1 << 8)
+#define IXGBE_TX_FLAGS_NO_IFCS		(u32)(1 << 9)
 #define IXGBE_TX_FLAGS_VLAN_MASK	0xffff0000
 #define IXGBE_TX_FLAGS_VLAN_PRIO_MASK	0xe0000000
 #define IXGBE_TX_FLAGS_VLAN_PRIO_SHIFT  29
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index aa37b84..fa0d6e1 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -5903,9 +5903,12 @@ static void ixgbe_tx_csum(struct ixgbe_ring *tx_ring,
 	u32 type_tucmd = 0;
 
 	if (skb->ip_summed != CHECKSUM_PARTIAL) {
-		if (!(first->tx_flags & IXGBE_TX_FLAGS_HW_VLAN) &&
-		    !(first->tx_flags & IXGBE_TX_FLAGS_TXSW))
-			return;
+		if (!(first->tx_flags & IXGBE_TX_FLAGS_HW_VLAN)) {
+			if (unlikely(skb->no_fcs))
+				first->tx_flags |= IXGBE_TX_FLAGS_NO_IFCS;
+			if (!(first->tx_flags & IXGBE_TX_FLAGS_TXSW))
+				return;
+		}
 	} else {
 		u8 l4_hdr = 0;
 		switch (first->protocol) {
@@ -5967,7 +5970,6 @@ static __le32 ixgbe_tx_cmd_type(u32 tx_flags)
 {
 	/* set type for advanced descriptor with frame checksum insertion */
 	__le32 cmd_type = cpu_to_le32(IXGBE_ADVTXD_DTYP_DATA |
-				      IXGBE_ADVTXD_DCMD_IFCS |
 				      IXGBE_ADVTXD_DCMD_DEXT);
 
 	/* set HW vlan bit if vlan is present */
@@ -5987,6 +5989,10 @@ static __le32 ixgbe_tx_cmd_type(u32 tx_flags)
 #endif
 		cmd_type |= cpu_to_le32(IXGBE_ADVTXD_DCMD_TSE);
 
+	/* insert frame checksum */
+	if (!(tx_flags & IXGBE_TX_FLAGS_NO_IFCS))
+		cmd_type |= cpu_to_le32(IXGBE_ADVTXD_DCMD_IFCS);
+
 	return cmd_type;
 }
 
@@ -6092,8 +6098,6 @@ static void ixgbe_tx_map(struct ixgbe_ring *tx_ring,
 		if (likely(!data_len))
 			break;
 
-		if (unlikely(skb->no_fcs))
-			cmd_type &= ~(cpu_to_le32(IXGBE_ADVTXD_DCMD_IFCS));
 		tx_desc->read.cmd_type_len = cmd_type | cpu_to_le32(size);
 
 		i++;
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 33+ messages in thread

* Re: [net-next 0/9][pull request] Intel Wired LAN Driver Updates
  2012-08-16 22:48 [net-next 0/9][pull request] Intel Wired LAN Driver Updates Peter P Waskiewicz Jr
                   ` (8 preceding siblings ...)
  2012-08-16 22:48 ` [net-next 9/9] ixgbe: Rewrite code related to configuring IFCS bit in Tx descriptor Peter P Waskiewicz Jr
@ 2012-08-20  9:31 ` David Miller
  9 siblings, 0 replies; 33+ messages in thread
From: David Miller @ 2012-08-20  9:31 UTC (permalink / raw)
  To: peter.p.waskiewicz.jr; +Cc: netdev, gospo, sassmann

From: Peter P Waskiewicz Jr <peter.p.waskiewicz.jr@intel.com>
Date: Thu, 16 Aug 2012 15:48:29 -0700

> This series contains multiple updates to the ixgbe driver.
> 
> The following are changes since commit 02644a17457414f38e29f32d5c640b06d08fa092:
>     sctp: fix bogus if statement in sctp_auth_recv_cid()
>   
> and are available in the git repository at:
>   git://git.kernel.org/pub/scm/linux/kernel/git/ppwaskie/net-next master

Pulled, thanks a lot PJ.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [net-next 0/9][pull request] Intel Wired LAN Driver Updates
@ 2012-11-15 14:39 Jeff Kirsher
  2012-11-15 20:18 ` David Miller
  0 siblings, 1 reply; 33+ messages in thread
From: Jeff Kirsher @ 2012-11-15 14:39 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

This series contains updates to ioat (DCA) and ixgbevf.

The following are changes since commit 702ed3c1a9dfe4dfe112f13542d0c9d689f5008b:
  Merge tag 'batman-adv-for-davem' of git://git.open-mesh.org/linux-merge
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Alexander Duyck (1):
  ioat: Do not enable DCA if tag map is invalid

Greg Rose (8):
  ixgbevf: Streamline the rx buffer allocation
  ixgbevf: Fix unnecessary dereference where local var is available.
  ixgbevf: Remove the ring adapter pointer value
  ixgbevf: Remove checking for mac.ops function pointers
  ixgbevf: Remove mailbox spinlock from the reset function
  ixgbevf: White space and comments clean up
  ixgbevf: Remove unneeded and obsolete comment
  ixgbevf: Add checksum statistics counters to rings

 drivers/dma/ioat/dca.c                            |  23 ++++
 drivers/net/ethernet/intel/ixgbevf/ixgbevf.h      |   3 +-
 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 123 +++++++++-------------
 3 files changed, 72 insertions(+), 77 deletions(-)

-- 
1.7.11.7

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [net-next 0/9][pull request] Intel Wired LAN Driver Updates
  2012-11-15 14:39 Jeff Kirsher
@ 2012-11-15 20:18 ` David Miller
  0 siblings, 0 replies; 33+ messages in thread
From: David Miller @ 2012-11-15 20:18 UTC (permalink / raw)
  To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann

From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Thu, 15 Nov 2012 06:39:38 -0800

> This series contains updates to ioat (DCA) and ixgbevf.
> 
> The following are changes since commit 702ed3c1a9dfe4dfe112f13542d0c9d689f5008b:
>   Merge tag 'batman-adv-for-davem' of git://git.open-mesh.org/linux-merge
> and are available in the git repository at:
>   git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Pulled, thanks Jeff.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [net-next 0/9][pull request] Intel Wired LAN Driver Updates
@ 2012-12-01 11:53 Jeff Kirsher
  2012-12-01 16:29 ` David Miller
  0 siblings, 1 reply; 33+ messages in thread
From: Jeff Kirsher @ 2012-12-01 11:53 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

This series contains updates to ixgbe, igb and e1000e.  Majority of the
changes are against igb.

The following are changes since commit 1b4c44e6369dbbafd113f1e00b406f1eda5ab5b2:
  myri10ge: Add vlan rx for better GRO perf.
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Akeem G. Abodunrin (1):
  igb: Acquire, release semaphore for writing each EEPROM page

Alexander Duyck (1):
  ixgbe: Do not parse past IP header on fragments beyond the first

Bruce Allan (1):
  e1000e: cosmetic cleanup of comments

Carolyn Wyborny (5):
  igb: Updates to read nvm function for i211 device
  igb: Refactoring of i210 file.
  igb: Workaround for global device reset problem on 82580.
  igb: Unset sigdetect for SERDES loopback on 82580 and i350
  igb: Fix SerDes autoneg flow control.

Joshua Hay (1):
  ixgbe: eliminate Smatch warnings in ixgbe_debugfs.c

 drivers/net/ethernet/intel/e1000e/80003es2lan.c  |  66 ++---
 drivers/net/ethernet/intel/e1000e/82571.c        | 115 +++------
 drivers/net/ethernet/intel/e1000e/defines.h      |  27 +-
 drivers/net/ethernet/intel/e1000e/e1000.h        |  17 +-
 drivers/net/ethernet/intel/e1000e/ethtool.c      |  69 ++---
 drivers/net/ethernet/intel/e1000e/hw.h           |   6 +-
 drivers/net/ethernet/intel/e1000e/ich8lan.c      | 243 ++++++------------
 drivers/net/ethernet/intel/e1000e/mac.c          | 135 ++++------
 drivers/net/ethernet/intel/e1000e/manage.c       |   9 +-
 drivers/net/ethernet/intel/e1000e/netdev.c       | 313 +++++++++--------------
 drivers/net/ethernet/intel/e1000e/nvm.c          |  15 +-
 drivers/net/ethernet/intel/e1000e/param.c        |  50 ++--
 drivers/net/ethernet/intel/e1000e/phy.c          | 141 ++++------
 drivers/net/ethernet/intel/igb/e1000_82575.c     |  49 +++-
 drivers/net/ethernet/intel/igb/e1000_defines.h   |   7 +
 drivers/net/ethernet/intel/igb/e1000_i210.c      | 275 +++++++++++---------
 drivers/net/ethernet/intel/igb/e1000_i210.h      |   6 +
 drivers/net/ethernet/intel/igb/e1000_mac.c       | 124 +++++++++
 drivers/net/ethernet/intel/igb/e1000_nvm.c       |  28 +-
 drivers/net/ethernet/intel/igb/igb.h             |   2 +
 drivers/net/ethernet/intel/igb/igb_ethtool.c     |  14 +
 drivers/net/ethernet/intel/ixgbe/ixgbe_debugfs.c |  83 +++---
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c    |  13 +-
 23 files changed, 823 insertions(+), 984 deletions(-)

-- 
1.7.11.7

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [net-next 0/9][pull request] Intel Wired LAN Driver Updates
  2012-12-01 11:53 Jeff Kirsher
@ 2012-12-01 16:29 ` David Miller
  0 siblings, 0 replies; 33+ messages in thread
From: David Miller @ 2012-12-01 16:29 UTC (permalink / raw)
  To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann

From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Sat,  1 Dec 2012 03:53:28 -0800

> This series contains updates to ixgbe, igb and e1000e.  Majority of the
> changes are against igb.
> 
> The following are changes since commit 1b4c44e6369dbbafd113f1e00b406f1eda5ab5b2:
>   myri10ge: Add vlan rx for better GRO perf.
> and are available in the git repository at:
>   git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Pulled, thanks Jeff.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [net-next  0/9][pull request] Intel Wired LAN Driver Updates
@ 2013-09-04 13:08 Jeff Kirsher
  2013-09-04 16:41 ` David Miller
  0 siblings, 1 reply; 33+ messages in thread
From: Jeff Kirsher @ 2013-09-04 13:08 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

This series contains updates to igb only.

Todd provides a fix for igb to not look for a PBA in the iNVM on
devices that are flashless.

Akeem provides igb patches to add a new PHY id for i354, as well as
a couple of patches to implement the new PHY id.  He also provides
several patches to correctly report the appropriate media type as
well as correctly report advertised/supported link for i354 devices.
Lastly Akeem implements a 1 second delay mechanism for i210 devices
to avoid erroneous link issue with the link partner.

The following are changes since commit c995ae2259ee36caf48bbfacf40111998dacd4af:
  tcp: Change return value of tcp_rcv_established()
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Akeem G Abodunrin (8):
  igb: Implementation of 1-sec delay for i210 devices
  igb: New PHY_ID for i354 device
  igb: M88E1543 PHY downshift implementation
  igb: No PHPM support in i354 devices
  igb: Support to get 2_5G link status for appropriate media type
  igb: Get speed and duplex for 1G non_copper devices
  igb: Implementation to report advertised/supported link on i354
    devices
  igb: Update version number

Todd Fujinaka (1):
  igb: Don't look for a PBA in the iNVM when flashless

 drivers/net/ethernet/intel/igb/e1000_82575.c   | 81 ++++++++++++++++++++------
 drivers/net/ethernet/intel/igb/e1000_defines.h |  8 +--
 drivers/net/ethernet/intel/igb/e1000_mac.c     | 11 ----
 drivers/net/ethernet/intel/igb/e1000_phy.c     | 31 ++++++----
 drivers/net/ethernet/intel/igb/igb.h           |  3 +
 drivers/net/ethernet/intel/igb/igb_ethtool.c   | 26 +++++----
 drivers/net/ethernet/intel/igb/igb_main.c      | 43 ++++++++++++--
 7 files changed, 143 insertions(+), 60 deletions(-)

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [net-next 0/9][pull request] Intel Wired LAN Driver Updates
  2013-09-04 13:08 Jeff Kirsher
@ 2013-09-04 16:41 ` David Miller
  0 siblings, 0 replies; 33+ messages in thread
From: David Miller @ 2013-09-04 16:41 UTC (permalink / raw)
  To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann

From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Wed,  4 Sep 2013 06:08:47 -0700

> This series contains updates to igb only.
> 
> Todd provides a fix for igb to not look for a PBA in the iNVM on
> devices that are flashless.
> 
> Akeem provides igb patches to add a new PHY id for i354, as well as
> a couple of patches to implement the new PHY id.  He also provides
> several patches to correctly report the appropriate media type as
> well as correctly report advertised/supported link for i354 devices.
> Lastly Akeem implements a 1 second delay mechanism for i210 devices
> to avoid erroneous link issue with the link partner.

Pulled, thanks a lot Jeff.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [net-next  0/9][pull request] Intel Wired LAN Driver Updates
@ 2013-10-01 11:33 Jeff Kirsher
  2013-10-01 16:51 ` David Miller
  0 siblings, 1 reply; 33+ messages in thread
From: Jeff Kirsher @ 2013-10-01 11:33 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

This series contains updates to ixgbevf, ixgbe and igb.

Don provides 3 patches for ixgbevf where he cleans up a redundant
read mailbox failure check, adds a new function to wait for receive
queues to be disabled before disabling NAPI, and move the API
negotiation so that it occurs in the reset path.  This will allow
the PF to be informed of the API version earlier.

Jacob provides a ixgbevf and ixgbe patch.  His ixgbevf patch removes
the use of hw_dbg when the ixgbe_get_regs function is called in ethtool.
The ixgbe patch renames the LL_EXTENDED_STATS and some of the functions
required to implement busy polling in order to remove the marketing
"low latency" blurb which hides what the code actually does.

Leonardo provides a ixgbe patch to add support for DCB registers dump
using ethtool for 82599 and x540 ethernet controllers.

I (Jeff) provide a ixgbe patch to cleanup whitespace issues seen in a
code review.

Todd provides for igb to add support for i354 in the ethtool offline
tests.

Laura provides an igb patch to add the ethtool callbacks necessary to
configure the number of RSS queues.

The following are changes since commit b32418705107265dfca5edfe2b547643e53a732e:
  bonding: RCUify bond_set_rx_mode()
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Don Skidmore (3):
  ixgbevf: cleanup redundant mailbox read failure check
  ixgbevf: add wait for Rx queue disable
  ixgbevf: move API neg to reset path

Fujinaka, Todd (1):
  igb: Add ethtool offline tests for i354

Jacob Keller (2):
  ixgbevf: do not print registers to dmesg in ixgbevf_get_regs
  ixgbe: remove marketing names from busy poll code

Jeff Kirsher (1):
  ixgbe: Cleanup the use of tabs and spaces

Laura Mihaela Vasilescu (1):
  igb: Add ethtool support to configure number of channels

Leonardo Potenza (1):
  ixgbe: ethtool DCB registers dump for 82599 and x540

 drivers/net/ethernet/intel/igb/igb.h              |   1 +
 drivers/net/ethernet/intel/igb/igb_ethtool.c      |  90 +++++++++++++++++-
 drivers/net/ethernet/intel/igb/igb_main.c         |  22 +++++
 drivers/net/ethernet/intel/ixgbe/ixgbe.h          |  14 +--
 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c  | 103 ++++++++++++++------
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c     |   4 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_phy.h      |  40 ++++----
 drivers/net/ethernet/intel/ixgbe/ixgbe_type.h     |   5 +
 drivers/net/ethernet/intel/ixgbe/ixgbe_x540.c     |  12 +--
 drivers/net/ethernet/intel/ixgbevf/ethtool.c      |  55 +----------
 drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 111 +++++++++++-----------
 11 files changed, 283 insertions(+), 174 deletions(-)

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [net-next 0/9][pull request] Intel Wired LAN Driver Updates
  2013-10-01 11:33 Jeff Kirsher
@ 2013-10-01 16:51 ` David Miller
  2013-10-01 22:15   ` Jeff Kirsher
  0 siblings, 1 reply; 33+ messages in thread
From: David Miller @ 2013-10-01 16:51 UTC (permalink / raw)
  To: jeffrey.t.kirsher; +Cc: netdev, gospo, sassmann

From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Date: Tue,  1 Oct 2013 04:33:47 -0700

> This series contains updates to ixgbevf, ixgbe and igb.
> 
> Don provides 3 patches for ixgbevf where he cleans up a redundant
> read mailbox failure check, adds a new function to wait for receive
> queues to be disabled before disabling NAPI, and move the API
> negotiation so that it occurs in the reset path.  This will allow
> the PF to be informed of the API version earlier.
> 
> Jacob provides a ixgbevf and ixgbe patch.  His ixgbevf patch removes
> the use of hw_dbg when the ixgbe_get_regs function is called in ethtool.
> The ixgbe patch renames the LL_EXTENDED_STATS and some of the functions
> required to implement busy polling in order to remove the marketing
> "low latency" blurb which hides what the code actually does.
> 
> Leonardo provides a ixgbe patch to add support for DCB registers dump
> using ethtool for 82599 and x540 ethernet controllers.
> 
> I (Jeff) provide a ixgbe patch to cleanup whitespace issues seen in a
> code review.
> 
> Todd provides for igb to add support for i354 in the ethtool offline
> tests.
> 
> Laura provides an igb patch to add the ethtool callbacks necessary to
> configure the number of RSS queues.

Pulled, thanks Jeff.

Please address Ben Hutching's concerns about the state of the device
after a number of channels configuration failure with follow-on
changes, if necessary.

Thanks.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [net-next 0/9][pull request] Intel Wired LAN Driver Updates
  2013-10-01 16:51 ` David Miller
@ 2013-10-01 22:15   ` Jeff Kirsher
  0 siblings, 0 replies; 33+ messages in thread
From: Jeff Kirsher @ 2013-10-01 22:15 UTC (permalink / raw)
  To: David Miller; +Cc: netdev, gospo, sassmann

[-- Attachment #1: Type: text/plain, Size: 1621 bytes --]

On Tue, 2013-10-01 at 12:51 -0400, David Miller wrote:
> From: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
> Date: Tue,  1 Oct 2013 04:33:47 -0700
> 
> > This series contains updates to ixgbevf, ixgbe and igb.
> > 
> > Don provides 3 patches for ixgbevf where he cleans up a redundant
> > read mailbox failure check, adds a new function to wait for receive
> > queues to be disabled before disabling NAPI, and move the API
> > negotiation so that it occurs in the reset path.  This will allow
> > the PF to be informed of the API version earlier.
> > 
> > Jacob provides a ixgbevf and ixgbe patch.  His ixgbevf patch removes
> > the use of hw_dbg when the ixgbe_get_regs function is called in ethtool.
> > The ixgbe patch renames the LL_EXTENDED_STATS and some of the functions
> > required to implement busy polling in order to remove the marketing
> > "low latency" blurb which hides what the code actually does.
> > 
> > Leonardo provides a ixgbe patch to add support for DCB registers dump
> > using ethtool for 82599 and x540 ethernet controllers.
> > 
> > I (Jeff) provide a ixgbe patch to cleanup whitespace issues seen in a
> > code review.
> > 
> > Todd provides for igb to add support for i354 in the ethtool offline
> > tests.
> > 
> > Laura provides an igb patch to add the ethtool callbacks necessary to
> > configure the number of RSS queues.
> 
> Pulled, thanks Jeff.
> 
> Please address Ben Hutching's concerns about the state of the device
> after a number of channels configuration failure with follow-on
> changes, if necessary.
> 
> Thanks.

Understood, will do.

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 33+ messages in thread

* [net-next 0/9][pull request] Intel Wired LAN Driver Updates
@ 2014-01-02  9:33 Jeff Kirsher
  2014-01-02 18:21 ` Ben Hutchings
  0 siblings, 1 reply; 33+ messages in thread
From: Jeff Kirsher @ 2014-01-02  9:33 UTC (permalink / raw)
  To: davem; +Cc: Jeff Kirsher, netdev, gospo, sassmann

This series contains updates to ixgbe, e1000e and igb.

Most notably is Mark Rustad's ixgbe patches to add the Live Error
Recovery option to ixgbe as well as additional cleanups to the driver.

The following are changes since commit fbe4d4565badba393a94927e16ae66654a025dca:
  tun, rfs: fix the incorrect hash value
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master

Jeff Kirsher (1):
  igb: make local functions static and remove dead code

Mark Rustad (6):
  ixgbe: Use static inlines instead of macros
  ixgbe: Make ethtool register test use accessors
  ixgbe: Check register reads for adapter removal
  ixgbe: Check for adapter removal on register writes
  ixgbe: Additional adapter removal checks
  ixgbe: Add Live Error Recovery configuration option

Tom Herbert (2):
  net: e1000e calls skb_set_hash
  net: igb calls skb_set_hash

 drivers/net/ethernet/intel/Kconfig               |  11 +++
 drivers/net/ethernet/intel/e1000e/netdev.c       |   2 +-
 drivers/net/ethernet/intel/igb/e1000_82575.c     |   4 +-
 drivers/net/ethernet/intel/igb/e1000_82575.h     |   2 -
 drivers/net/ethernet/intel/igb/e1000_i210.c      |  20 +++--
 drivers/net/ethernet/intel/igb/e1000_i210.h      |   9 --
 drivers/net/ethernet/intel/igb/e1000_phy.c       |  71 ----------------
 drivers/net/ethernet/intel/igb/e1000_phy.h       |   1 -
 drivers/net/ethernet/intel/igb/igb.h             |   2 -
 drivers/net/ethernet/intel/igb/igb_main.c        |   4 +-
 drivers/net/ethernet/intel/igb/igb_ptp.c         |   6 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe.h         |  11 +++
 drivers/net/ethernet/intel/ixgbe/ixgbe_common.h  |  58 ++++++++++---
 drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 102 +++++++++++++----------
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c    |  66 +++++++++++++--
 drivers/net/ethernet/intel/ixgbe/ixgbe_mbx.c     |   3 +-
 drivers/net/ethernet/intel/ixgbe/ixgbe_phy.c     |   2 +-
 17 files changed, 213 insertions(+), 161 deletions(-)

-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [net-next 0/9][pull request] Intel Wired LAN Driver Updates
  2014-01-02  9:33 Jeff Kirsher
@ 2014-01-02 18:21 ` Ben Hutchings
  2014-01-02 19:06   ` Rustad, Mark D
  0 siblings, 1 reply; 33+ messages in thread
From: Ben Hutchings @ 2014-01-02 18:21 UTC (permalink / raw)
  To: Jeff Kirsher; +Cc: davem, netdev, gospo, sassmann

On Thu, 2014-01-02 at 01:33 -0800, Jeff Kirsher wrote:
> This series contains updates to ixgbe, e1000e and igb.
> 
> Most notably is Mark Rustad's ixgbe patches to add the Live Error
> Recovery option to ixgbe as well as additional cleanups to the driver.
[...]

The Live Error Recovery option is pretty odd; it looks like a
combination of PCI hotplug and EEH.  Why is it not integrated with
either of those?

Ben.

-- 
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.

^ permalink raw reply	[flat|nested] 33+ messages in thread

* Re: [net-next 0/9][pull request] Intel Wired LAN Driver Updates
  2014-01-02 18:21 ` Ben Hutchings
@ 2014-01-02 19:06   ` Rustad, Mark D
  0 siblings, 0 replies; 33+ messages in thread
From: Rustad, Mark D @ 2014-01-02 19:06 UTC (permalink / raw)
  To: Ben Hutchings
  Cc: Kirsher, Jeffrey T, David Miller, <netdev@vger.kernel.org>,
	gospo@redhat.com, sassmann@redhat.com

[-- Attachment #1: Type: text/plain, Size: 1447 bytes --]

On Jan 2, 2014, at 10:21 AM, Ben Hutchings <bhutchings@solarflare.com> wrote:

> On Thu, 2014-01-02 at 01:33 -0800, Jeff Kirsher wrote:
>> This series contains updates to ixgbe, e1000e and igb.
>> 
>> Most notably is Mark Rustad's ixgbe patches to add the Live Error
>> Recovery option to ixgbe as well as additional cleanups to the driver.
> [...]
> 
> The Live Error Recovery option is pretty odd; it looks like a
> combination of PCI hotplug and EEH.  Why is it not integrated with
> either of those?

It certainly is related to both of those. The issue being addressed here is specific to this driver in that the driver can be the first to get a read return of all one’s when a device is suddenly removed. This code allows the driver to determine whether such a return is valid, or is a sign of the device having been removed. Without those checks, there are paths where the driver will crash in such a case. This code will race with hotplug, so it allows hotplug to drive the logical removal, but it makes the driver “safe” in the mean time.

Thanks for the comments. You are absolutely right about the need for ACCESS_ONCE and better Kconfig help text.

> Ben.
> 
> -- 
> Ben Hutchings, Staff Engineer, Solarflare
> Not speaking for my employer; that's the marketing department's job.
> They asked us to note that Solarflare product names are trademarked.

-- 
Mark Rustad, Networking Division, Intel Corporation


[-- Attachment #2: Message signed with OpenPGP using GPGMail --]
[-- Type: application/pgp-signature, Size: 841 bytes --]

^ permalink raw reply	[flat|nested] 33+ messages in thread

end of thread, other threads:[~2014-01-02 19:06 UTC | newest]

Thread overview: 33+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-16 22:48 [net-next 0/9][pull request] Intel Wired LAN Driver Updates Peter P Waskiewicz Jr
2012-08-16 22:48 ` [net-next 1/9] ixgbe: Remove code that was initializing Rx page offset Peter P Waskiewicz Jr
2012-08-16 22:48 ` [net-next 2/9] ixgbe: combine ixgbe_add_rx_frag and ixgbe_can_reuse_page Peter P Waskiewicz Jr
2012-08-16 22:48 ` [net-next 3/9] ixgbe: Only use double buffering if page size is less than 8K Peter P Waskiewicz Jr
2012-08-16 22:48 ` [net-next 4/9] ixgbe: Have the CPU take ownership of the buffers sooner Peter P Waskiewicz Jr
2012-08-16 22:48 ` [net-next 5/9] ixgbe: Make pull tail function separate from rest of cleanup_headers Peter P Waskiewicz Jr
2012-08-16 22:48 ` [net-next 6/9] ixgbe: Copybreak sooner to avoid get_page/put_page and offset change overhead Peter P Waskiewicz Jr
2012-08-16 22:48 ` [net-next 7/9] ixgbe: Make allocating skb and placing data in it a separate function Peter P Waskiewicz Jr
2012-08-16 22:48 ` [net-next 8/9] ixgbe: Roll RSC code into non-EOP code Peter P Waskiewicz Jr
2012-08-16 22:48 ` [net-next 9/9] ixgbe: Rewrite code related to configuring IFCS bit in Tx descriptor Peter P Waskiewicz Jr
2012-08-20  9:31 ` [net-next 0/9][pull request] Intel Wired LAN Driver Updates David Miller
  -- strict thread matches above, loose matches on Subject: below --
2014-01-02  9:33 Jeff Kirsher
2014-01-02 18:21 ` Ben Hutchings
2014-01-02 19:06   ` Rustad, Mark D
2013-10-01 11:33 Jeff Kirsher
2013-10-01 16:51 ` David Miller
2013-10-01 22:15   ` Jeff Kirsher
2013-09-04 13:08 Jeff Kirsher
2013-09-04 16:41 ` David Miller
2012-12-01 11:53 Jeff Kirsher
2012-12-01 16:29 ` David Miller
2012-11-15 14:39 Jeff Kirsher
2012-11-15 20:18 ` David Miller
2012-07-20  1:23 Jeff Kirsher
2012-07-20 18:13 ` David Miller
2012-07-18 20:31 Jeff Kirsher
2012-07-19 15:26 ` David Miller
2012-06-20  8:44 Jeff Kirsher
2012-06-20 22:26 ` David Miller
2012-06-09  8:20 Jeff Kirsher
2011-12-23  9:09 Jeff Kirsher
2011-10-06 11:02 Jeff Kirsher
2011-10-06 18:33 ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).