aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Duyck <alexander.h.duyck@intel.com>2017-11-22 13:57:35 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2018-01-12 11:20:33 -0500
commit49cfbeb7a95c0436dfc127e2c37d71ed238532f8 (patch)
treed7c09ceb26003744828b9e5cbc211f4b58970691
parentb5f69ccf6765804b550dfd6c165b0c35d07bbc65 (diff)
ixgbe: Fix handling of macvlan Tx offload
This update makes it so that we report the actual number of Tx queues via real_num_tx_queues but are still restricted to RSS on only the first pool by setting num_tc equal to 1. Doing this locks us into only having the ability to setup XPS on the queues in that pool, and only those queues should be used for transmitting anything other than macvlan traffic. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> 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/ixgbe/ixgbe_lib.c4
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c20
2 files changed, 14 insertions, 10 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
index cfe5a6af04d0..b3c282d09b18 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c
@@ -619,6 +619,10 @@ static bool ixgbe_set_sriov_queues(struct ixgbe_adapter *adapter)
619 } 619 }
620 620
621#endif 621#endif
622 /* populate TC0 for use by pool 0 */
623 netdev_set_tc_queue(adapter->netdev, 0,
624 adapter->num_rx_queues_per_pool, 0);
625
622 return true; 626 return true;
623} 627}
624 628
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index cdb8502ae473..d8c4c1b90378 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -6571,20 +6571,12 @@ int ixgbe_open(struct net_device *netdev)
6571 goto err_req_irq; 6571 goto err_req_irq;
6572 6572
6573 /* Notify the stack of the actual queue counts. */ 6573 /* Notify the stack of the actual queue counts. */
6574 if (adapter->num_rx_pools > 1) 6574 queues = adapter->num_tx_queues;
6575 queues = adapter->num_rx_queues_per_pool;
6576 else
6577 queues = adapter->num_tx_queues;
6578
6579 err = netif_set_real_num_tx_queues(netdev, queues); 6575 err = netif_set_real_num_tx_queues(netdev, queues);
6580 if (err) 6576 if (err)
6581 goto err_set_queues; 6577 goto err_set_queues;
6582 6578
6583 if (adapter->num_rx_pools > 1 && 6579 queues = adapter->num_rx_queues;
6584 adapter->num_rx_queues > IXGBE_MAX_L2A_QUEUES)
6585 queues = IXGBE_MAX_L2A_QUEUES;
6586 else
6587 queues = adapter->num_rx_queues;
6588 err = netif_set_real_num_rx_queues(netdev, queues); 6580 err = netif_set_real_num_rx_queues(netdev, queues);
6589 if (err) 6581 if (err)
6590 goto err_set_queues; 6582 goto err_set_queues;
@@ -8814,6 +8806,14 @@ int ixgbe_setup_tc(struct net_device *dev, u8 tc)
8814 } else { 8806 } else {
8815 netdev_reset_tc(dev); 8807 netdev_reset_tc(dev);
8816 8808
8809 /* To support macvlan offload we have to use num_tc to
8810 * restrict the queues that can be used by the device.
8811 * By doing this we can avoid reporting a false number of
8812 * queues.
8813 */
8814 if (!tc && adapter->num_rx_pools > 1)
8815 netdev_set_num_tc(dev, 1);
8816
8817 if (adapter->hw.mac.type == ixgbe_mac_82598EB) 8817 if (adapter->hw.mac.type == ixgbe_mac_82598EB)
8818 adapter->hw.fc.requested_mode = adapter->last_lfc_mode; 8818 adapter->hw.fc.requested_mode = adapter->last_lfc_mode;
8819 8819