From: ebiederm@xmission.com (Eric W. Biederman)
To: Francois Romieu <romieu@fr.zoreil.com>
Cc: David Dillow <dave@thedillows.org>,
Michael Riepe <michael.riepe@googlemail.com>,
Michael Buesch <mb@bu3sch.de>, Rui Santos <rsantos@grupopie.com>,
Michael B??ker <m.bueker@berlin.de>,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org
Subject: [PATCH] r8169: Reduce looping in the interrupt handler.
Date: Wed, 26 Aug 2009 00:58:56 -0700 [thread overview]
Message-ID: <m1iqgbknun.fsf_-_@fess.ebiederm.org> (raw)
In-Reply-To: <20090825221903.GA13630@electric-eye.fr.zoreil.com> (Francois Romieu's message of "Wed\, 26 Aug 2009 00\:19\:03 +0200")
As of 2.6.30 I have been observing soft lockups and netdev watchdog
timeouts caused by looping in the r8169 interrupt handler.
- Introduce a hard limit to the maximum number of times we will loop in
the interrupt handler, and print a message when we hit it.
- Break out of the loop if after looking none of the events in status
are events we expect to be delivered by an interrupt.
With just the hard limit and message bits of my patch in my test case
I get hit my limit of 10 loops 12 times. After filtering by intr_mask
and intr_event I don't get any warnings.
Any complaints from those who know the driver better than I?
Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com>
---
drivers/net/r8169.c | 21 +++++++++++++++++++++
1 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
index 3b19e0c..2214945 100644
--- a/drivers/net/r8169.c
+++ b/drivers/net/r8169.c
@@ -61,6 +61,8 @@ static const int multicast_filter_limit = 32;
/* MAC address length */
#define MAC_ADDR_LEN 6
+#define MAX_INTR_LOOPS 10 /* Limit the msi acking loop from going crazy */
+
#define MAX_READ_REQUEST_SHIFT 12
#define RX_FIFO_THRESH 7 /* 7 means NO threshold, Rx buffer level before first PCI xfer. */
#define RX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */
@@ -3552,6 +3554,7 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
void __iomem *ioaddr = tp->mmio_addr;
int handled = 0;
int status;
+ int count = 0;
/* loop handling interrupts until we have no new ones or
* we hit a invalid/hotplug case.
@@ -3560,6 +3563,17 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
while (status && status != 0xffff) {
handled = 1;
+ if (count++ >= MAX_INTR_LOOPS) {
+ if (netif_msg_intr(tp) && net_ratelimit()) {
+ printk(KERN_INFO " %s Screaming irq "
+ "status %08x mask %08x event %08x "
+ "napi %08x\n",
+ dev->name, status, tp->intr_mask,
+ tp->intr_event, tp->napi_event);
+ }
+ break;
+ }
+
/* Handle all of the error cases first. These will reset
* the chip, so just exit the loop.
*/
@@ -3609,6 +3623,13 @@ static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
RTL_W16(IntrStatus,
(status & RxFIFOOver) ? (status | RxOverflow) : status);
status = RTL_R16(IntrStatus);
+
+ /* Ignore the parts of status that reflect more than
+ * the enabled interrupts.
+ */
+ smp_rmb();
+ if (!(status & tp->intr_mask & tp->intr_event))
+ break;
}
return IRQ_RETVAL(handled);
--
1.6.2.5
next prev parent reply other threads:[~2009-08-26 7:59 UTC|newest]
Thread overview: 106+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-03-04 17:28 2.6.27.19 + 28.7: network timeouts for r8169 and 8139too Michael Büker
2009-03-04 22:43 ` Francois Romieu
2009-03-06 0:17 ` Michael Büker
2009-03-08 10:27 ` Tom Weber
2009-03-10 5:42 ` Tom Weber
2009-03-09 12:07 ` Rui Santos
2009-03-13 18:29 ` Rui Santos
2009-03-16 13:07 ` Rui Santos
2009-03-22 21:12 ` Francois Romieu
2009-03-22 21:19 ` Michael Buesch
2009-03-22 22:00 ` Francois Romieu
2009-03-22 22:09 ` Michael Buesch
2009-03-22 22:27 ` Francois Romieu
2009-03-22 22:38 ` Michael Buesch
2009-03-23 11:47 ` Michael Buesch
2009-03-23 12:47 ` Michael Buesch
2009-03-23 23:47 ` Francois Romieu
2009-03-24 9:43 ` Michael Buesch
2009-03-23 14:29 ` Michael Büker
2009-03-23 14:57 ` Rui Santos
2009-03-23 15:04 ` Michael Büker
2009-03-25 11:40 ` Rui Santos
2009-04-04 17:50 ` Michael Buesch
2009-05-10 13:38 ` Michael Riepe
2009-05-10 15:01 ` Michael S. Zick
2009-05-10 15:10 ` Michael S. Zick
2009-05-10 15:53 ` Michael Buesch
2009-05-10 16:27 ` Michael Riepe
2009-05-10 17:09 ` Michael S. Zick
2009-05-11 0:29 ` David Dillow
2009-05-11 20:48 ` Michael Buesch
2009-05-11 21:10 ` Michael Buesch
2009-05-11 21:29 ` David Dillow
2009-05-11 21:59 ` Michael Buesch
2009-05-12 20:29 ` Michael Riepe
2009-05-14 2:38 ` David Dillow
2009-05-14 18:37 ` Michael Riepe
2009-05-14 19:14 ` David Dillow
2009-05-14 19:42 ` Michael Riepe
2009-05-23 1:29 ` [PATCH 2.6.30-rc4] r8169: avoid losing MSI interrupts David Dillow
2009-05-23 9:24 ` Michael Buesch
2009-05-23 14:35 ` Michael Riepe
2009-05-23 14:44 ` Michael Buesch
2009-05-23 15:01 ` Michael Riepe
2009-05-23 16:40 ` Michael Buesch
2009-05-23 14:51 ` David Dillow
2009-05-23 16:12 ` Michael Riepe
2009-05-23 16:45 ` Michael Buesch
2009-05-23 16:46 ` David Dillow
2009-05-23 16:50 ` Michael Buesch
2009-05-23 16:53 ` Michael Riepe
2009-05-23 17:03 ` David Dillow
2009-05-24 21:15 ` Francois Romieu
2009-05-24 22:55 ` David Dillow
2009-05-26 5:55 ` David Miller
2009-05-26 18:22 ` Michael Buesch
2009-05-26 21:52 ` David Miller
2009-05-26 22:14 ` David Miller
2009-05-26 22:40 ` Michael Riepe
2009-05-26 22:43 ` David Miller
2009-05-26 23:10 ` David Miller
2009-05-27 16:19 ` Michael Buesch
2009-06-16 19:32 ` Rui Santos
2009-08-21 20:57 ` Eric W. Biederman
2009-08-21 21:22 ` Michael Riepe
2009-08-21 22:59 ` David Dillow
2009-08-21 23:34 ` David Dillow
2009-08-22 0:24 ` Eric W. Biederman
2009-08-22 11:48 ` Eric W. Biederman
2009-08-22 12:07 ` Eric W. Biederman
2009-08-22 20:43 ` David Dillow
2009-08-23 17:17 ` Jarek Poplawski
2009-08-23 17:43 ` Michal Soltys
2009-08-23 17:54 ` Jarek Poplawski
2009-08-24 2:37 ` Eric W. Biederman
2009-08-25 0:51 ` Eric W. Biederman
2009-08-25 2:59 ` David Dillow
2009-08-25 20:22 ` Eric W. Biederman
2009-08-25 20:40 ` David Dillow
2009-08-25 21:24 ` Eric W. Biederman
2009-08-25 21:46 ` David Dillow
2009-08-25 22:19 ` Francois Romieu
2009-08-26 3:47 ` Eric W. Biederman
2009-08-26 7:58 ` Eric W. Biederman [this message]
2009-08-26 13:56 ` [PATCH] r8169: Reduce looping in the interrupt handler David Dillow
2009-08-26 13:59 ` David Dillow
2009-08-26 20:02 ` Eric W. Biederman
2009-08-26 21:30 ` Francois Romieu
2009-08-26 21:40 ` Eric W. Biederman
2009-08-27 5:24 ` Francois Romieu
2009-08-27 5:38 ` Eric W. Biederman
2009-08-27 23:20 ` Francois Romieu
2009-08-28 1:17 ` Eric W. Biederman
2009-08-28 1:29 ` David Dillow
2009-08-30 20:37 ` Francois Romieu
2009-08-30 20:53 ` Eric W. Biederman
2009-09-01 3:33 ` David Dillow
2009-09-01 9:20 ` Francois Romieu
2009-08-25 21:37 ` [PATCH 2.6.30-rc4] r8169: avoid losing MSI interrupts Eric W. Biederman
2009-08-25 21:54 ` David Dillow
2009-08-25 23:11 ` Francois Romieu
2009-05-12 11:10 ` 2.6.27.19 + 28.7: network timeouts for r8169 and 8139too Krzysztof Halasa
2009-05-12 21:45 ` Michael Riepe
2009-05-13 6:11 ` Francois Romieu
2009-05-13 6:27 ` Michael Riepe
2009-05-13 19:34 ` Krzysztof Halasa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m1iqgbknun.fsf_-_@fess.ebiederm.org \
--to=ebiederm@xmission.com \
--cc=dave@thedillows.org \
--cc=linux-kernel@vger.kernel.org \
--cc=m.bueker@berlin.de \
--cc=mb@bu3sch.de \
--cc=michael.riepe@googlemail.com \
--cc=netdev@vger.kernel.org \
--cc=romieu@fr.zoreil.com \
--cc=rsantos@grupopie.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox