mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* RE: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
@ 2005-03-25 12:54 Li, Shaohua
  2005-03-25 14:19 ` Rafael J. Wysocki
  0 siblings, 1 reply; 9+ messages in thread
From: Li, Shaohua @ 2005-03-25 12:54 UTC (permalink / raw)
  To: Rafael J. Wysocki, Andrew Morton; +Cc: Brown, Len, linux-kernel, Pavel Machek

Hi,
>On Friday, 25 of March 2005 09:21, Andrew Morton wrote:
>>
>> ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.12-
>rc1/2.6.12-rc1-mm3/
>>
>> - Mainly a bunch of fixes relative to 2.6.12-rc1-mm2.
>
>First, rmmod works again (thanks ;-)).
>
>> - Again, we'd like people who have had recent DRM and USB resume
problems
>to
>>   test and report, please.
>
>My box is still hanged solid on resume (swsusp) by the drivers:
>
>ohci_hcd
>ehci_hcd
>yenta_socket
>
>possibly others, too.  To avoid this, I had to revert the following
patch
>from
>the Len's tree:
>
>diff -Naru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
>--- a/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
>+++ b/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
>@@ -72,10 +72,12 @@
> 	u8			active;			/* Current IRQ
*/
> 	u8			edge_level;		/* All IRQs */
> 	u8			active_high_low;	/* All IRQs */
>-	u8			initialized;
> 	u8			resource_type;
> 	u8			possible_count;
> 	u8			possible[ACPI_PCI_LINK_MAX_POSSIBLE];
>+	u8			initialized:1;
>+	u8			suspend_resume:1;
>+	u8			reserved:6;
> };
>
> struct acpi_pci_link {
>@@ -530,6 +532,10 @@
>
> 	ACPI_FUNCTION_TRACE("acpi_pci_link_allocate");
>
>+	if (link->irq.suspend_resume) {
>+		acpi_pci_link_set(link, link->irq.active);
>+		link->irq.suspend_resume = 0;
>+	}
> 	if (link->irq.initialized)
> 		return_VALUE(0);

How about just remove below line:
>+		acpi_pci_link_set(link, link->irq.active);

Thanks,
Shaohua

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
  2005-03-25 12:54 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers Li, Shaohua
@ 2005-03-25 14:19 ` Rafael J. Wysocki
  2005-03-26 18:23   ` Rafael J. Wysocki
  0 siblings, 1 reply; 9+ messages in thread
From: Rafael J. Wysocki @ 2005-03-25 14:19 UTC (permalink / raw)
  To: Li, Shaohua, Andrew Morton; +Cc: Brown, Len, linux-kernel, Pavel Machek

Hi,

On Friday, 25 of March 2005 13:54, you wrote:
]--snip--[
> >My box is still hanged solid on resume (swsusp) by the drivers:
> >
> >ohci_hcd
> >ehci_hcd
> >yenta_socket
> >
> >possibly others, too.  To avoid this, I had to revert the following
> patch from the Len's tree:
> >
> >diff -Naru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
> >--- a/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
> >+++ b/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
> >@@ -72,10 +72,12 @@
> > 	u8			active;			/* Current IRQ
> */
> > 	u8			edge_level;		/* All IRQs */
> > 	u8			active_high_low;	/* All IRQs */
> >-	u8			initialized;
> > 	u8			resource_type;
> > 	u8			possible_count;
> > 	u8			possible[ACPI_PCI_LINK_MAX_POSSIBLE];
> >+	u8			initialized:1;
> >+	u8			suspend_resume:1;
> >+	u8			reserved:6;
> > };
> >
> > struct acpi_pci_link {
> >@@ -530,6 +532,10 @@
> >
> > 	ACPI_FUNCTION_TRACE("acpi_pci_link_allocate");
> >
> >+	if (link->irq.suspend_resume) {
> >+		acpi_pci_link_set(link, link->irq.active);
> >+		link->irq.suspend_resume = 0;
> >+	}
> > 	if (link->irq.initialized)
> > 		return_VALUE(0);
> 
> How about just remove below line:
> >+		acpi_pci_link_set(link, link->irq.active);

You mean apply the patch again and remove just the single
line?  No effect (ie hangs).

Greets,
Rafael


-- 
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
  2005-03-25 14:19 ` Rafael J. Wysocki
