2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers

2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers

Post by Rafael J. » Sat, 26 Mar 2005 20:40:10


i,

On Friday, 25 of March 2005 09:21, Andrew Morton wrote:

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


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 XXXX@XXXXX.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 < XXXX@XXXXX.COM >
# Signed-off-by: Len Brown < XXXX@XXXXX.COM >
#
# drivers/acpi/pci_link.c
# 2005/03/02 22:23:50-05:00 XXXX@XXXXX.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"
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to XXXX@XXXXX.COM
More majordomo info at http://v
 
 
 

2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers

Post by Li, Shaohu » Sat, 26 Mar 2005 22:00:12

Hi,

problems
patch
*/

How about just remove below line:

Thanks,
Shaohua
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to XXXX@XXXXX.COM
More majordomo info at http://www.yqcomputer.com/
Please read the FAQ at http://www.yqcomputer.com/

 
 
 

2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers

Post by Rafael J. » Sat, 26 Mar 2005 23:30:16

Hi,


]--snip--[

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"
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to XXXX@XXXXX.COM
More majordomo info at http://www.yqcomputer.com/
Please read the FAQ at http://www.yqcomputer.com/
 
 
 

2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers

Post by Rafael J. » Mon, 28 Mar 2005 03:30:15

Hi,




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"
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to XXXX@XXXXX.COM
More majordomo info at http://www.yqcomputer.com/
Please read the FAQ at http://www.yqcomputer.com/
 
 
 

2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers

Post by Rafael J. » Mon, 28 Mar 2005 04:10:10

n Saturday, 26 of March 2005 19:23, Rafael J. Wysocki wrote:

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"
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to XXXX@XXXXX.COM
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
 
 
 

2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers

Post by Rafael J. » Wed, 30 Mar 2005 19:50:09

Hi,



]--snip--[

The bug report is at:

http://www.yqcomputer.com/

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"
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to XXXX@XXXXX.COM
More majordomo info at http://www.yqcomputer.com/
Please read the FAQ at http://www.yqcomputer.com/
 
 
 

2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers

Post by Rafael J. » Thu, 05 May 2005 04:40:14

Hi,





Yes, it does. I've already updated its bugzilla entry
( http://www.yqcomputer.com/ ).

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"
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to XXXX@XXXXX.COM
More majordomo info at http://www.yqcomputer.com/
Please read the FAQ at http://www.yqcomputer.com/