]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ixgbe: call ndo_stop() instead of dev_close() when running offline selftest
authorStefan Assmann <sassmann@kpanic.de>
Wed, 3 Feb 2016 08:20:48 +0000 (09:20 +0100)
committerChuck Anderson <chuck.anderson@oracle.com>
Wed, 6 Jul 2016 23:40:57 +0000 (16:40 -0700)
Orabug: 23177316

Calling dev_close() causes IFF_UP to be cleared which will remove the
interfaces routes and some addresses. That's probably not what the user
intended when running the offline selftest. Besides this does not happen
if the interface is brought down before the test, so the current
behaviour is inconsistent.
Instead call the net_device_ops ndo_stop function directly and avoid
touching IFF_UP at all.

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
(cherry picked from commit 6c211fe1e71e2bf7baa45a78ac5358a1f45a7fe9)
Signed-off-by: Brian Maly <brian.maly@oracle.com>
drivers/net/ethernet/intel/ixgbe/ixgbe.h
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index cf84571980fd324dfb81cab2ff65002ec9e3a180..50d349d6fb15a6b88690fd3e32801806a69b83c8 100644 (file)
@@ -873,6 +873,8 @@ extern const char ixgbe_driver_version[];
 extern char ixgbe_default_device_descr[];
 #endif /* IXGBE_FCOE */
 
+int ixgbe_open(struct net_device *netdev);
+int ixgbe_close(struct net_device *netdev);
 void ixgbe_up(struct ixgbe_adapter *adapter);
 void ixgbe_down(struct ixgbe_adapter *adapter);
 void ixgbe_reinit_locked(struct ixgbe_adapter *adapter);
index b9eec25cbe4b6aded82dc49b1893b30b39d26b5d..3f1c5b4a0e35ccb64ed2e10011006f8abc40d03e 100644 (file)
@@ -2056,7 +2056,7 @@ static void ixgbe_diag_test(struct net_device *netdev,
 
                if (if_running)
                        /* indicate we're in test mode */
-                       dev_close(netdev);
+                       ixgbe_close(netdev);
                else
                        ixgbe_reset(adapter);
 
@@ -2094,7 +2094,7 @@ skip_loopback:
                /* clear testing bit and return adapter to previous state */
                clear_bit(__IXGBE_TESTING, &adapter->state);
                if (if_running)
-                       dev_open(netdev);
+                       ixgbe_open(netdev);
                else if (hw->mac.ops.disable_tx_laser)
                        hw->mac.ops.disable_tx_laser(hw);
        } else {
index ad82a3a0c82d8f6c4341b3187f0355f2e29c9254..b0a9e60faf8a31c19a663d2891af0b5116daffc1 100644 (file)
@@ -5981,7 +5981,7 @@ static int ixgbe_change_mtu(struct net_device *netdev, int new_mtu)
  * handler is registered with the OS, the watchdog timer is started,
  * and the stack is notified that the interface is ready.
  **/
-static int ixgbe_open(struct net_device *netdev)
+int ixgbe_open(struct net_device *netdev)
 {
        struct ixgbe_adapter *adapter = netdev_priv(netdev);
        struct ixgbe_hw *hw = &adapter->hw;
@@ -6081,7 +6081,7 @@ static void ixgbe_close_suspend(struct ixgbe_adapter *adapter)
  * needs to be disabled.  A global MAC reset is issued to stop the
  * hardware, and all transmit and receive resources are freed.
  **/
-static int ixgbe_close(struct net_device *netdev)
+int ixgbe_close(struct net_device *netdev)
 {
        struct ixgbe_adapter *adapter = netdev_priv(netdev);