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