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

Tim Gardner tim.gardner at canonical.com
Wed Mar 17 14:22:31 UTC 2010


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.

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
-- 
Tim Gardner tim.gardner at canonical.com




More information about the kernel-team mailing list