[next,S85-V1,03/14] i40e: Do not allow use more TC queue pairs than MSI-X vectors exist

Message ID 20171229134910.14233-1-alice.michael@intel.com
State Under Review
Delegated to: Jeff Kirsher
Headers show
Series
  • [next,S85-V1,01/14] i40e: fix typo in function description
Related show

Commit Message

Alice Michael Dec. 29, 2017, 1:49 p.m.
From: Paweł Jabłoński <pawel.jablonski@intel.com>

This patch suppresses the message about invalid TC mapping and wrong
selected TX queue. The root cause of this bug was setting too many
TC queue pairs on huge multiprocessor machines. When quantity of the
TC queue pairs is exceeding MSI-X vectors count then TX queue number
can be selected beyond actual TX queues amount.

Signed-off-by: Paweł Jabłoński <pawel.jablonski@intel.com>
---
 drivers/net/ethernet/intel/i40e/i40e_main.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Bowers, AndrewX Jan. 5, 2018, 7:15 p.m. | #1
> -----Original Message-----

> From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On

> Behalf Of Alice Michael

> Sent: Friday, December 29, 2017 5:49 AM

> To: Michael, Alice <alice.michael@intel.com>; intel-wired-

> lan@lists.osuosl.org

> Cc: Jablonski, Pawel <pawel.jablonski@intel.com>

> Subject: [Intel-wired-lan] [next PATCH S85-V1 03/14] i40e: Do not allow use

> more TC queue pairs than MSI-X vectors exist

> 

> From: Paweł Jabłoński <pawel.jablonski@intel.com>

> 

> This patch suppresses the message about invalid TC mapping and wrong

> selected TX queue. The root cause of this bug was setting too many TC

> queue pairs on huge multiprocessor machines. When quantity of the TC

> queue pairs is exceeding MSI-X vectors count then TX queue number can be

> selected beyond actual TX queues amount.

> 

> Signed-off-by: Paweł Jabłoński <pawel.jablonski@intel.com>

> ---

>  drivers/net/ethernet/intel/i40e/i40e_main.c | 4 ++++

>  1 file changed, 4 insertions(+)


Tested-by: Andrew Bowers <andrewx.bowers@intel.com>

Patch

diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 14e4a2b..ea8be7c 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -1811,6 +1811,10 @@  static void i40e_vsi_setup_queue_map(struct i40e_vsi *vsi,
 	num_tc_qps = qcount / numtc;
 	num_tc_qps = min_t(int, num_tc_qps, i40e_pf_get_max_q_per_tc(pf));
 
+	/* Do not allow use more TC queue pairs than MSI-X vectors exist */
+	if (pf->flags & I40E_FLAG_MSIX_ENABLED)
+		num_tc_qps = min_t(int, num_tc_qps, pf->num_lan_msix);
+
 	/* Setup queue offset/count for all TCs for given VSI */
 	for (i = 0; i < I40E_MAX_TRAFFIC_CLASS; i++) {
 		/* See if the given TC is enabled for the given VSI */