[kernel] r14241 - in dists/sid/linux-2.6/debian: . patches/bugfix/all patches/series
Ben Hutchings
benh at alioth.debian.org
Tue Sep 15 13:04:20 UTC 2009
Author: benh
Date: Tue Sep 15 13:04:18 2009
New Revision: 14241
Log:
e1000, e1000e, igb, ixgb, ixgbe, sfc: Fix initial link state (Closes: #546041)
Added:
dists/sid/linux-2.6/debian/patches/bugfix/all/drivers-net-intel-fix-initial-link-state.patch
dists/sid/linux-2.6/debian/patches/bugfix/all/drivers-net-sfc-fix-initial-link-state.patch
Modified:
dists/sid/linux-2.6/debian/changelog
dists/sid/linux-2.6/debian/patches/series/7
Modified: dists/sid/linux-2.6/debian/changelog
==============================================================================
--- dists/sid/linux-2.6/debian/changelog Tue Sep 15 12:56:13 2009 (r14240)
+++ dists/sid/linux-2.6/debian/changelog Tue Sep 15 13:04:18 2009 (r14241)
@@ -19,6 +19,8 @@
* x86, pat: Allow ISA memory range uncacheable mapping requests
(Closes: #538159)
* proc: Fix idle time in /proc/uptime (Closes: #545981)
+ * e1000, e1000e, igb, ixgb, ixgbe, sfc: Fix initial link state
+ (Closes: #546041)
[ Bastian Blank ]
* Add stable release 2.6.30.5.
Added: dists/sid/linux-2.6/debian/patches/bugfix/all/drivers-net-intel-fix-initial-link-state.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/bugfix/all/drivers-net-intel-fix-initial-link-state.patch Tue Sep 15 13:04:18 2009 (r14241)
@@ -0,0 +1,312 @@
+From eb62efd287fe6e12d18083287e38e4a811c28256 Mon Sep 17 00:00:00 2001
+From: Jesse Brandeburg <jesse.brandeburg at intel.com>
+Date: Fri, 17 Apr 2009 20:44:36 +0000
+Subject: [PATCH] e1000: init link state correctly
+
+As reported by Andrew Lutomirski <amluto at gmail.com>
+
+All the intel wired ethernet drivers were calling netif_carrier_off
+and netif_stop_queue (or variants) before calling register_netdevice
+
+This is incorrect behavior as was pointed out by davem, and causes
+ifconfig and friends to report a strange state before first link
+after the driver was loaded.
+
+This apparently confused *some* versions of networkmanager.
+
+Andy tested this for e1000e and confirmed it was working for him.
+
+Signed-off-by: Jesse Brandeburg <jesse.brandeburg at intel.com>
+Reported-by: Andrew Lutomirski <amluto at gmail.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher at intel.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+ drivers/net/e1000/e1000_main.c | 9 +++++----
+ 1 files changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/e1000/e1000_main.c b/drivers/net/e1000/e1000_main.c
+index ef12931..9bdcf4d 100644
+--- a/drivers/net/e1000/e1000_main.c
++++ b/drivers/net/e1000/e1000_main.c
+@@ -1234,15 +1234,14 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
+ !e1000_check_mng_mode(hw))
+ e1000_get_hw_control(adapter);
+
+- /* tell the stack to leave us alone until e1000_open() is called */
+- netif_carrier_off(netdev);
+- netif_stop_queue(netdev);
+-
+ strcpy(netdev->name, "eth%d");
+ err = register_netdev(netdev);
+ if (err)
+ goto err_register;
+
++ /* carrier off reporting is important to ethtool even BEFORE open */
++ netif_carrier_off(netdev);
++
+ DPRINTK(PROBE, INFO, "Intel(R) PRO/1000 Network Connection\n");
+
+ cards_found++;
+@@ -1441,6 +1440,8 @@ static int e1000_open(struct net_device *netdev)
+ if (test_bit(__E1000_TESTING, &adapter->flags))
+ return -EBUSY;
+
++ netif_carrier_off(netdev);
++
+ /* allocate transmit descriptors */
+ err = e1000_setup_all_tx_resources(adapter);
+ if (err)
+--
+1.6.3.3
+
+From 9c563d20671e5fbe3045fd79c18b306ccb77b0b6 Mon Sep 17 00:00:00 2001
+From: Jesse Brandeburg <jesse.brandeburg at intel.com>
+Date: Fri, 17 Apr 2009 20:44:34 +0000
+Subject: [PATCH] e1000e: indicate link down at load
+
+As reported by Andrew Lutomirski <amluto at gmail.com>
+
+All the intel wired ethernet drivers were calling netif_carrier_off
+and netif_stop_queue (or variants) before calling register_netdevice
+
+This is incorrect behavior as was pointed out by davem, and causes
+ifconfig and friends to report a strange state before first link
+after the driver was loaded, since without a netif_carrier_off, the stack
+assumes carrier_on, but before register_netdev, netlink messages are not
+sent out telling link state.
+
+This apparently confused *some* versions of networkmanager.
+
+Andy tested this for e1000e and confirmed it was working for him.
+
+see thread: http://marc.info/?l=linux-netdev&m=123946479705636&w=2
+
+Signed-off-by: Jesse Brandeburg <jesse.brandeburg at intel.com>
+Tested-by: Andy Lutomirski <amluto at gmail.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher at intel.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+ drivers/net/e1000e/netdev.c | 9 +++++----
+ 1 files changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c
+index 1693ed1..c0ff550 100644
+--- a/drivers/net/e1000e/netdev.c
++++ b/drivers/net/e1000e/netdev.c
+@@ -3072,6 +3072,8 @@ static int e1000_open(struct net_device *netdev)
+ if (test_bit(__E1000_TESTING, &adapter->state))
+ return -EBUSY;
+
++ netif_carrier_off(netdev);
++
+ /* allocate transmit descriptors */
+ err = e1000e_setup_tx_resources(adapter);
+ if (err)
+@@ -5037,15 +5039,14 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
+ if (!(adapter->flags & FLAG_HAS_AMT))
+ e1000_get_hw_control(adapter);
+
+- /* tell the stack to leave us alone until e1000_open() is called */
+- netif_carrier_off(netdev);
+- netif_tx_stop_all_queues(netdev);
+-
+ strcpy(netdev->name, "eth%d");
+ err = register_netdev(netdev);
+ if (err)
+ goto err_register;
+
++ /* carrier off reporting is important to ethtool even BEFORE open */
++ netif_carrier_off(netdev);
++
+ e1000_print_device_info(adapter);
+
+ return 0;
+--
+1.6.3.3
+
+From b168dfc51604ec293db16dc4d558043585578a2d Mon Sep 17 00:00:00 2001
+From: Jesse Brandeburg <jesse.brandeburg at intel.com>
+Date: Fri, 17 Apr 2009 20:44:32 +0000
+Subject: [PATCH] igb: fix link down inital state
+
+As reported by Andrew Lutomirski <amluto at gmail.com>
+
+All the intel wired ethernet drivers were calling netif_carrier_off
+and netif_stop_queue (or variants) before calling register_netdevice
+
+This is incorrect behavior as was pointed out by davem, and causes
+ifconfig and friends to report a strange state before first link
+after the driver was loaded, since without a netif_carrier_off, the stack
+assumes carrier_on, but before register_netdev, netlink messages are not
+sent out telling link state.
+
+This apparently confused *some* versions of networkmanager.
+
+Signed-off-by: Jesse Brandeburg <jesse.brandeburg at intel.com>
+Reported-by: Andrew Lutomirski <amluto at gmail.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher at intel.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+ drivers/net/igb/igb_main.c | 9 +++++----
+ 1 files changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c
+index 08c8014..ceaa585 100644
+--- a/drivers/net/igb/igb_main.c
++++ b/drivers/net/igb/igb_main.c
+@@ -1442,15 +1442,14 @@ static int __devinit igb_probe(struct pci_dev *pdev,
+ * driver. */
+ igb_get_hw_control(adapter);
+
+- /* tell the stack to leave us alone until igb_open() is called */
+- netif_carrier_off(netdev);
+- netif_tx_stop_all_queues(netdev);
+-
+ strcpy(netdev->name, "eth%d");
+ err = register_netdev(netdev);
+ if (err)
+ goto err_register;
+
++ /* carrier off reporting is important to ethtool even BEFORE open */
++ netif_carrier_off(netdev);
++
+ #ifdef CONFIG_IGB_DCA
+ if (dca_add_requester(&pdev->dev) == 0) {
+ adapter->flags |= IGB_FLAG_DCA_ENABLED;
+@@ -1699,6 +1698,8 @@ static int igb_open(struct net_device *netdev)
+ if (test_bit(__IGB_TESTING, &adapter->state))
+ return -EBUSY;
+
++ netif_carrier_off(netdev);
++
+ /* allocate transmit descriptors */
+ err = igb_setup_all_tx_resources(adapter);
+ if (err)
+--
+1.6.3.3
+
+From 3a6d1bc4163fee27c312184d5f1a9cc1e110d300 Mon Sep 17 00:00:00 2001
+From: Jesse Brandeburg <jesse.brandeburg at intel.com>
+Date: Fri, 17 Apr 2009 20:44:29 +0000
+Subject: [PATCH] ixgb: fix link down initial state
+
+As reported by Andrew Lutomirski <amluto at gmail.com>
+
+All the intel wired ethernet drivers were calling netif_carrier_off
+and netif_stop_queue (or variants) before calling register_netdevice
+
+This is incorrect behavior as was pointed out by davem, and causes
+ifconfig and friends to report a strange state before first link
+after the driver was loaded, since without a netif_carrier_off, the stack
+assumes carrier_on, but before register_netdev, netlink messages are not
+sent out telling link state.
+
+This apparently confused *some* versions of networkmanager.
+
+in addition this driver appeared to need a netif_start_queue at
+the end of open.
+
+Signed-off-by: Jesse Brandeburg <jesse.brandeburg at intel.com>
+Reported-by: Andrew Lutomirski <amluto at gmail.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher at intel.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+ drivers/net/ixgb/ixgb_main.c | 8 +++++---
+ 1 files changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/net/ixgb/ixgb_main.c b/drivers/net/ixgb/ixgb_main.c
+index 4a0826b..ff741ca 100644
+--- a/drivers/net/ixgb/ixgb_main.c
++++ b/drivers/net/ixgb/ixgb_main.c
+@@ -471,10 +471,8 @@ ixgb_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ if (err)
+ goto err_register;
+
+- /* we're going to reset, so assume we have no link for now */
+-
++ /* carrier off reporting is important to ethtool even BEFORE open */
+ netif_carrier_off(netdev);
+- netif_stop_queue(netdev);
+
+ DPRINTK(PROBE, INFO, "Intel(R) PRO/10GbE Network Connection\n");
+ ixgb_check_options(adapter);
+@@ -592,6 +590,8 @@ ixgb_open(struct net_device *netdev)
+ if (err)
+ goto err_setup_tx;
+
++ netif_carrier_off(netdev);
++
+ /* allocate receive descriptors */
+
+ err = ixgb_setup_rx_resources(adapter);
+@@ -602,6 +602,8 @@ ixgb_open(struct net_device *netdev)
+ if (err)
+ goto err_up;
+
++ netif_start_queue(netdev);
++
+ return 0;
+
+ err_up:
+--
+1.6.3.3
+
+From 5438646724c34c2180664a57f862a1da8dd21db1 Mon Sep 17 00:00:00 2001
+From: Jesse Brandeburg <jesse.brandeburg at intel.com>
+Date: Fri, 17 Apr 2009 20:44:27 +0000
+Subject: [PATCH] ixgbe: fix link down initial state
+
+As reported by Andrew Lutomirski <amluto at gmail.com>
+
+All the intel wired ethernet drivers were calling netif_carrier_off
+and netif_stop_queue (or variants) before calling register_netdevice
+
+This is incorrect behavior as was pointed out by davem, and causes
+ifconfig and friends to report a strange state before first link
+after the driver was loaded, since without a netif_carrier_off, the stack
+assumes carrier_on, but before register_netdev, netlink messages are not
+sent out telling link state.
+
+This apparently confused *some* versions of networkmanager.
+
+Signed-off-by: Jesse Brandeburg <jesse.brandeburg at intel.com>
+Reported-by: Andrew Lutomirski <amluto at gmail.com>
+Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher at intel.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+ drivers/net/ixgbe/ixgbe_main.c | 7 +++++--
+ 1 files changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
+index 0d9a3ac..d5d9589 100644
+--- a/drivers/net/ixgbe/ixgbe_main.c
++++ b/drivers/net/ixgbe/ixgbe_main.c
+@@ -3459,6 +3459,8 @@ static int ixgbe_open(struct net_device *netdev)
+ if (test_bit(__IXGBE_TESTING, &adapter->state))
+ return -EBUSY;
+
++ netif_carrier_off(netdev);
++
+ /* allocate transmit descriptors */
+ err = ixgbe_setup_all_tx_resources(adapter);
+ if (err)
+@@ -4772,13 +4774,14 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
+ /* reset the hardware with the new settings */
+ hw->mac.ops.start_hw(hw);
+
+- netif_carrier_off(netdev);
+-
+ strcpy(netdev->name, "eth%d");
+ err = register_netdev(netdev);
+ if (err)
+ goto err_register;
+
++ /* carrier off reporting is important to ethtool even BEFORE open */
++ netif_carrier_off(netdev);
++
+ #ifdef CONFIG_IXGBE_DCA
+ if (dca_add_requester(&pdev->dev) == 0) {
+ adapter->flags |= IXGBE_FLAG_DCA_ENABLED;
+--
+1.6.3.3
+
Added: dists/sid/linux-2.6/debian/patches/bugfix/all/drivers-net-sfc-fix-initial-link-state.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/bugfix/all/drivers-net-sfc-fix-initial-link-state.patch Tue Sep 15 13:04:18 2009 (r14241)
@@ -0,0 +1,72 @@
+From aed0628dae0c26b47d40d65f942abe30279b52a5 Mon Sep 17 00:00:00 2001
+From: Ben Hutchings <bhutchings at solarflare.com>
+Date: Wed, 26 Aug 2009 08:16:27 +0000
+Subject: [PATCH] sfc: Fix ordering of device registration and initial netif_carrier_off()
+
+We must call netif_carrier_off() after the device is registered, not
+before, to set the operational state and user-space IFF_RUNNING flag
+correctly.
+
+Since we don't want observers to see an intermediate state, open-code
+register_netdev() and add efx_update_name() and netif_carrier_off()
+into the locked region.
+
+Signed-off-by: Ben Hutchings <bhutchings at solarflare.com>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+---
+ drivers/net/sfc/efx.c | 26 +++++++++++++++++---------
+ 1 files changed, 17 insertions(+), 9 deletions(-)
+
+diff --git a/drivers/net/sfc/efx.c b/drivers/net/sfc/efx.c
+index 343e8da..d4dc920 100644
+--- a/drivers/net/sfc/efx.c
++++ b/drivers/net/sfc/efx.c
+@@ -1614,21 +1614,24 @@ static int efx_register_netdev(struct efx_nic *efx)
+ SET_NETDEV_DEV(net_dev, &efx->pci_dev->dev);
+ SET_ETHTOOL_OPS(net_dev, &efx_ethtool_ops);
+
+- /* Always start with carrier off; PHY events will detect the link */
+- netif_carrier_off(efx->net_dev);
+-
+ /* Clear MAC statistics */
+ efx->mac_op->update_stats(efx);
+ memset(&efx->mac_stats, 0, sizeof(efx->mac_stats));
+
+- rc = register_netdev(net_dev);
+- if (rc) {
+- EFX_ERR(efx, "could not register net dev\n");
+- return rc;
+- }
+-
+ rtnl_lock();
++
++ rc = dev_alloc_name(net_dev, net_dev->name);
++ if (rc < 0)
++ goto fail_locked;
+ efx_update_name(efx);
++
++ rc = register_netdevice(net_dev);
++ if (rc)
++ goto fail_locked;
++
++ /* Always start with carrier off; PHY events will detect the link */
++ netif_carrier_off(efx->net_dev);
++
+ rtnl_unlock();
+
+ rc = device_create_file(&efx->pci_dev->dev, &dev_attr_phy_type);
+@@ -1639,6 +1642,11 @@ static int efx_register_netdev(struct efx_nic *efx)
+
+ return 0;
+
++fail_locked:
++ rtnl_unlock();
++ EFX_ERR(efx, "could not register net dev\n");
++ return rc;
++
+ fail_registered:
+ unregister_netdev(net_dev);
+ return rc;
+--
+1.6.3.3
+
Modified: dists/sid/linux-2.6/debian/patches/series/7
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/7 Tue Sep 15 12:56:13 2009 (r14240)
+++ dists/sid/linux-2.6/debian/patches/series/7 Tue Sep 15 13:04:18 2009 (r14241)
@@ -19,3 +19,5 @@
+ bugfix/all/stable/2.6.30.6.patch
+ bugfix/x86/x86-pat-allow-isa-memory-uncacheable-mapping.patch
+ bugfix/all/fix-proc-uptime-idle-time.patch
++ bugfix/all/drivers-net-intel-fix-initial-link-state.patch
++ bugfix/all/drivers-net-sfc-fix-initial-link-state.patch
More information about the Kernel-svn-changes
mailing list