Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a660eea authored by Jesse Brandeburg's avatar Jesse Brandeburg Committed by Jeff Kirsher
Browse files

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: default avatarJesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
parent ce7ca751
Loading
Loading
Loading
Loading
+11 −11
Original line number Diff line number Diff line
@@ -2399,22 +2399,22 @@ static void i40e_config_xps_tx_ring(struct i40e_ring *ring)
	struct i40e_vsi *vsi = ring->vsi;
	cpumask_var_t mask;

	if (ring->q_vector && ring->netdev) {
	if (!ring->q_vector || !ring->netdev)
		return;

	/* Single TC mode enable XPS */
		if (vsi->tc_config.numtc <= 1 &&
		    !test_and_set_bit(__I40E_TX_XPS_INIT_DONE, &ring->state)) {
	if (vsi->tc_config.numtc <= 1) {
		if (!test_and_set_bit(__I40E_TX_XPS_INIT_DONE, &ring->state))
			netif_set_xps_queue(ring->netdev,
					    &ring->q_vector->affinity_mask,
					    ring->queue_index);
	} else if (alloc_cpumask_var(&mask, GFP_KERNEL)) {
		/* Disable XPS to allow selection based on TC */
		bitmap_zero(cpumask_bits(mask), nr_cpumask_bits);
			netif_set_xps_queue(ring->netdev, mask,
					    ring->queue_index);
		netif_set_xps_queue(ring->netdev, mask, ring->queue_index);
		free_cpumask_var(mask);
	}
}
}

/**
 * i40e_configure_tx_ring - Configure a transmit ring context and rest