From: Zhang Shengju <zhangshen...@cmss.chinamobile.com>

This patch adds a new function igb_get_max_rss_queues() to get maximum
RSS queues, this will reduce duplicate code and facilitate future
maintenance.

Signed-off-by: Zhang Shengju <zhangshen...@cmss.chinamobile.com>
Tested-by: Aaron Brown <aaron.f.br...@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirs...@intel.com>
---
 drivers/net/ethernet/intel/igb/igb.h         |  1 +
 drivers/net/ethernet/intel/igb/igb_ethtool.c | 32 +---------------------------
 drivers/net/ethernet/intel/igb/igb_main.c    | 12 +++++++++--
 3 files changed, 12 insertions(+), 33 deletions(-)

diff --git a/drivers/net/ethernet/intel/igb/igb.h 
b/drivers/net/ethernet/intel/igb/igb.h
index 92845692087a..1c6b8d9176a8 100644
--- a/drivers/net/ethernet/intel/igb/igb.h
+++ b/drivers/net/ethernet/intel/igb/igb.h
@@ -690,6 +690,7 @@ void igb_ptp_rx_pktstamp(struct igb_q_vector *q_vector, 
void *va,
 int igb_ptp_set_ts_config(struct net_device *netdev, struct ifreq *ifr);
 int igb_ptp_get_ts_config(struct net_device *netdev, struct ifreq *ifr);
 void igb_set_flag_queue_pairs(struct igb_adapter *, const u32);
+unsigned int igb_get_max_rss_queues(struct igb_adapter *);
 #ifdef CONFIG_IGB_HWMON
 void igb_sysfs_exit(struct igb_adapter *adapter);
 int igb_sysfs_init(struct igb_adapter *adapter);
diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c 
b/drivers/net/ethernet/intel/igb/igb_ethtool.c
index d06a8db514d4..606e6761758f 100644
--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
@@ -3338,37 +3338,7 @@ static int igb_set_rxfh(struct net_device *netdev, const 
u32 *indir,
 
 static unsigned int igb_max_channels(struct igb_adapter *adapter)
 {
-       struct e1000_hw *hw = &adapter->hw;
-       unsigned int max_combined = 0;
-
-       switch (hw->mac.type) {
-       case e1000_i211:
-               max_combined = IGB_MAX_RX_QUEUES_I211;
-               break;
-       case e1000_82575:
-       case e1000_i210:
-               max_combined = IGB_MAX_RX_QUEUES_82575;
-               break;
-       case e1000_i350:
-               if (!!adapter->vfs_allocated_count) {
-                       max_combined = 1;
-                       break;
-               }
-               /* fall through */
-       case e1000_82576:
-               if (!!adapter->vfs_allocated_count) {
-                       max_combined = 2;
-                       break;
-               }
-               /* fall through */
-       case e1000_82580:
-       case e1000_i354:
-       default:
-               max_combined = IGB_MAX_RX_QUEUES;
-               break;
-       }
-
-       return max_combined;
+       return igb_get_max_rss_queues(adapter);
 }
 
 static void igb_get_channels(struct net_device *netdev,
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c 
b/drivers/net/ethernet/intel/igb/igb_main.c
index 8504900bf7b8..21a34e9e2645 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -3373,10 +3373,10 @@ static void igb_probe_vfs(struct igb_adapter *adapter)
 #endif /* CONFIG_PCI_IOV */
 }
 
-static void igb_init_queue_configuration(struct igb_adapter *adapter)
+unsigned int igb_get_max_rss_queues(struct igb_adapter *adapter)
 {
        struct e1000_hw *hw = &adapter->hw;
-       u32 max_rss_queues;
+       unsigned int max_rss_queues;
 
        /* Determine the maximum number of RSS queues supported. */
        switch (hw->mac.type) {
@@ -3407,6 +3407,14 @@ static void igb_init_queue_configuration(struct 
igb_adapter *adapter)
                break;
        }
 
+       return max_rss_queues;
+}
+
+static void igb_init_queue_configuration(struct igb_adapter *adapter)
+{
+       u32 max_rss_queues;
+
+       max_rss_queues = igb_get_max_rss_queues(adapter);
        adapter->rss_queues = min_t(u32, max_rss_queues, num_online_cpus());
 
        igb_set_flag_queue_pairs(adapter, max_rss_queues);
-- 
2.14.3

Reply via email to