Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
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" - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
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.c2005-03-24 04:57:27 -08:00 > > > >+++ b/drivers/acpi/pci_link.c2005-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.0 +0100 > +++ linux-2.6.12-rc1-mm2/drivers/pci/pci.c2005-03-26 19:10:54.0 > +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 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
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.c2005-03-24 04:57:27 -08:00 > > > >+++ b/drivers/acpi/pci_link.c2005-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" - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
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.0 +0100 +++ linux-2.6.12-rc1-mm2/drivers/pci/pci.c 2005-03-26 19:10:54.0 +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 [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
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.c2005-03-24 04:57:27 -08:00 > >+++ b/drivers/acpi/pci_link.c2005-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" - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
RE: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
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 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: 2.6.12-rc1-mm3: box hangs solid on resume from disk while resuming device drivers
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 [EMAIL PROTECTED] # [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 <[EMAIL PROTECTED]> # Signed-off-by: Len Brown <[EMAIL PROTECTED]> # # drivers/acpi/pci_link.c # 2005/03/02 22:23:50-05:00 [EMAIL PROTECTED] +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 [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/