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