On Friday 23 September 2005 18.52, Rafael J. Wysocki wrote:
> Hi,
> 
> [sorry for the delay]

[same :]

> 
> On Sunday, 18 of September 2005 23:49, Daniel Ritz wrote:
> ]--snip--[
> > > 
> > > BTW, please have a look at:
> > > http://bugzilla.kernel.org/show_bug.cgi?id=4416#c36
> > > and
> > > http://bugzilla.kernel.org/show_bug.cgi?id=4416#c37
> > > 
> > 
> > interesting. i'd say we get interrupt storms from usb which then hurt when
> > yenta has it's handler installed but usb has not. usb/hcd-pci.c frees the
> > irq on suspend...so it may be enough not to do that (survives suspend-to-ram
> > and suspend-to-disk here. yes, restore too :)
> > 
> > could you give that a tree w/o any free_irq-patches for yenta and co?
> 
> I've tried and it apparently works provided that _none_ of the IRQ-sharing
> devices drops the IRQ on suspend.

ok. i didn't look too close, but i think ohci-hcd does not fully disable 
interrupts
in it's suspend callback...needs a closer look. cc:ing linux-usb-devel...

> 
> I think that's the whole point: Either all of the devices should drop/request
> IRQs on suspend/resume, or none of them should do this.  IMHO we need to
> chose one of these options and call it "the right way" or there always
> will be problems with this.
> 

cc:ing linus since he seems to have a strong opinion about that 
free_irq-in-suspend
thing...not doing it for USB fixes the problem for both cases: APM suspend and 
ACPI
suspend...

> Greetings,
> Rafael

rgds
-daniel

> 
> 
> > diff --git a/drivers/usb/core/hcd-pci.c b/drivers/usb/core/hcd-pci.c
> > --- a/drivers/usb/core/hcd-pci.c
> > +++ b/drivers/usb/core/hcd-pci.c
> > @@ -242,7 +242,9 @@ int usb_hcd_pci_suspend (struct pci_dev 
> >     case HC_STATE_SUSPENDED:
> >             /* no DMA or IRQs except when HC is active */
> >             if (dev->current_state == PCI_D0) {
> > +#if 0
> >                     free_irq (hcd->irq, hcd);
> > +#endif
> >                     pci_save_state (dev);
> >                     pci_disable_device (dev);
> >             }
> > @@ -374,6 +376,7 @@ int usb_hcd_pci_resume (struct pci_dev *
> >  
> >     hcd->state = HC_STATE_RESUMING;
> >     hcd->saw_irq = 0;
> > +#if 0
> >     retval = request_irq (dev->irq, usb_hcd_irq, SA_SHIRQ,
> >                             hcd->irq_descr, hcd);
> >     if (retval < 0) {
> > @@ -382,6 +385,7 @@ int usb_hcd_pci_resume (struct pci_dev *
> >             usb_hc_died (hcd);
> >             return retval;
> >     }
> > +#endif
> >  
> >     retval = hcd->driver->resume (hcd);
> >     if (!HC_IS_RUNNING (hcd->state)) {
> > 
> > 
> 


-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to