netdev
[Top] [All Lists]

Re: [PATCH 2.6] natsemi.c NAPI

To: Harald Welte <laforge@xxxxxxxxxxxx>
Subject: Re: [PATCH 2.6] natsemi.c NAPI
From: "David S. Miller" <davem@xxxxxxxxxxxxx>
Date: Mon, 20 Sep 2004 11:57:46 -0700
Cc: netdev@xxxxxxxxxxx
In-reply-to: <20040920141030.GV1307@xxxxxxxxxxxxxxxxxxxxxxx>
References: <20040920141030.GV1307@xxxxxxxxxxxxxxxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
On Mon, 20 Sep 2004 16:10:30 +0200
Harald Welte <laforge@xxxxxxxxxxxx> wrote:

> +static inline void natsemi_irq_enable(struct netdev_private *np)
> +{
> +     /* Enable interrupts by setting the interrupt mask. */
> +     writel(DEFAULT_INTR, np->base_addr + IntrMask);
> +     writel(1, np->base_addr + IntrEnable);
> +     mb();
> +}
> +
> +static inline void natsemi_irq_disable(struct netdev_private *np)
> +{
> +     writel(0, np->base_addr + IntrEnable);
> +     mb();
> +}

Kill the mb(), try using:

        readl(np->base_addr + IntrEnable);

in it's place.

This driver (before the NAPI patch) is a bit buggy, it does
no RX processing SMP locking.  So if one one cpu you're doing
RX interrupt processing, and on another cpu tx_timeout() runs
we're totally screwed.

This is not caused by Harald's patch, but there are implications
for his NAPI patch once it is fixed.

<Prev in Thread] Current Thread [Next in Thread>