> > --- 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. 


Reply via email to