aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Assmann <sassmann@kpanic.de>2016-02-03 03:20:49 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2016-03-30 01:45:04 -0400
commit324d086709978fce1671ba04087bf90865b04398 (patch)
tree7a6ca2a5f2e9aa320a54ee605df0ce7501812b96
parent6c211fe1e71e2bf7baa45a78ac5358a1f45a7fe9 (diff)
ixgbevf: call ndo_stop() instead of dev_close() when running offline selftest
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>
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/ethtool.c4
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/ixgbevf.h2
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c4
3 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/ethernet/intel/ixgbevf/ethtool.c b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
index c48aef613b0a..d7aa4b203f40 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ethtool.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ethtool.c
@@ -680,7 +680,7 @@ static void ixgbevf_diag_test(struct net_device *netdev,
680 680
681 if (if_running) 681 if (if_running)
682 /* indicate we're in test mode */ 682 /* indicate we're in test mode */
683 dev_close(netdev); 683 ixgbevf_close(netdev);
684 else 684 else
685 ixgbevf_reset(adapter); 685 ixgbevf_reset(adapter);
686 686
@@ -692,7 +692,7 @@ static void ixgbevf_diag_test(struct net_device *netdev,
692 692
693 clear_bit(__IXGBEVF_TESTING, &adapter->state); 693 clear_bit(__IXGBEVF_TESTING, &adapter->state);
694 if (if_running) 694 if (if_running)
695 dev_open(netdev); 695 ixgbevf_open(netdev);
696 } else { 696 } else {
697 hw_dbg(&adapter->hw, "online testing starting\n"); 697 hw_dbg(&adapter->hw, "online testing starting\n");
698 /* Online tests */ 698 /* Online tests */
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
index 68ec7daa04fd..991eeae81473 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf.h
@@ -486,6 +486,8 @@ extern const struct ixgbe_mbx_operations ixgbevf_mbx_ops;
486extern const char ixgbevf_driver_name[]; 486extern const char ixgbevf_driver_name[];
487extern const char ixgbevf_driver_version[]; 487extern const char ixgbevf_driver_version[];
488 488
489int ixgbevf_open(struct net_device *netdev);
490int ixgbevf_close(struct net_device *netdev);
489void ixgbevf_up(struct ixgbevf_adapter *adapter); 491void ixgbevf_up(struct ixgbevf_adapter *adapter);
490void ixgbevf_down(struct ixgbevf_adapter *adapter); 492void ixgbevf_down(struct ixgbevf_adapter *adapter);
491void ixgbevf_reinit_locked(struct ixgbevf_adapter *adapter); 493void ixgbevf_reinit_locked(struct ixgbevf_adapter *adapter);
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
index 0ea14c0a2e74..6a337bbf6820 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
@@ -3122,7 +3122,7 @@ static void ixgbevf_free_all_rx_resources(struct ixgbevf_adapter *adapter)
3122 * handler is registered with the OS, the watchdog timer is started, 3122 * handler is registered with the OS, the watchdog timer is started,
3123 * and the stack is notified that the interface is ready. 3123 * and the stack is notified that the interface is ready.
3124 **/ 3124 **/
3125static int ixgbevf_open(struct net_device *netdev) 3125int ixgbevf_open(struct net_device *netdev)
3126{ 3126{
3127 struct ixgbevf_adapter *adapter = netdev_priv(netdev); 3127 struct ixgbevf_adapter *adapter = netdev_priv(netdev);
3128 struct ixgbe_hw *hw = &adapter->hw; 3128 struct ixgbe_hw *hw = &adapter->hw;
@@ -3205,7 +3205,7 @@ err_setup_reset:
3205 * needs to be disabled. A global MAC reset is issued to stop the 3205 * needs to be disabled. A global MAC reset is issued to stop the
3206 * hardware, and all transmit and receive resources are freed. 3206 * hardware, and all transmit and receive resources are freed.
3207 **/ 3207 **/
3208static int ixgbevf_close(struct net_device *netdev) 3208int ixgbevf_close(struct net_device *netdev)
3209{ 3209{
3210 struct ixgbevf_adapter *adapter = netdev_priv(netdev); 3210 struct ixgbevf_adapter *adapter = netdev_priv(netdev);
3211 3211