net: mvpp2: make sure we don't spread load on disabled CPUs
authorMaxime Chevallier <maxime.chevallier@bootlin.com>
Thu, 12 Jul 2018 11:54:22 +0000 (13:54 +0200)
committerDavid S. Miller <davem@davemloft.net>
Fri, 13 Jul 2018 00:30:48 +0000 (17:30 -0700)
When filling the RSS table, we have to make sure that the rx queue is
attached to an online CPU.

This patch is not a full support for cpu_hotplug, but rather a way to
make sure that we don't break network on system booted with the maxcpus
parameter.

Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/mvpp2/mvpp2_cls.c

index 7dafc8c425b8b30daa778685077edfff3b144855..f2bcfa8f1dfd3a58d1f9d0f355edccdf5e94cd55 100644 (file)
@@ -109,11 +109,17 @@ void mvpp2_cls_oversize_rxq_set(struct mvpp2_port *port)
 
 static inline u32 mvpp22_rxfh_indir(struct mvpp2_port *port, u32 rxq)
 {
-       int nrxqs, cpus = num_possible_cpus();
+       int nrxqs, cpu, cpus = num_possible_cpus();
 
        /* Number of RXQs per CPU */
        nrxqs = port->nrxqs / cpus;
 
+       /* CPU that will handle this rx queue */
+       cpu = rxq / nrxqs;
+
+       if (!cpu_online(cpu))
+               return port->first_rxq;
+
        /* Indirection to better distribute the paquets on the CPUs when
         * configuring the RSS queues.
         */