Messages in this thread | | | From | Gregory CLEMENT <> | Subject | Re: [RFC PATCH 2/2] net: mvneta: Add naive RSS support | Date | Fri, 06 Nov 2015 21:53:40 +0100 |
| |
Hi Marcin,
[...]
>> +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.
> >> + 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
| |