From: James Hogan <james@albanarts.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Gary Zambrano <zambrano@broadcom.com>,
Jiri Pirko <jpirko@redhat.com>,
FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
Hauke Mehrtens <hauke@hauke-m.de>,
Larry Finger <Larry.Finger@lwfinger.net>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
"David S. Miller" <davem@davemloft.net>
Subject: Re: [PATCH] b44: fix resume, request_irq after hw reset
Date: Tue, 12 Oct 2010 08:08:05 +0100 [thread overview]
Message-ID: <201010120808.05713.james@albanarts.com> (raw)
In-Reply-To: <20101011163440.072e0227.akpm@linux-foundation.org>
On Tuesday 12 October 2010 00:34:40 Andrew Morton wrote:
> On Tue, 12 Oct 2010 00:22:12 +0100
>
> James Hogan <james@albanarts.com> wrote:
> > This driver was hanging on resume because it was requesting a shared irq
> > that it wasn't ready to immediately handle, which was tested in
> > request_irq because of the CONFIG_DEBUG_SHIRQ config option. The
> > interrupt handler tried to read the interrupt status register but for
> > some reason it hung the system.
> >
> > The request_irq is now moved a bit later after resetting the hardware
> > which seems to fix it.
> >
> > Signed-off-by: James Hogan <james@albanarts.com>
> > ---
> >
> > drivers/net/b44.c | 12 ++++++------
> > 1 files changed, 6 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/net/b44.c b/drivers/net/b44.c
> > index 1e620e2..dbba981 100644
> > --- a/drivers/net/b44.c
> > +++ b/drivers/net/b44.c
> > @@ -2296,12 +2296,6 @@ static int b44_resume(struct ssb_device *sdev)
> >
> > if (!netif_running(dev))
> >
> > return 0;
> >
> > - rc = request_irq(dev->irq, b44_interrupt, IRQF_SHARED, dev->name,
dev);
> > - if (rc) {
> > - netdev_err(dev, "request_irq failed\n");
> > - return rc;
> > - }
> > -
> >
> > spin_lock_irq(&bp->lock);
> >
> > b44_init_rings(bp);
> >
> > @@ -2309,6 +2303,12 @@ static int b44_resume(struct ssb_device *sdev)
> >
> > netif_device_attach(bp->dev);
> > spin_unlock_irq(&bp->lock);
> >
> > + rc = request_irq(dev->irq, b44_interrupt, IRQF_SHARED, dev->name,
dev);
> > + if (rc) {
> > + netdev_err(dev, "request_irq failed\n");
> > + return rc;
> > + }
> > +
> >
> > b44_enable_ints(bp);
> > netif_wake_queue(dev);
>
> OK, running the interrupt handler before b44_init_hw() is presumably
> the problem here.
>
> The hardware surely won't be generating interrupts until we've run
> b44_init_hw() and b44_enable_ints(), so this patch really is only to
> keep CONFIG_DEBUG_SHIRQ happy.
For me it's mainly to keep CONFIG_DEBUG_SHIRQ happy (Fedora has this switched
on), but since it's a shared IRQ, there is still a chance it could be
called before enabling it's own interrupts by a different device on the same
IRQ.
It makes sense to me why it's disabling the IRQ now, in case another device
triggers it when it cannot handle it safely. I also tried calling the
interrupt directly before the free_irq in the suspend function to check that
it wasn't being done too late, and it didn't fail, so possibly it is the core
suspension that makes it start failing until it is brought back up properly.
Cheers
James
next prev parent reply other threads:[~2010-10-12 7:08 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-11 23:22 [PATCH] b44: fix resume, request_irq after hw reset James Hogan
2010-10-11 23:34 ` Andrew Morton
2010-10-12 7:08 ` James Hogan [this message]
2010-10-12 7:27 ` Andrew Morton
2010-10-12 8:40 ` James Hogan
2010-10-13 16:46 ` David Miller
2010-10-13 21:39 ` James Hogan
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=201010120808.05713.james@albanarts.com \
--to=james@albanarts.com \
--cc=Larry.Finger@lwfinger.net \
--cc=akpm@linux-foundation.org \
--cc=davem@davemloft.net \
--cc=fujita.tomonori@lab.ntt.co.jp \
--cc=hauke@hauke-m.de \
--cc=jpirko@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=zambrano@broadcom.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