Re: [PATCH 2.6] natsemi.c NAPI
From: "David S. Miller" <davem@davemloft.net>
Date: 2004-09-20 18:57:46
From: "David S. Miller" <davem@davemloft.net>
Date: 2004-09-20 18:57:46
On Mon, 20 Sep 2004 16:10:30 +0200 Harald Welte [off-list ref] 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.