Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1176620

[PATCH 6/6] net: mvneta: Statically assign queues to CPUs

From Maxime Ripard <maxime.ripard@free-electrons.com>
Newsgroups linux.kernel
Subject [PATCH 6/6] net: mvneta: Statically assign queues to CPUs
Date 2015-07-03 16:40 +0200
Message-ID <pIaie-1dJ-27@gated-at.bofh.it> (permalink)
References <pIaid-1dJ-9@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Since the switch to per-CPU interrupts, we lost the ability to set which
CPU was going to receive our RX interrupt, which was now only the CPU on
which the mvneta_open function was run.

We can now assign our queues to their respective CPUs, and make sure only
this CPU is going to handle our traffic.

This also paves the road to be able to change that at runtime, and later on
to support RSS.

Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
---
 drivers/net/ethernet/marvell/mvneta.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
index 0d21b8a779d9..658d713abc18 100644
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -2630,6 +2630,13 @@ static void mvneta_mdio_remove(struct mvneta_port *pp)
 	pp->phy_dev = NULL;
 }
 
+static void mvneta_percpu_enable(void *arg)
+{
+	struct mvneta_port *pp = arg;
+
+	enable_percpu_irq(pp->dev->irq, IRQ_TYPE_NONE);
+}
+
 static int mvneta_open(struct net_device *dev)
 {
 	struct mvneta_port *pp = netdev_priv(dev);
@@ -2655,6 +2662,19 @@ static int mvneta_open(struct net_device *dev)
 		goto err_cleanup_txqs;
 	}
 
+	/*
+	 * Even though the documentation says that request_percpu_irq
+	 * doesn't enable the interrupts automatically, it actually
+	 * does so on the local CPU.
+	 *
+	 * Make sure it's disabled.
+	 */
+	disable_percpu_irq(pp->dev->irq);
+
+	/* Enable per-CPU interrupt on the one CPU we care about */
+	smp_call_function_single(rxq_def % num_online_cpus(),
+				 mvneta_percpu_enable, pp, true);
+
 	/* In default link is down */
 	netif_carrier_off(pp->dev);
 
-- 
2.4.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 0/6] net: mvneta: Switch to per-CPU irq and make rxq_def useful Maxime Ripard <maxime.ripard@free-electrons.com> - 2015-07-03 16:40 +0200
  [PATCH 6/6] net: mvneta: Statically assign queues to CPUs Maxime Ripard <maxime.ripard@free-electrons.com> - 2015-07-03 16:40 +0200
    Re: [PATCH 6/6] net: mvneta: Statically assign queues to CPUs Thomas Petazzoni <thomas.petazzoni@free-electrons.com> - 2015-07-03 16:50 +0200
  [PATCH 4/6] net: mvneta: Handle per-cpu interrupts Maxime Ripard <maxime.ripard@free-electrons.com> - 2015-07-03 16:40 +0200
  [PATCH 5/6] net: mvneta: Allow different queues Maxime Ripard <maxime.ripard@free-electrons.com> - 2015-07-03 16:40 +0200
  [PATCH 3/6] irqchip: armada-370-xp: Rework per-cpu interrupts handling Maxime Ripard <maxime.ripard@free-electrons.com> - 2015-07-03 16:40 +0200

csiph-web