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!

Reply via email to