RE: [EXT] Re: [PATCH v2 RFC net-next 09/18] net: mvpp2: add FCA RXQ non occupied descriptor threshold

Stefan Chulski
2021-01-24T13:25:13Z

> > --- a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
> > +++ b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c
> > @@ -1154,6 +1154,9 @@ static void mvpp2_interrupts_mask(void *arg)
> > mvpp2_thread_write(port->priv,
> > mvpp2_cpu_to_thread(port->priv,
> smp_processor_id()),
> > MVPP2_ISR_RX_TX_MASK_REG(port->id), 0);
> > + mvpp2_thread_write(port->priv,
> > + mvpp2_cpu_to_thread(port->priv,
> smp_processor_id()),
> > + MVPP2_ISR_RX_ERR_CAUSE_REG(port->id), 0);
>
> I wonder if this should be refactored:
>
> u32 thread = mvpp2_cpu_to_thread(port->priv,
> smp_processor_id());
>
> mvpp2_thread_write(port->priv, thread,
> MVPP2_ISR_RX_TX_MASK_REG(port->id), 0);
> mvpp2_thread_write(port->priv, thread,
> MVPP2_ISR_RX_ERR_CAUSE_REG(port->id), 0);
>
> to avoid having to recompute mvpp2_cpu_to_thread() for each write?
>
> However, looking deeper...
>
> static void mvpp2_interrupts_mask(void *arg) {
> struct mvpp2_port *port = arg;
> u32 thread;
> int cpu;
>
> cpu = smp_processor_id();
> if (cpu > port->priv->nthreads)
> return
>
> thread = mvpp2_cpu_to_thread(port->priv, cpu);
> ...
>
> and I wonder about that condition - "cpu > port->priv->nthreads". If cpu ==
> port->priv->nthreads, then mvpp2_cpu_to_thread() will return zero, just like
> the cpu=0 case. This leads me to suspect that this comparison off by one.

I can push patch that make it if (cpu => port->priv->nthreads). Or even remove this if.
Anyway on current Armada platforms we have only 4 CPU's and maximum 9 PPv2 threads(nthreads is min between num_present_cpus and maximum HW PPv2 threads), so this would be always false.

Regards,
Stefan.