netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@osdl.org>
To: Pavel Machek <pavel@ucw.cz>
Cc: jgarzik@pobox.com, netdev@oss.sgi.com, hmacht@suse.de
Subject: Re: [patch] fix suspend/resume on b44
Date: Wed, 21 Sep 2005 14:22:50 -0700	[thread overview]
Message-ID: <20050921142250.30319b23.akpm@osdl.org> (raw)
In-Reply-To: <20050921211332.GA2194@elf.ucw.cz>

Pavel Machek <pavel@ucw.cz> wrote:
>
> Hi!
> 
> > > > > diff --git a/drivers/net/b44.c b/drivers/net/b44.c
> > > > > --- a/drivers/net/b44.c
> > > > > +++ b/drivers/net/b44.c
> > > > > @@ -1930,6 +1930,8 @@ static int b44_suspend(struct pci_dev *p
> > > > >  	b44_free_rings(bp);
> > > > >  
> > > > >  	spin_unlock_irq(&bp->lock);
> > > > > +
> > > > > +	free_irq(dev->irq, dev);
> > > > >  	pci_disable_device(pdev);
> > > > >  	return 0;
> > > > >  }
> > > > > @@ -1946,6 +1948,9 @@ static int b44_resume(struct pci_dev *pd
> > > > >  	if (!netif_running(dev))
> > > > >  		return 0;
> > > > >  
> > > > > +	if (request_irq(dev->irq, b44_interrupt, SA_SHIRQ, dev->name, dev))
> > > > > +		printk(KERN_ERR PFX "%s: request_irq failed\n", dev->name);
> > > > > +
> > > > >  	spin_lock_irq(&bp->lock);
> > > > >  
> > > > >  	b44_init_rings(bp);
> > > > > 
> > > > 
> > > > Why does it hang on suspend/resume?
> > > > 
> > > > This came up a while back and iirc we decided that adding free_irq() to
> > > > every ->suspend() handler in the world was the wrong thing to do.  Do I
> > > > misremember?
> > > 
> > > No, you remember right, but b44 needed that free_irq/request_irq even
> > > because those ACPI changes. I'm not exactly sure why, something went
> > > very wrong otherwise.
> > 
> > Well I guess we should work out what went wrong ;)
> > 
> > What are the symptoms?  Screaming interrupt?  Can't immediately see why. 
> > Does the screaming interrupt detetor trigger and disable the IRQ Line?
> 
> No, it seems like BUG() triggers in
> b44. https://bugzilla.novell.com/show_bug.cgi?id=116088 is for
> basically 2.6.13 kernel (but it was in something as old as 2.6.5,
> too).
>

That's here:

static void b44_tx(struct b44 *bp)
{
	u32 cur, cons;

	cur  = br32(bp, B44_DMATX_STAT) & DMATX_STAT_CDMASK;
	cur /= sizeof(struct dma_desc);

	/* XXX needs updating when NETIF_F_SG is supported */
	for (cons = bp->tx_cons; cons != cur; cons = NEXT_TX(cons)) {
		struct ring_info *rp = &bp->tx_buffers[cons];
		struct sk_buff *skb = rp->skb;

		if (unlikely(skb == NULL))
			BUG();

So I'd assume that the newly-woken driver took an interrupt, decided that a
Tx interrupt was pending then went BUG when it discovered that it hadn't
sent anything.

Would be good to find out the value of istat in b44_interrupt() and poke
maintainers, rather than proferring strange workarounds ;)

      reply	other threads:[~2005-09-21 21:22 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-09-20 13:28 [patch] fix suspend/resume on b44 Pavel Machek
2005-09-20 23:26 ` Andrew Morton
2005-09-21 10:20   ` Pavel Machek
2005-09-21 10:36     ` Andrew Morton
2005-09-21 21:13       ` Pavel Machek
2005-09-21 21:22         ` Andrew Morton [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=20050921142250.30319b23.akpm@osdl.org \
    --to=akpm@osdl.org \
    --cc=hmacht@suse.de \
    --cc=jgarzik@pobox.com \
    --cc=netdev@oss.sgi.com \
    --cc=pavel@ucw.cz \
    /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).