netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/3] be2net: patch set
@ 2015-03-26  7:05 Sathya Perla
  2015-03-26  7:05 ` [PATCH net-next 1/3] be2net: assign CPU affinity hints to be2net IRQs Sathya Perla
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Sathya Perla @ 2015-03-26  7:05 UTC (permalink / raw)
  To: netdev

Hi David, this patch set includes 2 feature additions to the be2net driver:

Patch 1 sets up cpu affinity hints for be2net irqs using the
cpumask_set_cpu_local_first() API that first picks the near numa cores
and when they are exhausted, selects the far numa cores.

Patch 2 setups up xps queue mapping for be2net's TXQs to avoid,
by default, TX lock contention.

Patch 3 just bumps up the driver version.

Pls consider applying this patch set to the net-next queue. Thanks!

Padmanabh Ratnakar (1):
  be2net: assign CPU affinity hints to be2net IRQs

Sathya Perla (2):
  be2net: setup xps queue mapping
  be2net: bump up the driver version to 10.6.0.1

 drivers/net/ethernet/emulex/benet/be.h      |  4 +++-
 drivers/net/ethernet/emulex/benet/be_main.c | 27 +++++++++++++++++++++------
 2 files changed, 24 insertions(+), 7 deletions(-)

-- 
2.2.0

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH net-next 1/3] be2net: assign CPU affinity hints to be2net IRQs
  2015-03-26  7:05 [PATCH net-next 0/3] be2net: patch set Sathya Perla
@ 2015-03-26  7:05 ` Sathya Perla
  2015-03-26  7:05 ` [PATCH net-next 2/3] be2net: setup xps queue mapping Sathya Perla
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Sathya Perla @ 2015-03-26  7:05 UTC (permalink / raw)
  To: netdev

From: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com>

This patch provides hints to irqbalance to map be2net IRQs to
specific CPU cores. cpumask_set_cpu_local_first() is used, which first
maps IRQs to near NUMA cores; when those cores are exhausted, IRQs are
mapped to far NUMA cores.

Signed-off-by: Padmanabh Ratnakar <padmanabh.ratnakar@emulex.com>
Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
 drivers/net/ethernet/emulex/benet/be.h      |  2 ++
 drivers/net/ethernet/emulex/benet/be_main.c | 17 ++++++++++++++---
 2 files changed, 16 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h
index eb39673..a2fe1f3 100644
--- a/drivers/net/ethernet/emulex/benet/be.h
+++ b/drivers/net/ethernet/emulex/benet/be.h
@@ -30,6 +30,7 @@
 #include <linux/firmware.h>
 #include <linux/slab.h>
 #include <linux/u64_stats_sync.h>
+#include <linux/cpumask.h>
 
 #include "be_hw.h"
 #include "be_roce.h"
@@ -183,6 +184,7 @@ struct be_eq_obj {
 	u16 spurious_intr;
 	struct napi_struct napi;
 	struct be_adapter *adapter;
+	cpumask_var_t  affinity_mask;
 
 #ifdef CONFIG_NET_RX_BUSY_POLL
 #define BE_EQ_IDLE		0
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index d8df78b..3541207 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -2342,6 +2342,7 @@ static void be_evt_queues_destroy(struct be_adapter *adapter)
 			napi_hash_del(&eqo->napi);
 			netif_napi_del(&eqo->napi);
 		}
+		free_cpumask_var(eqo->affinity_mask);
 		be_queue_free(adapter, &eqo->q);
 	}
 }
@@ -2357,6 +2358,11 @@ static int be_evt_queues_create(struct be_adapter *adapter)
 				    adapter->cfg_num_qs);
 
 	for_all_evt_queues(adapter, eqo, i) {
+		if (!zalloc_cpumask_var(&eqo->affinity_mask, GFP_KERNEL))
+			return -ENOMEM;
+		cpumask_set_cpu_local_first(i, dev_to_node(&adapter->pdev->dev),
+					    eqo->affinity_mask);
+
 		netif_napi_add(adapter->netdev, &eqo->napi, be_poll,
 			       BE_NAPI_WEIGHT);
 		napi_hash_add(&eqo->napi);
@@ -3028,6 +3034,8 @@ static int be_msix_register(struct be_adapter *adapter)
 		status = request_irq(vec, be_msix, 0, eqo->desc, eqo);
 		if (status)
 			goto err_msix;
+
+		irq_set_affinity_hint(vec, eqo->affinity_mask);
 	}
 
 	return 0;
@@ -3072,7 +3080,7 @@ static void be_irq_unregister(struct be_adapter *adapter)
 {
 	struct net_device *netdev = adapter->netdev;
 	struct be_eq_obj *eqo;
-	int i;
+	int i, vec;
 
 	if (!adapter->isr_registered)
 		return;
@@ -3084,8 +3092,11 @@ static void be_irq_unregister(struct be_adapter *adapter)
 	}
 
 	/* MSIx */
-	for_all_evt_queues(adapter, eqo, i)
-		free_irq(be_msix_vec_get(adapter, eqo), eqo);
+	for_all_evt_queues(adapter, eqo, i) {
+		vec = be_msix_vec_get(adapter, eqo);
+		irq_set_affinity_hint(vec, NULL);
+		free_irq(vec, eqo);
+	}
 
 done:
 	adapter->isr_registered = false;
-- 
2.2.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH net-next 2/3] be2net: setup xps queue mapping
  2015-03-26  7:05 [PATCH net-next 0/3] be2net: patch set Sathya Perla
  2015-03-26  7:05 ` [PATCH net-next 1/3] be2net: assign CPU affinity hints to be2net IRQs Sathya Perla
