aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet
diff options
context:
space:
mode:
authorJesse Brandeburg <jesse.brandeburg@intel.com>2015-02-26 11:13:22 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2015-03-05 07:57:33 -0500
commit9a660eeae2779cea72ef306b721273a0e951e7d7 (patch)
tree7cb73517f1ae40b41ffd4dcfd5811c11ef3a5f05 /drivers/net/ethernet
parentce7ca75176dc3d87c75ea47a7b35a0ac50c7589c (diff)
i40e: fix XPS mask when resetting
During resets (possibly caused by a Tx hang) the driver would accidentally clear the XPS mask for all queues back to 0. This caused higher CPU utilization and had some other performance impacts for transmit tests. Change-ID: I95f112432c9e643a153eaa31cd28cdcbfdd01831 Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet')
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_main.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 620dd237cce4..a287cc84597a 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -2399,20 +2399,20 @@ static void i40e_config_xps_tx_ring(struct i40e_ring *ring)
2399 struct i40e_vsi *vsi = ring->vsi; 2399 struct i40e_vsi *vsi = ring->vsi;
2400 cpumask_var_t mask; 2400 cpumask_var_t mask;
2401 2401
2402 if (ring->q_vector && ring->netdev) { 2402 if (!ring->q_vector || !ring->netdev)
2403 /* Single TC mode enable XPS */ 2403 return;
2404 if (vsi->tc_config.numtc <= 1 && 2404
2405 !test_and_set_bit(__I40E_TX_XPS_INIT_DONE, &ring->state)) { 2405 /* Single TC mode enable XPS */
2406 if (vsi->tc_config.numtc <= 1) {
2407 if (!test_and_set_bit(__I40E_TX_XPS_INIT_DONE, &ring->state))
2406 netif_set_xps_queue(ring->netdev, 2408 netif_set_xps_queue(ring->netdev,
2407 &ring->q_vector->affinity_mask, 2409 &ring->q_vector->affinity_mask,
2408 ring->queue_index); 2410 ring->queue_index);
2409 } else if (alloc_cpumask_var(&mask, GFP_KERNEL)) { 2411 } else if (alloc_cpumask_var(&mask, GFP_KERNEL)) {
2410 /* Disable XPS to allow selection based on TC */ 2412 /* Disable XPS to allow selection based on TC */
2411 bitmap_zero(cpumask_bits(mask), nr_cpumask_bits); 2413 bitmap_zero(cpumask_bits(mask), nr_cpumask_bits);
2412 netif_set_xps_queue(ring->netdev, mask, 2414 netif_set_xps_queue(ring->netdev, mask, ring->queue_index);
2413 ring->queue_index); 2415 free_cpumask_var(mask);
2414 free_cpumask_var(mask);
2415 }
2416 } 2416 }
2417} 2417}
2418 2418