Lucid pull request, igb: Add full support for 82580 devices

Stefan Bader stefan.bader at canonical.com
Wed Mar 17 15:28:19 UTC 2010


Tim Gardner wrote:
> On 03/17/2010 03:34 AM, Stefan Bader wrote:
>> Tim Gardner wrote:
>>> Andy,
>>>
>>> Please consider this wholesale backport of the Intel igb gigabit
>>> ethernet driver from 2.6.33.
>>> I've tested that it does not break existing igb support, at least on
>>> the one that I have:
>>>
>>> 01:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network
>>> Connection (rev 01)
>>>
>>> Here are the list of commits to drivers/net/igb from v2.6.32 to
>>> v2.6.33. All applied cleanly except for the
>>> few that I've commented out. They were global changes that also
>>> incidentally touched igb,
>>> but will have no impact on a 2.6.32. There have been no stable
>>> updates to date for igb in 2.6.33.
>>>
>>> cc9073bbc901a0b695c9c5966d65520c29af70af igb: remove unused temp
>>> variable from stats clearing path
>>> 70d92f86dc162fc24e13cd79fd3481ae39b66f72 igb: update comments for
>>> serdes config and update to handle duplex
>>> 008c3422d48b217792789bdea822dbc2efe2165c igb: update the approach
>>> taken to acquiring and releasing the phy lock
>>> bf6f7a928d313ddecb0a16ea60fa6b45ac1414a7 igb: add locking to reads of
>>> the i2c interface
>>> 26ad91783c489486d3fd1a6932e5bdab9d404a38 igb: add combined function
>>> for setting rar and pool bits
>>> 68d480c4defb69d834e75fd0be9069a8447afe36 igb: make use of the uta to
>>> allow for promiscous mode filter
>>> 747d49baaf4e3f4ad5ae77477830da026eeef69d igb: add support for 82576NS
>>> SerDes adapter
>>> 0acb6fde5fc84009be1c7efc0aaa8e69e394a2e2 igb: add function to handle
>>> mailbox lock
>>> 3272686c98da64d6eeaa2434782f42270b110758 igb: fix a few items where
>>> weren't correctly setup for mbx timeout
>>> 22896639af98ebc721a94ed71fc3acf2fb4a24dc igb: change how we handle
>>> alternate mac addresses
>>> 285b4167458ec7cc49008b2e61cbe0362deed335 igb: remove microwire
>>> support from igb
>>> 81fadd81a5bc897c8d0424d1cd90cb999d8e12b0 igb: move the generic copper
>>> link setup code into e1000_phy.c
>>> ab576389b733b458495529f81839f499b3fece78 igb: add code to retry a phy
>>> read in the event of failure on link check
>>> 2553bb2681645bf932db2845121b8f33954f6f39 igb: add additional error
>>> handling to the phy code
>>> 6deac6f2b46f84b8822683cce92eab4edf2ade5e igb: add flushes between RAR
>>> writes when setting mac address
>>> 8d24e93309d688d59d4b6cf0b9cffc40337e067d igb: Use the instance of
>>> net_device_stats from net_device.
>>> #89d71a66c40d629e3b1285def543ab1425558cd5 net: Use
>>> netdev_alloc_skb_ip_align()
>>> 231835e4163cf14c90e295f1729004f571ee1cc7 igb: Fix erroneous display
>>> of stats by ethtool -S
>>> 047e0030f1e601233ae5b03910602ec93c620bce igb: add new data structure
>>> for handling interrupts and NAPI
>>> 094919a4b0c56d6afbfb5ea14567fbb2f8d47554 igb: remove rx checksum good
>>> counter
>>> 7d95b7170eca3f95bad939fc9eb365b823c05e39 igb: increase minimum rx
>>> buffer size to 1K
>>> 85b430b47736d1f59e8f9efb0e47bc46aeb2b01d igb: move the tx and rx ring
>>> specific config into seperate functions
>>> 6ec43fe635fb5c96fbc0955b2794b74fee69b723 igb: remove rx_ps_hdr_len
>>> 952f72a8ceee3996ef8476a2f05ece1627080c20 igb: move SRRCTL register
>>> configuration into ring specific config
>>> fce99e341524c204ef3dd3e7c5f77265a7e05ddd igb: change the head and
>>> tail offsets into pointers
>>> 80785298aa5b6f2005a34afb97457ae7a65af270 igb: add pci device pointer
>>> to ring structure
>>> 4c844851d15cc08d995179ab5118172711be6eb0 igb: move rx_buffer_len into
>>> the ring structure
>>> 04a5fcaaf0e12d066411aa54e42591952aa18da7 igb: move alloc_failed and
>>> csum_err stats into per rx-ring stat
>>> 85ad76b2f9c4956ec90c86298b22bb35c326e772 igb: add a flags value to
>>> the ring
>>> e694e964fc1241b4981873bdccce70438d5f0394 igb: place a pointer to the
>>> netdev struct in the ring itself
>>> 06cf2666c7f5cc4ba4bf2687d041c61ada76fa3c igb: move the multiple
>>> receive queue configuration into seperate function
>>> d4960307ea63a5625a175cc2d7b192e68e6b4fba igb: delay VF reset
>>> notification until after interrupts are enabed
>>> 10d8e9073a320a1c9cc13f996bd600b477eb4872 igb: setup vlan tag
>>> replication stripping in igb_vmm_control
>>> d7ee5b3a78f57a8ca9ca2392ff5d03f91ec90bdb igb: re-use ring
>>> configuration code in ethtool testing
>>> b1a436c34c44c6e3fb03c12545d87b4c2818f31d igb: make tx ring map and
>>> free functionality non-static
>>> ad93d17efe063b6e95f3177fa01706f3b3b15dde igb: make ethtool use core
>>> xmit map and free functionality
>>> 4eefa8f0131410eddaca323cd65e1ebefe3b3328 igb: add single vector msi-x
>>> testing to interrupt test
>>> 83ab50a56e6ea94627fea83ce7b03332bd4c2f02 igb: cleanup "todo" code
>>> found in igb_ethtool.c
>>> 4fc82adfb01bdee79ec21e44557dc409ef31419a igb: add support for
>>> seperate tx-usecs setting in ethtool
>>> c5b9bd5e4f7caea10d113f610b85cc2093cc3179 igb: cleanup some of the
>>> code related to hw timestamping
>>> 317f66bdadc31f0c037b91ae7857f5c3d2a4e3e5 igb: misc cleanups within
>>> igb_ethtool.c
>>> d249be54745259980dcbd898bdfeb7307c9c5e10 igb: use packet buffer sizes
>>> from RXPBS register
>>> f2ca0dbe077389f061ffa15de9dd7fc96a5b97d2 igb: replace the VF
>>> clear_to_send with a flags value
>>> 7d5753f08c5be5440ac0385b5f2518d2630be7b7 igb: rework use of VMOLR in
>>> regards to PF and VFs
>>> 51466239fb9f95343e88c14475a0f99fe4882c54 igb: rework handling of the
>>> vfta and vlvf registers in relation to mng_vlan
>>> a6b623e0e5787ba5ffd2a3c4448ff6d1eaa904a9 igb: move vf init into a
>>> seperate function
>>> 3f9c01648146a256d8238292ac9c63fed7e00473 igb: only process global
>>> stats in igb_update_stats
>>> 4337e993e13eb2f2e05dd65a3ab25b57c2f89d56 igb: move global_quad_port_a
>>> from global into local static define
>>> f7ba205e823f32e634712323a221b42bfea06efa igb: make tx hang check
>>> multiqueue, check eop descriptor
>>> 439705e1d7281cc8a4631a2dc390df7ad868bad8 igb: cleanup code related to
>>> ring resource allocation and free
>>> ee1b9f06dca9c406b159904e9b13ea2dfa5ed037 igb: change queue ordering
>>> for 82576 based adapters
>>> 25568a531a1bc76fdf968382a4eb65a979186c67 igb: cleanup interrupt
>>> enablement in regards to msix_other
>>> 645a3abd73c2ac05d375f080d2f58d56e1502562 igb: Remove invalid stats
>>> counters
>>> 2e5655e758736488abbe9c024c8cda0e367214e5 igb: cleanup igb.h header
>>> whitespace and some structure formatting
>>> cdfd01fcc674cc1c0c7b54084d74c2b684bf67c2 igb: cleanup igb xmit frame
>>> path
>>> 42d0781a1337ec5624da0657ba57b734768f489c igb: cleanup
>>> clean_rx_irq_adv and alloc_rx_buffers_adv
>>> 330a6d6a7c75e11ca6da52092cfa96cda45d3386 igb: replace
>>> unecessary&adapter->hw with just hw where applicable
>>> 090b17952826eb3c5d712b6d4f90a292fe4acc93 igb: add pci_dev in few
>>> spots to clean up use of dev_err/info/warn
>>> c809d2276cb035228cd9e83e2ca7d2b902c61cef igb: limit minimum mtu to 68
>>> to keep ip bound to interface
>>> 5b043fb08e1b9e10eef7cc41512462f99811e96e igb: open up SCTP checksum
>>> offloads to all MACs 82576 and newer
>>> 559e9c4987e90e278db347b0a2ba423e7e496fd3 igb: cleanup whitespace
>>> issues in igb_main.c
>>> d6b9076f1b5dd22b63f0178923f420f4e0f81a8d igb: Fix warnings in
>>> igb_set_ringparam()
>>> 0e15439ae5fefe438056a26a00aa3c6a9de454e9 igb: change type for ring
>>> sizes to u16 in igb_set_ring_param
>>> 115f459a53b0c56a699a76b34b82507452eb3df5 igb: move timesync init into
>>> a seperate function
>>> a99955fc067f57cf3b627d4c74bf7952a2d51029 igb: when number of CPUs>  4
>>> combine tx/rx queues to allow more queues
>>> 128e45eb61b90c0c3094139cab6d00f67ff31377 igb: Rework how
>>> netdev->stats is handled
>>> 971d1d3a7e9f03af870909fddfc3b2fc08e4f5b1 igb: removed unused tx/rx
>>> total bytes/packets from adapter struct
>>> dbabb065802a46d64b8869ba97674bfa90b55d83 igb: check for packets on
>>> all tx rings when link is down
>>> d1eff35061b9346cb9bef2b79d9d99c8c096df13 igb: only recycle page if it
>>> is on our numa node
>>> #a0607fd3a25ba1848a63a0d925e36d914735ab47 drivers/net: request_irq -
>>> Remove unnecessary leading&  from second arg
>>> 2909c3f79d933b55bf2485addb1dca762210b6af igb: add support for the
>>> 82580 phy
>>> bb2ac47bcfd47ed9431ff1676ec8d79250c941c9 igb: add support for 82580 MAC
>>> 55cac248caa4a5f181a11cd2f269a672bef3d3b5 igb: Add full support for
>>> 82580 devices
>>> 6366ad331f436388129dfc044db871de79604e4d igb: remove use of
>>> skb_dma_map from driver
>>> #8e95a2026f3b43f7c3d676adaccd2de9532e8dcc drivers/net: Move&&  and ||
>>> to end of previous line
>>> fef45f4ce221fc110f70716a00f40be697c5b254 igb: fix handling of mailbox
>>> collisions between PF/VF
>>> d68caec645b4b92f6a81985265b024bc94bce41f igb: do not force pcs link
>>> when in KX mode
>>> 8c6af2995c14e71558c312b86955ae32272a03d8 igb: do not force retry
>>> count to 1 on 82580 phy
>>> d405ea3ef2499eb46834418a643973c884ff7f30 igb: correctly offset 82575
>>> flow control watermarks by 16 bytes
>>> 58b8b042509f53955ba660a4245e221c5405f124 igb: check both function
>>> bits in status register in wol exception
>>> #8581145f39c39b00cd1b6a2dcb4ce5bf7d8d6070 igb/igbvf: cleanup
>>> exception handling in tx_map_adv
>>> #8e1e8a4779cb23c1d9f51e9223795e07ec54d77a net: Fix IPv6 GSO type
>>> checks in Intel ethernet drivers
>>> feeb2721a7a0bd0cfa5b8847f80aec93aa2cc00d igb: make certain to
>>> reassign legacy interrupt vectors after reset
>>>
>>> rtg
>>> ---
>>> The following changes since commit
>>> 70257c6ad432da472ac8a0fac4c4cc6a9774850b:
>>>    Marcel Holtmann (1):
>>>          (pre-stable) Bluetooth: Fix sleeping function in RFCOMM
>>> within invalid context
>>>
>>> are available in the git repository at:
>>>
>>>    git://kernel.ubuntu.com/rtg/ubuntu-lucid.git lp485577-igb
>>>
>>> Ajit Khaparde (2):
>>>        igb: Use the instance of net_device_stats from net_device.
>>>        igb: Fix erroneous display of stats by ethtool -S
>>>
>>> Alexander Duyck (75):
>>>        igb: remove unused temp variable from stats clearing path
>>>        igb: update comments for serdes config and update to handle
>>> duplex
>>>        igb: update the approach taken to acquiring and releasing the
>>> phy lock
>>>        igb: add locking to reads of the i2c interface
>>>        igb: add combined function for setting rar and pool bits
>>>        igb: make use of the uta to allow for promiscous mode filter
>>>        igb: add support for 82576NS SerDes adapter
>>>        igb: add function to handle mailbox lock
>>>        igb: fix a few items where weren't correctly setup for mbx
>>> timeout
>>>        igb: change how we handle alternate mac addresses
>>>        igb: remove microwire support from igb
>>>        igb: move the generic copper link setup code into e1000_phy.c
>>>        igb: add code to retry a phy read in the event of failure on
>>> link check
>>>        igb: add additional error handling to the phy code
>>>        igb: add flushes between RAR writes when setting mac address
>>>        igb: add new data structure for handling interrupts and NAPI
>>>        igb: remove rx checksum good counter
>>>        igb: increase minimum rx buffer size to 1K
>>>        igb: move the tx and rx ring specific config into seperate
>>> functions
>>>        igb: remove rx_ps_hdr_len
>>>        igb: move SRRCTL register configuration into ring specific config
>>>        igb: change the head and tail offsets into pointers
>>>        igb: add pci device pointer to ring structure
>>>        igb: move rx_buffer_len into the ring structure
>>>        igb: move alloc_failed and csum_err stats into per rx-ring stat
>>>        igb: add a flags value to the ring
>>>        igb: place a pointer to the netdev struct in the ring itself
>>>        igb: move the multiple receive queue configuration into
>>> seperate function
>>>        igb: delay VF reset notification until after interrupts are
>>> enabed
>>>        igb: setup vlan tag replication stripping in igb_vmm_control
>>>        igb: re-use ring configuration code in ethtool testing
>>>        igb: make tx ring map and free functionality non-static
>>>        igb: make ethtool use core xmit map and free functionality
>>>        igb: add single vector msi-x testing to interrupt test
>>>        igb: cleanup "todo" code found in igb_ethtool.c
>>>        igb: add support for seperate tx-usecs setting in ethtool
>>>        igb: cleanup some of the code related to hw timestamping
>>>        igb: misc cleanups within igb_ethtool.c
>>>        igb: use packet buffer sizes from RXPBS register
>>>        igb: replace the VF clear_to_send with a flags value
>>>        igb: rework use of VMOLR in regards to PF and VFs
>>>        igb: rework handling of the vfta and vlvf registers in
>>> relation to mng_vlan
>>>        igb: move vf init into a seperate function
>>>        igb: only process global stats in igb_update_stats
>>>        igb: move global_quad_port_a from global into local static define
>>>        igb: make tx hang check multiqueue, check eop descriptor
>>>        igb: cleanup code related to ring resource allocation and free
>>>        igb: change queue ordering for 82576 based adapters
>>>        igb: cleanup interrupt enablement in regards to msix_other
>>>        igb: Remove invalid stats counters
>>>        igb: cleanup igb.h header whitespace and some structure
>>> formatting
>>>        igb: cleanup igb xmit frame path
>>>        igb: cleanup clean_rx_irq_adv and alloc_rx_buffers_adv
>>>        igb: replace unecessary&adapter->hw with just hw where applicable
>>>        igb: add pci_dev in few spots to clean up use of
>>> dev_err/info/warn
>>>        igb: limit minimum mtu to 68 to keep ip bound to interface
>>>        igb: open up SCTP checksum offloads to all MACs 82576 and newer
>>>        igb: cleanup whitespace issues in igb_main.c
>>>        igb: change type for ring sizes to u16 in igb_set_ring_param
>>>        igb: move timesync init into a seperate function
>>>        igb: when number of CPUs>  4 combine tx/rx queues to allow
>>> more queues
>>>        igb: Rework how netdev->stats is handled
>>>        igb: removed unused tx/rx total bytes/packets from adapter struct
>>>        igb: check for packets on all tx rings when link is down
>>>        igb: only recycle page if it is on our numa node
>>>        igb: add support for the 82580 phy
>>>        igb: add support for 82580 MAC
>>>        igb: Add full support for 82580 devices
>>>        igb: remove use of skb_dma_map from driver
>>>        igb: fix handling of mailbox collisions between PF/VF
>>>        igb: do not force pcs link when in KX mode
>>>        igb: do not force retry count to 1 on 82580 phy
>>>        igb: correctly offset 82575 flow control watermarks by 16 bytes
>>>        igb: check both function bits in status register in wol exception
>>>        igb: make certain to reassign legacy interrupt vectors after
>>> reset
>>>
>>> David S. Miller (1):
>>>        igb: Fix warnings in igb_set_ringparam()
>>>
>>>   drivers/net/igb/e1000_82575.c   |  570 +++++---
>>>   drivers/net/igb/e1000_82575.h   |   32 +
>>>   drivers/net/igb/e1000_defines.h |   50 +-
>>>   drivers/net/igb/e1000_hw.h      |   22 +-
>>>   drivers/net/igb/e1000_mac.c     |  100 +-
>>>   drivers/net/igb/e1000_mbx.c     |   82 +-
>>>   drivers/net/igb/e1000_mbx.h     |   10 +-
>>>   drivers/net/igb/e1000_nvm.c     |   36 +-
>>>   drivers/net/igb/e1000_phy.c     |  444 +++++-
>>>   drivers/net/igb/e1000_phy.h     |   37 +-
>>>   drivers/net/igb/e1000_regs.h    |   80 +-
>>>   drivers/net/igb/igb.h           |  149 +-
>>>   drivers/net/igb/igb_ethtool.c   |  745 +++++----
>>>   drivers/net/igb/igb_main.c      | 3461
>>> ++++++++++++++++++++++-----------------
>>>   14 files changed, 3517 insertions(+), 2301 deletions(-)
>>>
>> Frankly, this just looks to intrusive to be called a bug fix. And it
>> heavily
>> modifies an existing driver. Plus we really have feature freeze now.
>> So NAK from me here for the main kernel. I would much more prefer this
>> to be LBM.
>>
>> Stefan
>>
> 
> This is about server enablement, so of course its not a bug fix. I
> realize I'm abusing the freeze policy (I ought to have done this a
> couple of weeks ago). This patch allows us to enable servers using a
> very popular chipset in the window between Lucid release and the first
> Lucid point release (which will have the L+1 backported kernel). It only
> affects one driver, which is now identical (with minor syntactic
> exceptions) to the upstream 2.6.33 driver, making it very easy to
> maintain with respect to upstream stable.

IF this is very important for our server enablement focus (and because those
often need the network driver available in-kernel for netboot), I am
re-considering. Also because this is really limited to that single driver module
and you say you verified older hardware... But this is a very struggled exception.

Acked-by: Stefan Bader <stefan.bader at canonical.com>

> Obviously I consider gigabit ethernet support pretty important (remember
> sfc?), so I'm willing to take the risk and the responsibility.
> 
> Andy - I've refreshed the branch after doing a careful comparison with
> upstream. I noticed one patch that I needed to include, or at least part
> of it:
> 
> igb/igbvf: cleanup exception handling in tx_map_adv
> 
> I've also fixed an upstream logic flaw that emits a 'may be used
> uninitialized' warning. I'll check to see if it still exists in 2.6.34.
> 
> I totally spaced off the '-x' upstream commit when cherry-picking. I'll
> redo the whole mess if you deem it important.
> 
> rtg





More information about the kernel-team mailing list