diff options
author | Jesse Brandeburg <jesse.brandeburg@intel.com> | 2015-02-26 11:13:22 -0500 |
---|---|---|
committer | Jeff Kirsher <jeffrey.t.kirsher@intel.com> | 2015-03-05 07:57:33 -0500 |
commit | 9a660eeae2779cea72ef306b721273a0e951e7d7 (patch) | |
tree | 7cb73517f1ae40b41ffd4dcfd5811c11ef3a5f05 /drivers/net/ethernet | |
parent | ce7ca75176dc3d87c75ea47a7b35a0ac50c7589c (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.c | 22 |
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 | ||