[ 3.5.y.z extended stable ] Patch "net/mlx4_core: Set number of msix vectors under SRIOV mode" has been added to staging queue

Herton Ronaldo Krzesinski herton.krzesinski at canonical.com
Fri Feb 15 03:10:40 UTC 2013

This is a note to let you know that I have just added a patch titled

    net/mlx4_core: Set number of msix vectors under SRIOV mode

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:


If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see



>From a500c5eb44c6ac64a39976d8a6b5567bb9a02597 Mon Sep 17 00:00:00 2001
From: Or Gerlitz <ogerlitz at mellanox.com>
Date: Thu, 17 Jan 2013 05:30:43 +0000
Subject: [PATCH] net/mlx4_core: Set number of msix vectors under SRIOV mode
 to firmware defaults

commit ca4c7b35f75492de7fbf5ee95be07481c348caee upstream.

The lines

	if (mlx4_is_mfunc(dev)) {
		nreq = 2;
	} else {

which hard code the number of requested msi-x vectors under multi-function
mode to two can be removed completely, since the firmware sets num_eqs and
reserved_eqs appropriately Thus, the code line:

	nreq = min_t(int, dev->caps.num_eqs - dev->caps.reserved_eqs, nreq);

is by itself sufficient and correct for all cases. Currently, for mfunc
mode num_eqs = 32 and reserved_eqs = 28, hence four vectors will be enabled.

This triples (one vector is used for the async events and commands EQ) the
horse power provided for processing of incoming packets on netdev RSS scheme,
IO initiators/targets commands processing flows, etc.

Reviewed-by: Jack Morgenstein <jackm at dev.mellanox.co.il>
Signed-off-by: Amir Vadai <amirv at mellanox.com>
Signed-off-by: Or Gerlitz <ogerlitz at mellanox.com>
Signed-off-by: David S. Miller <davem at davemloft.net>
Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski at canonical.com>
 drivers/net/ethernet/mellanox/mlx4/main.c |   11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index a0313de..c749b82 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -1545,15 +1545,8 @@ static void mlx4_enable_msi_x(struct mlx4_dev *dev)
 	int i;

 	if (msi_x) {
-		/* In multifunction mode each function gets 2 msi-X vectors
-		 * one for data path completions anf the other for asynch events
-		 * or command completions */
-		if (mlx4_is_mfunc(dev)) {
-			nreq = 2;
-		} else {
-			nreq = min_t(int, dev->caps.num_eqs -
-				     dev->caps.reserved_eqs, nreq);
-		}
+		nreq = min_t(int, dev->caps.num_eqs - dev->caps.reserved_eqs,
+			     nreq);

 		entries = kcalloc(nreq, sizeof *entries, GFP_KERNEL);
 		if (!entries)

More information about the kernel-team mailing list