On Sun, Jan 24, 2021 at 01:43:58PM +0200, stef...@marvell.com wrote: > diff --git a/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c > b/drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c > index 9d69752..0f5069f 100644 > --- 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. -- RMK's Patch system: https://www.armlinux.org.uk/developer/patches/ FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!