ixgbe: Fix up some ethtool results when adapter is removed
authorMark Rustad <mark.d.rustad@intel.com>
Fri, 28 Feb 2014 23:48:56 +0000 (15:48 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 3 Mar 2014 00:06:43 +0000 (19:06 -0500)
Some ethtool tests returned apparently good results when the
adapter was in a removed state. Fix that by checking for removal.
This also fixes two paths that could return uninitialized memory
in data[4].

Signed-off-by: Mark Rustad <mark.d.rustad@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c

index 043307024c4abf542b6014eb6ccbfc739e2d54c5..f2d35c04159cae88ab6f7218168c1c151533bce7 100644 (file)
@@ -1,7 +1,7 @@
 /*******************************************************************************
 
   Intel 10 Gigabit PCI Express Linux driver
-  Copyright(c) 1999 - 2013 Intel Corporation.
+  Copyright(c) 1999 - 2014 Intel Corporation.
 
   This program is free software; you can redistribute it and/or modify it
   under the terms and conditions of the GNU General Public License,
@@ -1247,6 +1247,11 @@ static int ixgbe_link_test(struct ixgbe_adapter *adapter, u64 *data)
        struct ixgbe_hw *hw = &adapter->hw;
        bool link_up;
        u32 link_speed = 0;
+
+       if (ixgbe_removed(hw->hw_addr)) {
+               *data = 1;
+               return 1;
+       }
        *data = 0;
 
        hw->mac.ops.check_link(hw, &link_speed, &link_up, true);
@@ -1969,6 +1974,7 @@ static void ixgbe_diag_test(struct net_device *netdev,
                data[1] = 1;
                data[2] = 1;
                data[3] = 1;
+               data[4] = 1;
                eth_test->flags |= ETH_TEST_FL_FAILED;
                return;
        }
@@ -1988,6 +1994,7 @@ static void ixgbe_diag_test(struct net_device *netdev,
                                        data[1] = 1;
                                        data[2] = 1;
                                        data[3] = 1;
+                                       data[4] = 1;
                                        eth_test->flags |= ETH_TEST_FL_FAILED;
                                        clear_bit(__IXGBE_TESTING,
                                                  &adapter->state);