Sorry, please ignore the FEC patches. Those are test patches still
residing in my to-send folder. Sorry for the noise.

Am Freitag, den 26.08.2016, 17:49 +0200 schrieb Lucas Stach:
> The FEC doesn't have a real interrupt status register, that takes
> into account the mask status of the IRQ. The driver reads the raw
> interrupt event register, which also reports events for masked
> IRQs.
> 
> The driver needs to apply the current mask itself, to avoid acking
> IRQs that are currently masked, as NAPI relies on the masking to
> hide the IRQs. The current behavior of just acking all interrupts
> regardless of their mask status opens the driver up the "rotting
> packet" race-window, as described in the original NAPI-HOWTO, which
> has been observed in the wild.
> 
> Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
> ---
>  drivers/net/ethernet/freescale/fec_main.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/ethernet/freescale/fec_main.c 
> b/drivers/net/ethernet/freescale/fec_main.c
> index 01f7e811739b..498264969e89 100644
> --- a/drivers/net/ethernet/freescale/fec_main.c
> +++ b/drivers/net/ethernet/freescale/fec_main.c
> @@ -1572,7 +1572,8 @@ fec_enet_interrupt(int irq, void *dev_id)
>       uint int_events;
>       irqreturn_t ret = IRQ_NONE;
>  
> -     int_events = readl(fep->hwp + FEC_IEVENT);
> +     int_events = readl_relaxed(fep->hwp + FEC_IEVENT) &
> +                  readl_relaxed(fep->hwp + FEC_IMASK);
>       writel(int_events, fep->hwp + FEC_IEVENT);
>       fec_enet_collect_events(fep, int_events);
>  


Reply via email to