@ 2005-03-26 18:23   ` Rafael J. Wysocki
  2005-03-26 19:07     ` Rafael J. Wysocki
  2005-03-28  1:22     ` Li Shaohua
  0 siblings, 2 replies; 9+ messages in thread
From: Rafael J. Wysocki @ 2005-03-26 18:23 UTC (permalink / raw)
  To: Li, Shaohua; +Cc: Andrew Morton, Brown, Len, linux-kernel, Pavel Machek

Hi,

On Friday, 25 of March 2005 15:19, Rafael J. Wysocki wrote: 
> On Friday, 25 of March 2005 13:54, you wrote:
> ]--snip--[
> > >My box is still hanged solid on resume (swsusp) by the drivers:
> > >
> > >ohci_hcd
> > >ehci_hcd
> > >yenta_socket
> > >
> > >possibly others, too.  To avoid this, I had to revert the following
> > patch from the Len's tree:
> > >
> > >diff -Naru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
> > >--- a/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
> > >+++ b/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
> > >@@ -72,10 +72,12 @@
> > > 	u8			active;			/* Current IRQ
> > */
> > > 	u8			edge_level;		/* All IRQs */
> > > 	u8			active_high_low;	/* All IRQs */
> > >-	u8			initialized;
> > > 	u8			resource_type;
> > > 	u8			possible_count;
> > > 	u8			possible[ACPI_PCI_LINK_MAX_POSSIBLE];
> > >+	u8			initialized:1;
> > >+	u8			suspend_resume:1;
> > >+	u8			reserved:6;
> > > };
> > >
> > > struct acpi_pci_link {
> > >@@ -530,6 +532,10 @@
> > >
> > > 	ACPI_FUNCTION_TRACE("acpi_pci_link_allocate");
> > >
> > >+	if (link->irq.suspend_resume) {
> > >+		acpi_pci_link_set(link, link->irq.active);
> > >+		link->irq.suspend_resume = 0;
> > >+	}
> > > 	if (link->irq.initialized)
> > > 		return_VALUE(0);
> > 
> > How about just remove below line:
> > >+		acpi_pci_link_set(link, link->irq.active);
> 
> You mean apply the patch again and remove just the single
> line?  No effect (ie hangs).

It looks like removing this line couldn't help.

Apparently, acpi_pci_link_set(link, link->irq.active) must be called
_before_ the call to pci_write_config_word() in
drivers/pci/pci.c:pci_set_power_state(), because the box hangs
otherwise.  However, with the patch applied,
acpi_pci_link_set(link, link->irq.active) is only called through
pcibios_enable_irq() in pcibios_enable_device(), which is _after_
the call to pci_set_power_state() in pci_enable_device_bars(),
so it's too late.

Hence, it seems, if you really want to get rid of the
irqrouter_resume(), whatever the reason, the simplest fix
seems to be to change the order of calls to pci_set_power_state()
and pcibios_enable_device() in pci_enable_device_bars():

--- old/drivers/pci/pci.c	2005-03-26 19:10:09.000000000 +0100
+++ linux-2.6.12-rc1-mm2/drivers/pci/pci.c	2005-03-26 19:10:54.000000000 +0100
@@ -442,9 +442,9 @@ pci_enable_device_bars(struct pci_dev *d
 {
 	int err;
 
-	pci_set_power_state(dev, PCI_D0);
 	if ((err = pcibios_enable_device(dev, bars)) < 0)
 		return err;
+	pci_set_power_state(dev, PCI_D0);
 	return 0;
 }
 
though I'm not sure if that's legal.

Greets,
Rafael 


-- 
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
  2005-03-26 18:23   ` Rafael J. Wysocki
@ 2005-03-26 19:07     ` Rafael J. Wysocki
  2005-03-28  1:22     ` Li Shaohua
  1 sibling, 0 replies; 9+ messages in thread
