ixgbe: Retire RSS enabled and capable flags
authorAlexander Duyck <alexander.h.duyck@intel.com>
Sat, 14 Jul 2012 05:42:36 +0000 (05:42 +0000)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Wed, 18 Jul 2012 20:29:05 +0000 (13:29 -0700)
All of our hardware supports RSS even if it is only for a single queue.  So
instead of toting around the RSS enable flag I am updating the code so that
all devices are enabled and if we want to disable RSS it is indicated via
the RSS mask.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Tested-by: Phil Schmitt <phillip.j.schmitt@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/ixgbe/ixgbe.h
drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c
drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c

index 67743aa7acef71f8eb83ac7e123f6e75df2a1e01..4ca10e6da482b4b1d4350b347d77dcf4dd700424 100644 (file)
@@ -446,8 +446,6 @@ struct ixgbe_adapter {
 #define IXGBE_FLAG_IMIR_ENABLED                 (u32)(1 << 12)
 #define IXGBE_FLAG_MQ_CAPABLE                   (u32)(1 << 13)
 #define IXGBE_FLAG_DCB_ENABLED                  (u32)(1 << 14)
-#define IXGBE_FLAG_RSS_ENABLED                  (u32)(1 << 16)
-#define IXGBE_FLAG_RSS_CAPABLE                  (u32)(1 << 17)
 #define IXGBE_FLAG_VMDQ_CAPABLE                 (u32)(1 << 18)
 #define IXGBE_FLAG_VMDQ_ENABLED                 (u32)(1 << 19)
 #define IXGBE_FLAG_FAN_FAIL_CAPABLE             (u32)(1 << 20)
index 8e1be50af70a7c26463dd79e3a596479b769f12b..4104ea25d81844ec4db050145ee1633099bbe812 100644 (file)
@@ -2245,10 +2245,6 @@ static int ixgbe_get_rss_hash_opts(struct ixgbe_adapter *adapter,
 {
        cmd->data = 0;
 
-       /* if RSS is disabled then report no hashing */
-       if (!(adapter->flags & IXGBE_FLAG_RSS_ENABLED))
-               return 0;
-
        /* Report default options for RSS on ixgbe */
        switch (cmd->flow_type) {
        case TCP_V4_FLOW:
index 676e93f344f39abc804bee0dcd9e29ec9869a203..38d1b65777add51123166da1f836e2c4755f3720 100644 (file)
@@ -265,9 +265,6 @@ static bool ixgbe_cache_ring_rss(struct ixgbe_adapter *adapter)
 {
        int i;
 
-       if (!(adapter->flags & IXGBE_FLAG_RSS_ENABLED))
-               return false;
-
        for (i = 0; i < adapter->num_rx_queues; i++)
                adapter->rx_ring[i]->reg_idx = i;
        for (i = 0; i < adapter->num_tx_queues; i++)
@@ -602,11 +599,6 @@ static bool ixgbe_set_rss_queues(struct ixgbe_adapter *adapter)
        struct ixgbe_ring_feature *f;
        u16 rss_i;
 
-       if (!(adapter->flags & IXGBE_FLAG_RSS_ENABLED)) {
-               adapter->flags &= ~IXGBE_FLAG_FDIR_HASH_CAPABLE;
-               return false;
-       }
-
        /* set mask for 16 queue limit of RSS */
        f = &adapter->ring_feature[RING_F_RSS];
        rss_i = f->limit;
@@ -1062,7 +1054,6 @@ static void ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter)
        }
 
        adapter->flags &= ~IXGBE_FLAG_DCB_ENABLED;
-       adapter->flags &= ~IXGBE_FLAG_RSS_ENABLED;
        if (adapter->flags & IXGBE_FLAG_FDIR_HASH_CAPABLE) {
                e_err(probe,
                      "ATR is not supported while multiple "
@@ -1073,6 +1064,7 @@ static void ixgbe_set_interrupt_capability(struct ixgbe_adapter *adapter)
        if (adapter->flags & IXGBE_FLAG_SRIOV_ENABLED)
                ixgbe_disable_sriov(adapter);
 
+       adapter->ring_feature[RING_F_RSS].limit = 1;
        ixgbe_set_num_queues(adapter);
        adapter->num_q_vectors = 1;
 
index 454e556307f27e9d80486915486747f5df3dca02..a3dc9657f572f6d40aa68b64efe52f07babd34fe 100644 (file)
@@ -2891,9 +2891,6 @@ static void ixgbe_setup_mrqc(struct ixgbe_adapter *adapter)
        int i, j;
        u16 rss_i = adapter->ring_feature[RING_F_RSS].indices;
 
-       if (!(adapter->flags & IXGBE_FLAG_RSS_ENABLED))
-               rss_i = 1;
-
        /*
         * Program table for at least 2 queues w/ SR-IOV so that VFs can
         * make full use of any rings they may have.  We will use the
@@ -2923,7 +2920,7 @@ static void ixgbe_setup_mrqc(struct ixgbe_adapter *adapter)
        IXGBE_WRITE_REG(hw, IXGBE_RXCSUM, rxcsum);
 
        if (adapter->hw.mac.type == ixgbe_mac_82598EB) {
-               if (adapter->flags & IXGBE_FLAG_RSS_ENABLED)
+               if (adapter->ring_feature[RING_F_RSS].mask)
                        mrqc = IXGBE_MRQC_RSSEN;
        } else {
                u8 tcs = netdev_get_num_tc(adapter->netdev);
@@ -3102,6 +3099,7 @@ void ixgbe_configure_rx_ring(struct ixgbe_adapter *adapter,
 static void ixgbe_setup_psrtype(struct ixgbe_adapter *adapter)
 {
        struct ixgbe_hw *hw = &adapter->hw;
+       int rss_i = adapter->ring_feature[RING_F_RSS].indices;
        int p;
 
        /* PSRTYPE must be initialized in non 82598 adapters */
@@ -3114,13 +3112,10 @@ static void ixgbe_setup_psrtype(struct ixgbe_adapter *adapter)
        if (hw->mac.type == ixgbe_mac_82598EB)
                return;
 
-       if (adapter->flags & IXGBE_FLAG_RSS_ENABLED) {
-               int rss_i = adapter->ring_feature[RING_F_RSS].indices;
-               if (rss_i > 3)
-                       psrtype |= 2 << 29;
-               else if (rss_i > 1)
-                       psrtype |= 1 << 29;
-       }
+       if (rss_i > 3)
+               psrtype |= 2 << 29;
+       else if (rss_i > 1)
+               psrtype |= 1 << 29;
 
        for (p = 0; p < adapter->num_rx_pools; p++)
                IXGBE_WRITE_REG(hw, IXGBE_PSRTYPE(adapter->num_vfs + p),
@@ -4408,7 +4403,6 @@ static int __devinit ixgbe_sw_init(struct ixgbe_adapter *adapter)
        /* Set capability flags */
        rss = min_t(int, IXGBE_MAX_RSS_INDICES, num_online_cpus());
        adapter->ring_feature[RING_F_RSS].limit = rss;
-       adapter->flags |= IXGBE_FLAG_RSS_ENABLED;
        switch (hw->mac.type) {
        case ixgbe_mac_82598EB:
                if (hw->device_id == IXGBE_DEV_ID_82598AT)
@@ -6756,10 +6750,6 @@ static netdev_features_t ixgbe_fix_features(struct net_device *netdev,
 {
        struct ixgbe_adapter *adapter = netdev_priv(netdev);
 
-       /* return error if RXHASH is being enabled when RSS is not supported */
-       if (!(adapter->flags & IXGBE_FLAG_RSS_ENABLED))
-               features &= ~NETIF_F_RXHASH;
-
        /* If Rx checksum is disabled, then RSC/LRO should also be disabled */
        if (!(features & NETIF_F_RXCSUM))
                features &= ~NETIF_F_LRO;
@@ -6802,7 +6792,7 @@ static int ixgbe_set_features(struct net_device *netdev,
        if (!(features & NETIF_F_NTUPLE)) {
                if (adapter->flags & IXGBE_FLAG_FDIR_PERFECT_CAPABLE) {
                        /* turn off Flow Director, set ATR and reset */
-                       if ((adapter->flags & IXGBE_FLAG_RSS_ENABLED) &&
+                       if (!(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED) &&
                            !(adapter->flags & IXGBE_FLAG_DCB_ENABLED))
                                adapter->flags |= IXGBE_FLAG_FDIR_HASH_CAPABLE;
                        need_reset = true;
@@ -7294,11 +7284,6 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
        if (err)
                goto err_sw_init;
 
-       if (!(adapter->flags & IXGBE_FLAG_RSS_ENABLED)) {
-               netdev->hw_features &= ~NETIF_F_RXHASH;
-               netdev->features &= ~NETIF_F_RXHASH;
-       }
-
        /* WOL not supported for all devices */
        adapter->wol = 0;
        hw->eeprom.ops.read(hw, 0x2c, &adapter->eeprom_cap);