@ 2015-03-26  7:05 ` Sathya Perla
  2015-03-26  7:05 ` [PATCH net-next 3/3] be2net: bump up the driver version to 10.6.0.1 Sathya Perla
  2015-03-29 19:34 ` [PATCH net-next 0/3] be2net: patch set David Miller
  3 siblings, 0 replies; 5+ messages in thread
From: Sathya Perla @ 2015-03-26  7:05 UTC (permalink / raw)
  To: netdev

This patch sets up xps queue mapping on load, so that TX traffic is
steered to the queue whose irqs are being processed by the current cpu.
This helps in avoiding TX lock contention.

Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
 drivers/net/ethernet/emulex/benet/be_main.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 3541207..5ff7fba 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -2454,8 +2454,9 @@ static void be_tx_queues_destroy(struct be_adapter *adapter)
 
 static int be_tx_qs_create(struct be_adapter *adapter)
 {
-	struct be_queue_info *cq, *eq;
+	struct be_queue_info *cq;
 	struct be_tx_obj *txo;
+	struct be_eq_obj *eqo;
 	int status, i;
 
 	adapter->num_tx_qs = min(adapter->num_evt_qs, be_max_txqs(adapter));
@@ -2473,8 +2474,8 @@ static int be_tx_qs_create(struct be_adapter *adapter)
 		/* If num_evt_qs is less than num_tx_qs, then more than
 		 * one txq share an eq
 		 */
-		eq = &adapter->eq_obj[i % adapter->num_evt_qs].q;
-		status = be_cmd_cq_create(adapter, cq, eq, false, 3);
+		eqo = &adapter->eq_obj[i % adapter->num_evt_qs];
+		status = be_cmd_cq_create(adapter, cq, &eqo->q, false, 3);
 		if (status)
 			return status;
 
@@ -2486,6 +2487,9 @@ static int be_tx_qs_create(struct be_adapter *adapter)
 		status = be_cmd_txq_create(adapter, txo);
 		if (status)
 			return status;
+
+		netif_set_xps_queue(adapter->netdev, eqo->affinity_mask,
+				    eqo->idx);
 	}
 
 	dev_info(&adapter->pdev->dev, "created %d TX queue(s)\n",
-- 
2.2.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH net-next 3/3] be2net: bump up the driver version to 10.6.0.1
  2015-03-26  7:05 [PATCH net-next 0/3] be2net: patch set Sathya Perla
  2015-03-26  7:05 ` [PATCH net-next 1/3] be2net: assign CPU affinity hints to be2net IRQs Sathya Perla
  2015-03-26  7:05 ` [PATCH net-next 2/3] be2net: setup xps queue mapping Sathya Perla
@ 2015-03-26  7:05 ` Sathya Perla
  2015-03-29 19:34 ` [PATCH net-next 0/3] be2net: patch set David Miller
  3 siblings, 0 replies; 5+ messages in thread
From: Sathya Perla @ 2015-03-26  7:05 UTC (permalink / raw)
  To: netdev

Signed-off-by: Sathya Perla <sathya.perla@emulex.com>
---
 drivers/net/ethernet/emulex/benet/be.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h
index a2fe1f3..4b0494b 100644
--- a/drivers/net/ethernet/emulex/benet/be.h
+++ b/drivers/net/ethernet/emulex/benet/be.h
@@ -35,7 +35,7 @@
 #include "be_hw.h"
 #include "be_roce.h"
 
-#define DRV_VER			"10.4u"
+#define DRV_VER			"10.6.0.1"
 #define DRV_NAME		"be2net"
 #define BE_NAME			"Emulex BladeEngine2"
 #define BE3_NAME		"Emulex BladeEngine3"
-- 
2.2.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH net-next 0/3] be2net: patch set
  2015-03-26  7:05 [PATCH net-next 0/3] be2net: patch set Sathya Perla
                   ` (2 preceding siblings ...)
  2015-03-26  7:05 ` [PATCH net-next 3/3] be2net: bump up the driver version to 10.6.0.1 Sathya Perla
@ 2015-03-29 19:34 ` David Miller
  3 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2015-03-29 19:34 UTC (permalink / raw)
  To: sathya.perla; +Cc: netdev

From: Sathya Perla <sathya.perla@emulex.com>
Date: Thu, 26 Mar 2015 03:05:07 -0400

> Hi David, this patch set includes 2 feature additions to the be2net driver:
> 
> Patch 1 sets up cpu affinity hints for be2net irqs using the
> cpumask_set_cpu_local_first() API that first picks the near numa cores
> and when they are exhausted, selects the far numa cores.
> 
> Patch 2 setups up xps queue mapping for be2net's TXQs to avoid,
> by default, TX lock contention.
> 
> Patch 3 just bumps up the driver version.
> 
> Pls consider applying this patch set to the net-next queue. Thanks!

Series applied, thanks.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-03-29 19:25 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-26  7:05 [PATCH net-next 0/3] be2net: patch set Sathya Perla
2015-03-26  7:05 ` [PATCH net-next 1/3] be2net: assign CPU affinity hints to be2net IRQs Sathya Perla
2015-03-26  7:05 ` [PATCH net-next 2/3] be2net: setup xps queue mapping Sathya Perla
2015-03-26  7:05 ` [PATCH net-next 3/3] be2net: bump up the driver version to 10.6.0.1 Sathya Perla
2015-03-29 19:34 ` [PATCH net-next 0/3] be2net: patch set David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).