From: Chuck Ebbert <cebbert@redhat.com>
To: "Kok, Auke" <auke-jan.h.kok@intel.com>
Cc: Dave Jones <davej@redhat.com>, David Mack <dmack@juniper.net>,
Herbert Xu <herbert@gondor.apana.org.au>,
netdev@vger.kernel.org, esandeen@redhat.com
Subject: Re: e100 problems in .23rc8 ?
Date: Mon, 22 Oct 2007 10:44:28 -0400 [thread overview]
Message-ID: <471CB74C.4080709@redhat.com> (raw)
In-Reply-To: <47179F1F.3030202@intel.com>
On 10/18/2007 01:59 PM, Kok, Auke wrote:
> David Mack wrote:
>> It appears that the needed e100 fix made it into the Fedora
>> 2.6.23.1-23.fc8 kernel. Boots reliably now.
>>
>> Huge thanks and great work, guys.
>
>
> DaveJ, I didn't push anything upstream. Can you verify this now works?
>
One of our users just posted this:
We observed the same panic on a Dell Dimension 5150 (E510), although not
limited to warm boots. We noticed that the following trace is possible:
- when starting the interface, e100_up() gets called
- it calls e100_hw_init(), which disables e100 IRQ generation
(e100_disable_irq())
- it registers the interrupt handler
- the interrupt handler (e100_intr()) gets called - this happens because the
IRQ line is shared with another device (in this case, the SATA controller)
- the interrupt handler examines the stat_ack register of the interface: even
though interrupts are disabled, an event is indicated and the interrupt handler
proceeds
- the interrupt handler calls netif_rx_schedule_prep(), which sets the
__LINK_STATE_RX_SCHED bit, and __netif_rx_schedule(), which adds the interface
to the poll list
- when the interrupt handler returns, e100_up() calls netif_poll_enable(), thus
clearing the __LINK_STATE_RX_SCHED bit
- now the NET RX softirq (net_rx_action) calls e100_poll(), which in turn calls
netif_rx_complete()
- netif_rx_complete() checks whether the __LINK_STATE_RX_SCHED bit is set and
triggers the panic
To avoid this situation, where the interrupt handler executes although e100
interrupts are disabled, we suggest the attached patch. It lets the interrupt
handler check the interrupt mask bit before proceeding with the interrupt
handling.
Authors: Christof Efkemann <chref@tzi.de>, Kai Thomsen <kthomsen@tzi.de>
Description:
Avoid interrupt handler execution if e100 interrupts are disabled.
Checks the interrupt mask bit before proceeding with the interrupt handling.
--- drivers/net/e100.c.old 2007-10-20 18:32:40.000000000 +0200
+++ drivers/net/e100.c 2007-10-20 18:36:02.000000000 +0200
@@ -1960,11 +1960,13 @@
struct net_device *netdev = dev_id;
struct nic *nic = netdev_priv(netdev);
u8 stat_ack = ioread8(&nic->csr->scb.stat_ack);
+ u8 cmd_hi = ioread8(&nic->csr->scb.cmd_hi);
DPRINTK(INTR, DEBUG, "stat_ack = 0x%02X\n", stat_ack);
if(stat_ack == stat_ack_not_ours || /* Not our interrupt */
- stat_ack == stat_ack_not_present) /* Hardware is ejected */
+ stat_ack == stat_ack_not_present || /* Hardware is ejected */
+ cmd_hi & irq_mask_all) /* Interrupts masked */
return IRQ_NONE;
/* Ack interrupt(s) */
next prev parent reply other threads:[~2007-10-22 14:44 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-26 15:04 e100 problems in .23rc8 ? Dave Jones
2007-09-26 18:10 ` Kok, Auke
2007-09-26 18:18 ` Dave Jones
2007-09-27 6:58 ` Herbert Xu
2007-10-11 0:36 ` Dave Jones
2007-10-11 1:25 ` Herbert Xu
2007-10-11 16:10 ` Kok, Auke
2007-10-11 17:25 ` Dave Jones
2007-10-11 18:56 ` Eric Sandeen
2007-10-12 14:54 ` David Mack
2007-10-12 15:35 ` Herbert Xu
2007-10-12 15:51 ` David Mack
2007-10-13 2:35 ` Herbert Xu
2007-10-16 14:33 ` Eric Sandeen
2007-10-16 14:35 ` Herbert Xu
2007-10-16 15:47 ` Eric Sandeen
2007-10-16 16:39 ` David Mack
2007-10-12 17:04 ` Kok, Auke
2007-10-18 17:51 ` David Mack
2007-10-18 17:59 ` Kok, Auke
2007-10-18 18:17 ` Chuck Ebbert
2007-10-22 1:04 ` Dave Jones
2007-10-22 3:10 ` Herbert Xu
2007-10-22 14:05 ` David Mack
2007-10-22 14:59 ` Eric Sandeen
2007-10-22 14:44 ` Chuck Ebbert [this message]
2007-10-11 23:24 ` Herbert Xu
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=471CB74C.4080709@redhat.com \
--to=cebbert@redhat.com \
--cc=auke-jan.h.kok@intel.com \
--cc=davej@redhat.com \
--cc=dmack@juniper.net \
--cc=esandeen@redhat.com \
--cc=herbert@gondor.apana.org.au \
--cc=netdev@vger.kernel.org \
/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;
as well as URLs for NNTP newsgroup(s).