]> git.hungrycats.org Git - linux/commitdiff
[PATCH] r8169: avoid needless NAPI poll scheduling
authorFrancois Romieu <romieu@fr.zoreil.com>
Tue, 14 Aug 2007 22:29:27 +0000 (00:29 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 17 Oct 2007 19:30:22 +0000 (21:30 +0200)
Theory  : though needless, it should not have hurt.
Practice: it does not play nice with DEBUG_SHIRQ + LOCKDEP + UP
(see https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=3D242572).

The patch makes sense in itself but I should dig why it has an effect
on #242572 (assuming that NAPI do not change in a near future).

Patch in mainline as 313b0305b5a1e7e0fb39383befbf79558ce68a9c.
Backported to 2.6.22-stable by Thomas M=FCller.

Signed-off-by: Thomas M=FCller <thomas@mathtm.de>
Signed-off-by: Francois Romieu <romieu@fr.zoreil.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/net/r8169.c

index 1aafa714b410f3609edcff9ae769ba43908e989e..2847a0ca7aac43a678a7148af3700a60418a6457 100644 (file)
@@ -2646,14 +2646,16 @@ rtl8169_interrupt(int irq, void *dev_instance)
                        rtl8169_check_link_status(dev, tp, ioaddr);
 
 #ifdef CONFIG_R8169_NAPI
-               RTL_W16(IntrMask, rtl8169_intr_mask & ~rtl8169_napi_event);
-               tp->intr_mask = ~rtl8169_napi_event;
-
-               if (likely(netif_rx_schedule_prep(dev)))
-                       __netif_rx_schedule(dev);
-               else if (netif_msg_intr(tp)) {
-                       printk(KERN_INFO "%s: interrupt %04x taken in poll\n",
-                              dev->name, status);
+               if (status & rtl8169_napi_event) {
+                       RTL_W16(IntrMask, rtl8169_intr_mask & ~rtl8169_napi_event);
+                       tp->intr_mask = ~rtl8169_napi_event;
+
+                       if (likely(netif_rx_schedule_prep(dev)))
+                               __netif_rx_schedule(dev);
+                       else if (netif_msg_intr(tp)) {
+                               printk(KERN_INFO "%s: interrupt %04x in poll\n",
+                                      dev->name, status);
+                       }
                }
                break;
 #else