aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSathya Perla <sathya.perla@emulex.com>2015-03-26 03:05:09 -0400
committerDavid S. Miller <davem@davemloft.net>2015-03-29 15:34:01 -0400
commit73f394e6290b9a2f3d297623c3db2d975111b445 (patch)
treeb63e67b5682f6cd95bca56ec153d392d53dc1905 /drivers
parentd658d98aa55a0a6e1f3b818645b098bc3187777a (diff)
be2net: setup xps queue mapping
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> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c10
1 files 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 3541207a8fed..5ff7fba9b67c 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)
2454 2454
2455static int be_tx_qs_create(struct be_adapter *adapter) 2455static int be_tx_qs_create(struct be_adapter *adapter)
2456{ 2456{
2457 struct be_queue_info *cq, *eq; 2457 struct be_queue_info *cq;
2458 struct be_tx_obj *txo; 2458 struct be_tx_obj *txo;
2459 struct be_eq_obj *eqo;
2459 int status, i; 2460 int status, i;
2460 2461
2461 adapter->num_tx_qs = min(adapter->num_evt_qs, be_max_txqs(adapter)); 2462 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)
2473 /* If num_evt_qs is less than num_tx_qs, then more than 2474 /* If num_evt_qs is less than num_tx_qs, then more than
2474 * one txq share an eq 2475 * one txq share an eq
2475 */ 2476 */
2476 eq = &adapter->eq_obj[i % adapter->num_evt_qs].q; 2477 eqo = &adapter->eq_obj[i % adapter->num_evt_qs];
2477 status = be_cmd_cq_create(adapter, cq, eq, false, 3); 2478 status = be_cmd_cq_create(adapter, cq, &eqo->q, false, 3);
2478 if (status) 2479 if (status)
2479 return status; 2480 return status;
2480 2481
@@ -2486,6 +2487,9 @@ static int be_tx_qs_create(struct be_adapter *adapter)
2486 status = be_cmd_txq_create(adapter, txo); 2487 status = be_cmd_txq_create(adapter, txo);
2487 if (status) 2488 if (status)
2488 return status; 2489 return status;
2490
2491 netif_set_xps_queue(adapter->netdev, eqo->affinity_mask,
2492 eqo->idx);
2489 } 2493 }
2490 2494
2491 dev_info(&adapter->pdev->dev, "created %d TX queue(s)\n", 2495 dev_info(&adapter->pdev->dev, "created %d TX queue(s)\n",