Thread (1 message) 1 message, 1 author, 2015-11-06

[RFC PATCH 2/2] net: mvneta: Add naive RSS support

From: Gregory CLEMENT <hidden>
Date: 2015-11-06 20:53:46
Also in: lkml, netdev

Hi Marcin,
 
[...]
quoted
+static int  mvneta_config_rss(struct mvneta_port *pp)
+{
+       int cpu;
+       u32 val;
+
+       netif_tx_stop_all_queues(pp->dev);
+
+       /* Mask all ethernet port interrupts */
+       mvreg_write(pp, MVNETA_INTR_NEW_MASK, 0);
Shouldn't the interrupts be masked on each online cpu? There is percpu
unmask function (mvneta_percpu_unmask_interrupt), so maybe ther should
be also mvneta_percpu_mask_interrupt. With this masking should look
like below:

     for_each_online_cpu(cpu)
               smp_call_function_single(cpu, mvneta_percpu_unmask_interrupt,
                                        pp, true);
Indeed you are right, however I am a bit surprised to not had had issue
cause by this. I will fix it.
quoted
+       mvreg_write(pp, MVNETA_INTR_OLD_MASK, 0);
+       mvreg_write(pp, MVNETA_INTR_MISC_MASK, 0);
+
+       /* We have to synchronise on the napi of each CPU */
+       for_each_online_cpu(cpu) {
+               struct mvneta_pcpu_port *pcpu_port =
+                       per_cpu_ptr(pp->ports, cpu);
+
+               napi_synchronize(&pcpu_port->napi);
+               napi_disable(&pcpu_port->napi);
+       }
+
+       pp->rxq_def = pp->indir[0];
+
+       /* update unicast mapping */
+       mvneta_set_rx_mode(pp->dev);
+
+       /* Update val of portCfg register accordingly with all RxQueue types */
+       val = MVNETA_PORT_CONFIG_DEFL_VALUE(pp->rxq_def);
+       mvreg_write(pp, MVNETA_PORT_CONFIG, val);
+
+       /* Update the elected CPU matching the new rxq_def */
+       mvneta_percpu_elect(pp);
+
+       /* We have to synchronise on the napi of each CPU */
+       for_each_online_cpu(cpu) {
+               struct mvneta_pcpu_port *pcpu_port =
+                       per_cpu_ptr(pp->ports, cpu);
+
+               napi_enable(&pcpu_port->napi);
+       }
+
rxq_def changed, but txq vs CPU mapping remained as in the beginning -
is it intentional?
txq vs CPU mapping is change in the mvneta_percpu_elect() function.

Thanks for this prompt review

Gregory

-- 
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help