From: Rafael J. Wysocki @ 2005-03-26 19:07 UTC (permalink / raw)
  To: Li, Shaohua; +Cc: Andrew Morton, Brown, Len, linux-kernel, Pavel Machek

On Saturday, 26 of March 2005 19:23, Rafael J. Wysocki wrote:
> Hi,
> 
> On Friday, 25 of March 2005 15:19, Rafael J. Wysocki wrote: 
> > On Friday, 25 of March 2005 13:54, you wrote:
> > ]--snip--[
> > > >My box is still hanged solid on resume (swsusp) by the drivers:
> > > >
> > > >ohci_hcd
> > > >ehci_hcd
> > > >yenta_socket
> > > >
> > > >possibly others, too.  To avoid this, I had to revert the following
> > > patch from the Len's tree:
> > > >
> > > >diff -Naru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
> > > >--- a/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
> > > >+++ b/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
> > > >@@ -72,10 +72,12 @@
> > > > 	u8			active;			/* Current IRQ
> > > */
> > > > 	u8			edge_level;		/* All IRQs */
> > > > 	u8			active_high_low;	/* All IRQs */
> > > >-	u8			initialized;
> > > > 	u8			resource_type;
> > > > 	u8			possible_count;
> > > > 	u8			possible[ACPI_PCI_LINK_MAX_POSSIBLE];
> > > >+	u8			initialized:1;
> > > >+	u8			suspend_resume:1;
> > > >+	u8			reserved:6;
> > > > };
> > > >
> > > > struct acpi_pci_link {
> > > >@@ -530,6 +532,10 @@
> > > >
> > > > 	ACPI_FUNCTION_TRACE("acpi_pci_link_allocate");
> > > >
> > > >+	if (link->irq.suspend_resume) {
> > > >+		acpi_pci_link_set(link, link->irq.active);
> > > >+		link->irq.suspend_resume = 0;
> > > >+	}
> > > > 	if (link->irq.initialized)
> > > > 		return_VALUE(0);
> > > 
> > > How about just remove below line:
> > > >+		acpi_pci_link_set(link, link->irq.active);
> > 
> > You mean apply the patch again and remove just the single
> > line?  No effect (ie hangs).
> 
> It looks like removing this line couldn't help.
> 
> Apparently, acpi_pci_link_set(link, link->irq.active) must be called
> _before_ the call to pci_write_config_word() in
> drivers/pci/pci.c:pci_set_power_state(), because the box hangs
> otherwise.  However, with the patch applied,
> acpi_pci_link_set(link, link->irq.active) is only called through
> pcibios_enable_irq() in pcibios_enable_device(), which is _after_
> the call to pci_set_power_state() in pci_enable_device_bars(),
> so it's too late.
> 
> Hence, it seems, if you really want to get rid of the
> irqrouter_resume(), whatever the reason, the simplest fix
> seems to be to change the order of calls to pci_set_power_state()
> and pcibios_enable_device() in pci_enable_device_bars():

Sorry, forget it.  It was a good theory that didn't work.

It seems that we have to set all of the PCI links or at least some
of them before we start calling pci_set_power_state().

Greets,
Rafael


-- 
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
  2005-03-26 18:23   ` Rafael J. Wysocki
  2005-03-26 19:07     ` Rafael J. Wysocki
@ 2005-03-28  1:22     ` Li Shaohua
  2005-03-29 10:33       ` Rafael J. Wysocki
  1 sibling, 1 reply; 9+ messages in thread
From: Li Shaohua @ 2005-03-28  1:22 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: Andrew Morton, Len Brown, lkml, Pavel Machek

On Sun, 2005-03-27 at 02:23, Rafael J. Wysocki wrote:
> Hi,
> 
> On Friday, 25 of March 2005 15:19, Rafael J. Wysocki wrote: 
> > On Friday, 25 of March 2005 13:54, you wrote:
> > ]--snip--[
> > > >My box is still hanged solid on resume (swsusp) by the drivers:
> > > >
> > > >ohci_hcd
> > > >ehci_hcd
> > > >yenta_socket
> > > >
> > > >possibly others, too.  To avoid this, I had to revert the following
> > > patch from the Len's tree:
> > > >
> > > >diff -Naru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
> > > >--- a/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
> > > >+++ b/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
> > > >@@ -72,10 +72,12 @@
> > > > 	u8			active;			/* Current IRQ
> > > */
> > > > 	u8			edge_level;		/* All IRQs */
> > > > 	u8			active_high_low;	/* All IRQs */
> > > >-	u8			initialized;
> > > > 	u8			resource_type;
> > > > 	u8			possible_count;
> > > > 	u8			possible[ACPI_PCI_LINK_MAX_POSSIBLE];
> > > >+	u8			initialized:1;
> > > >+	u8			suspend_resume:1;
> > > >+	u8			reserved:6;
> > > > };
> > > >
> > > > struct acpi_pci_link {
> > > >@@ -530,6 +532,10 @@
> > > >
> > > > 	ACPI_FUNCTION_TRACE("acpi_pci_link_allocate");
> > > >
> > > >+	if (link->irq.suspend_resume) {
> > > >+		acpi_pci_link_set(link, link->irq.active);
> > > >+		link->irq.suspend_resume = 0;
> > > >+	}
> > > > 	if (link->irq.initialized)
> > > > 		return_VALUE(0);
> > > 
> > > How about just remove below line:
> > > >+		acpi_pci_link_set(link, link->irq.active);
> > 
> > You mean apply the patch again and remove just the single
> > line?  No effect (ie hangs).
> 
> It looks like removing this line couldn't help.
> 
> Apparently, acpi_pci_link_set(link, link->irq.active) must be called
> _before_ the call to pci_write_config_word() in
> drivers/pci/pci.c:pci_set_power_state(), because the box hangs
> otherwise.  However, with the patch applied,
> acpi_pci_link_set(link, link->irq.active) is only called through
> pcibios_enable_irq() in pcibios_enable_device(), which is _after_
> the call to pci_set_power_state() in pci_enable_device_bars(),
> so it's too late.
> 
> Hence, it seems, if you really want to get rid of the
> irqrouter_resume(), whatever the reason, the simplest fix
> seems to be to change the order of calls to pci_set_power_state()
> and pcibios_enable_device() in pci_enable_device_bars():
> 
> --- old/drivers/pci/pci.c	2005-03-26 19:10:09.000000000 +0100
> +++ linux-2.6.12-rc1-mm2/drivers/pci/pci.c	2005-03-26 19:10:54.000000000 +0100
> @@ -442,9 +442,9 @@ pci_enable_device_bars(struct pci_dev *d
>  {
>  	int err;
>  
> -	pci_set_power_state(dev, PCI_D0);
>  	if ((err = pcibios_enable_device(dev, bars)) < 0)
>  		return err;
> +	pci_set_power_state(dev, PCI_D0);
>  	return 0;
>  }
>  
> though I'm not sure if that's legal.
Hmm, no, pci_set_power_state should be called before
pcibios_enable_device, otherwise enable_device may fail. This is very
strange. In boot time, there also are uninitialized link devices, I'm
wonder why the call of pci_enable_device_bars doesn't fail in boot time.
Did you find the bug only in specific system?

Could you please file a bug in bugzilla? I don't want to lose the
context of thread. And please attach your acpidmp output in the bug.

Thanks,
Shaohua


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
  2005-03-28  1:22     ` Li Shaohua
@ 2005-03-29 10:33       ` Rafael J. Wysocki
  0 siblings, 0 replies; 9+ messages in thread
From: Rafael J. Wysocki @ 2005-03-29 10:33 UTC (permalink / raw)
  To: Li Shaohua; +Cc: Andrew Morton, Len Brown, lkml, Pavel Machek

Hi,

On Monday, 28 of March 2005 03:22, Li Shaohua wrote:
> On Sun, 2005-03-27 at 02:23, Rafael J. Wysocki wrote:
]--snip--[ 
> Could you please file a bug in bugzilla? I don't want to lose the
> context of thread. And please attach your acpidmp output in the bug.

The bug report is at:

http://bugzilla.kernel.org/show_bug.cgi?id=4416

I've put there all the information related to it that I've already collected.

Greets,
Rafael


-- 
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
  2005-05-02 22:54   ` Andrew Morton
@ 2005-05-03 19:34     ` Rafael J. Wysocki
  0 siblings, 0 replies; 9+ messages in thread
From: Rafael J. Wysocki @ 2005-05-03 19:34 UTC (permalink / raw)
  To: Andrew Morton; +Cc: len.brown, linux-kernel, shaohua.li, pavel

Hi,

On Tuesday, 3 of May 2005 00:54, Andrew Morton wrote:
> "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
> >
> > Hi,
> > 
> > On Friday, 25 of March 2005 09:21, Andrew Morton wrote:
> > > 
> > > ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.12-rc1/2.6.12-rc1-mm3/
> > > 
> > > - Mainly a bunch of fixes relative to 2.6.12-rc1-mm2.
> > 
> > First, rmmod works again (thanks ;-)).
> > 
> > > - Again, we'd like people who have had recent DRM and USB resume problems to
> > >   test and report, please.
> > 
> > My box is still hanged solid on resume (swsusp) by the drivers:
> > 
> > ohci_hcd
> > ehci_hcd
> > yenta_socket
> > 
> > possibly others, too.  To avoid this, I had to revert the following patch from
> > the Len's tree:
> 
> Rafael, does this problem still exist in latest -mm?

Yes, it does.  I've already updated its bugzilla entry
(http://bugzilla.kernel.org/show_bug.cgi?id=4416).

Greets,
Rafael

-- 
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
  2005-03-25 11:29 ` 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers Rafael J. Wysocki
@ 2005-05-02 22:54   ` Andrew Morton
  2005-05-03 19:34     ` Rafael J. Wysocki
  0 siblings, 1 reply; 9+ messages in thread
From: Andrew Morton @ 2005-05-02 22:54 UTC (permalink / raw)
  To: Rafael J. Wysocki; +Cc: len.brown, linux-kernel, shaohua.li, pavel

"Rafael J. Wysocki" <rjw@sisk.pl> wrote:
>
> Hi,
> 
> On Friday, 25 of March 2005 09:21, Andrew Morton wrote:
> > 
> > ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.12-rc1/2.6.12-rc1-mm3/
> > 
> > - Mainly a bunch of fixes relative to 2.6.12-rc1-mm2.
> 
> First, rmmod works again (thanks ;-)).
> 
> > - Again, we'd like people who have had recent DRM and USB resume problems to
> >   test and report, please.
> 
> My box is still hanged solid on resume (swsusp) by the drivers:
> 
> ohci_hcd
> ehci_hcd
> yenta_socket
> 
> possibly others, too.  To avoid this, I had to revert the following patch from
> the Len's tree:

Rafael, does this problem still exist in latest -mm?

I think it does...


> diff -Naru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
> --- a/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
> +++ b/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
> @@ -72,10 +72,12 @@
>  	u8			active;			/* Current IRQ */
>  	u8			edge_level;		/* All IRQs */
>  	u8			active_high_low;	/* All IRQs */
> -	u8			initialized;
>  	u8			resource_type;
>  	u8			possible_count;
>  	u8			possible[ACPI_PCI_LINK_MAX_POSSIBLE];
> +	u8			initialized:1;
> +	u8			suspend_resume:1;
> +	u8			reserved:6;
>  };
>  
>  struct acpi_pci_link {
> @@ -530,6 +532,10 @@
>  
>  	ACPI_FUNCTION_TRACE("acpi_pci_link_allocate");
>  
> +	if (link->irq.suspend_resume) {
> +		acpi_pci_link_set(link, link->irq.active);
> +		link->irq.suspend_resume = 0;
> +	}
>  	if (link->irq.initialized)
>  		return_VALUE(0);
>  
> @@ -713,38 +719,24 @@
>  	return_VALUE(result);
>  }
>  
> -
> -static int
> -acpi_pci_link_resume (
> -	struct acpi_pci_link	*link)
> -{
> -	ACPI_FUNCTION_TRACE("acpi_pci_link_resume");
> -	
> -	if (link->irq.active && link->irq.initialized)
> -		return_VALUE(acpi_pci_link_set(link, link->irq.active));
> -	else
> -		return_VALUE(0);
> -}
> -
> -
>  static int
> -irqrouter_resume(
> -	struct sys_device *dev)
> +irqrouter_suspend(
> +	struct sys_device *dev,
> +	u32	state)
>  {
>  	struct list_head        *node = NULL;
>  	struct acpi_pci_link    *link = NULL;
>  
> -	ACPI_FUNCTION_TRACE("irqrouter_resume");
> +	ACPI_FUNCTION_TRACE("irqrouter_suspend");
>  
>  	list_for_each(node, &acpi_link.entries) {
> -
>  		link = list_entry(node, struct acpi_pci_link, node);
>  		if (!link) {
>  			ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid link context\n"));
>  			continue;
>  		}
> -
> -		acpi_pci_link_resume(link);
> +		if (link->irq.active && link->irq.initialized)
> +			link->irq.suspend_resume = 1;
>  	}
>  	return_VALUE(0);
>  }
> @@ -856,7 +848,7 @@
>  
>  static struct sysdev_class irqrouter_sysdev_class = {
>          set_kset_name("irqrouter"),
> -        .resume = irqrouter_resume,
> +        .suspend = irqrouter_suspend,
>  };
>  
>  
> # This is a BitKeeper generated diff -Nru style patch.
> #
> # ChangeSet
> #   2005/03/18 16:30:29-05:00 len.brown@intel.com 
> #   [ACPI] S3 Suspend to RAM: interrupt resume fix
> #   
> #   Delete PCI Interrupt Link Device .resume method --
> #   it is the device driver's job to request interrupts,
> #   not the Link's job to remember what the devices want.
> #   
> #   This addresses the issue of attempting to run
> #   the ACPI interpreter too early in resume, when
> #   interrupts are still disabled.
> #   
> #   http://bugzilla.kernel.org/show_bug.cgi?id=3469
> #   
> #   Signed-off-by: David Shaohua Li <shaohua.li@intel.com>
> #   Signed-off-by: Len Brown <len.brown@intel.com>
> # 
> # drivers/acpi/pci_link.c
> #   2005/03/02 22:23:50-05:00 len.brown@intel.com +14 -22
> #   Delete PCI Interrupt Link .resume method
> # 
> 
> Greets,
> Rafael
> 
> 
> -- 
> - Would you tell me, please, which way I ought to go from here?
> - That depends a good deal on where you want to get to.
> 		-- Lewis Carroll "Alice's Adventures in Wonderland"

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
  2005-03-25  8:21 2.6.12-rc1-mm3 Andrew Morton
@ 2005-03-25 11:29 ` Rafael J. Wysocki
  2005-05-02 22:54   ` Andrew Morton
  0 siblings, 1 reply; 9+ messages in thread
From: Rafael J. Wysocki @ 2005-03-25 11:29 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Len Brown, linux-kernel, Li Shaohua, Pavel Machek

Hi,

On Friday, 25 of March 2005 09:21, Andrew Morton wrote:
> 
> ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.12-rc1/2.6.12-rc1-mm3/
> 
> - Mainly a bunch of fixes relative to 2.6.12-rc1-mm2.

First, rmmod works again (thanks ;-)).

> - Again, we'd like people who have had recent DRM and USB resume problems to
>   test and report, please.

My box is still hanged solid on resume (swsusp) by the drivers:

ohci_hcd
ehci_hcd
yenta_socket

possibly others, too.  To avoid this, I had to revert the following patch from
the Len's tree:

diff -Naru a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
--- a/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
+++ b/drivers/acpi/pci_link.c	2005-03-24 04:57:27 -08:00
@@ -72,10 +72,12 @@
 	u8			active;			/* Current IRQ */
 	u8			edge_level;		/* All IRQs */
 	u8			active_high_low;	/* All IRQs */
-	u8			initialized;
 	u8			resource_type;
 	u8			possible_count;
 	u8			possible[ACPI_PCI_LINK_MAX_POSSIBLE];
+	u8			initialized:1;
+	u8			suspend_resume:1;
+	u8			reserved:6;
 };
 
 struct acpi_pci_link {
@@ -530,6 +532,10 @@
 
 	ACPI_FUNCTION_TRACE("acpi_pci_link_allocate");
 
+	if (link->irq.suspend_resume) {
+		acpi_pci_link_set(link, link->irq.active);
+		link->irq.suspend_resume = 0;
+	}
 	if (link->irq.initialized)
 		return_VALUE(0);
 
@@ -713,38 +719,24 @@
 	return_VALUE(result);
 }
 
-
-static int
-acpi_pci_link_resume (
-	struct acpi_pci_link	*link)
-{
-	ACPI_FUNCTION_TRACE("acpi_pci_link_resume");
-	
-	if (link->irq.active && link->irq.initialized)
-		return_VALUE(acpi_pci_link_set(link, link->irq.active));
-	else
-		return_VALUE(0);
-}
-
-
 static int
-irqrouter_resume(
-	struct sys_device *dev)
+irqrouter_suspend(
+	struct sys_device *dev,
+	u32	state)
 {
 	struct list_head        *node = NULL;
 	struct acpi_pci_link    *link = NULL;
 
-	ACPI_FUNCTION_TRACE("irqrouter_resume");
+	ACPI_FUNCTION_TRACE("irqrouter_suspend");
 
 	list_for_each(node, &acpi_link.entries) {
-
 		link = list_entry(node, struct acpi_pci_link, node);
 		if (!link) {
 			ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid link context\n"));
 			continue;
 		}
-
-		acpi_pci_link_resume(link);
+		if (link->irq.active && link->irq.initialized)
+			link->irq.suspend_resume = 1;
 	}
 	return_VALUE(0);
 }
@@ -856,7 +848,7 @@
 
 static struct sysdev_class irqrouter_sysdev_class = {
         set_kset_name("irqrouter"),
-        .resume = irqrouter_resume,
+        .suspend = irqrouter_suspend,
 };
 
 
# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2005/03/18 16:30:29-05:00 len.brown@intel.com 
#   [ACPI] S3 Suspend to RAM: interrupt resume fix
#   
#   Delete PCI Interrupt Link Device .resume method --
#   it is the device driver's job to request interrupts,
#   not the Link's job to remember what the devices want.
#   
#   This addresses the issue of attempting to run
#   the ACPI interpreter too early in resume, when
#   interrupts are still disabled.
#   
#   http://bugzilla.kernel.org/show_bug.cgi?id=3469
#   
#   Signed-off-by: David Shaohua Li <shaohua.li@intel.com>
#   Signed-off-by: Len Brown <len.brown@intel.com>
# 
# drivers/acpi/pci_link.c
#   2005/03/02 22:23:50-05:00 len.brown@intel.com +14 -22
#   Delete PCI Interrupt Link .resume method
# 

Greets,
Rafael


-- 
- Would you tell me, please, which way I ought to go from here?
- That depends a good deal on where you want to get to.
		-- Lewis Carroll "Alice's Adventures in Wonderland"

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2005-05-03 19:33 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-03-25 12:54 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers Li, Shaohua
2005-03-25 14:19 ` Rafael J. Wysocki
2005-03-26 18:23   ` Rafael J. Wysocki
2005-03-26 19:07     ` Rafael J. Wysocki
2005-03-28  1:22     ` Li Shaohua
2005-03-29 10:33       ` Rafael J. Wysocki
  -- strict thread matches above, loose matches on Subject: below --
2005-03-25  8:21 2.6.12-rc1-mm3 Andrew Morton
2005-03-25 11:29 ` 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers Rafael J. Wysocki
2005-05-02 22:54   ` Andrew Morton
2005-05-03 19:34     ` Rafael J. Wysocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®