All of lore.kernel.org
 help / color / mirror / Atom feed
From: James Hogan <james@albanarts.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: bugzilla-daemon@bugzilla.kernel.org,
	bugme-daemon@bugzilla.kernel.org, netdev@vger.kernel.org,
	Gary Zambrano <zambrano@broadcom.com>
Subject: Re: [Bugme-new] [Bug 19992] New: b44 + CONFIG_DEBUG_SHIRQ (=y on fedora) fails to resume
Date: Tue, 12 Oct 2010 00:26:20 +0100	[thread overview]
Message-ID: <201010120026.20746.james@albanarts.com> (raw)
In-Reply-To: <20101011131539.bbb99afe.akpm@linux-foundation.org>

On Monday 11 October 2010 21:15:39 Andrew Morton wrote:
> (switched to email.  Please respond via emailed reply-to-all, not via the
> bugzilla web interface).
> 
> On Sun, 10 Oct 2010 16:57:11 GMT
> 
> bugzilla-daemon@bugzilla.kernel.org wrote:
> > https://bugzilla.kernel.org/show_bug.cgi?id=19992
> > 
> >            Summary: b44 + CONFIG_DEBUG_SHIRQ (=y on fedora) fails to
> >            
> >                     resume
> >            
> >            Product: Drivers
> >            Version: 2.5
> >     
> >     Kernel Version: 2.6.36-rc7
> >     
> >           Platform: All
> >         
> >         OS/Version: Linux
> >         
> >               Tree: Mainline
> >             
> >             Status: NEW
> >           
> >           Severity: high
> >           Priority: P1
> >          
> >          Component: Network
> >         
> >         AssignedTo: drivers_network@kernel-bugs.osdl.org
> >         ReportedBy: james@albanarts.com
> >         Regression: Yes
> > 
> > b44 network driver causes system to hang on resume when
> > CONFIG_DEBUG_SHIRQ=y. I've done some TRACE_RESUME'ing and the following
> > happens:
> > * b44_resume() (drivers/net/b44.c) calls request_irq with IRQF_SHARED
> > (after freeing it in the suspend function)
> > * request_irq() (kernel/irq/manage.c) calls the interrupt handler
> > directly if IRQF_SHARED and CONFIG_DEBUG_SHIRQ=y. It says "It's a shared
> > IRQ -- the driver ought to be prepared for it to happen immediately, so
> > let's make sure...."
> > 
> > * b44_interrupt() gets as far as the first br32 and no further:
> >   istat = br32(bp, B44_ISTAT);
> > 
> > I presume it hasn't yet woken the device up so reading a register somehow
> > fails and hangs the system.
> > 
> > If I comment out the code in request_irq() to test the shared irq handler
> > all works fine.
> > 
> > I'm guessing either the b44 driver shouldn't be freeing/requesting irqs
> > in suspend/resume functions, or should be resetting the hardware first
> > so that the test handler call doesn't fail, but I don't know enough
> > about why it is freeing the irq across suspend to be confident fixing
> > it.
> > 
> > This has been like this for a while (2.6.34 at least). Suspend used to
> > work on fedora with this hardware so I think this is a regression. I'm
> > happy to test any patches.
> 
> Thanks.  Yup, if the driver/device isn't ready to accept an IRQ when
> request_irq() is called then there might be a problem should a real
> interrupt happen very shortly after request_irq() is called.
> 
> The code looks OK to me so perhaps it is indeed some weird hardware
> problem.  Maybe a little delay after the ssb_bus_powerup() is needed?

Thanks for the ideas. I tried a delay and it didn't work, but when I moved the 
request_irq after the spinlocked code which appears to reset the hardware, all 
was fine, which kind of makes sense.

See patch "b44: fix resume, request_irq after hw reset"

Cheers
James

      reply	other threads:[~2010-10-11 23:26 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <bug-19992-10286@https.bugzilla.kernel.org/>
2010-10-11 20:15 ` [Bugme-new] [Bug 19992] New: b44 + CONFIG_DEBUG_SHIRQ (=y on fedora) fails to resume Andrew Morton
2010-10-11 23:26   ` James Hogan [this message]

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=201010120026.20746.james@albanarts.com \
    --to=james@albanarts.com \
    --cc=akpm@linux-foundation.org \
    --cc=bugme-daemon@bugzilla.kernel.org \
    --cc=bugzilla-daemon@bugzilla.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.