lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <201002082230.30497.rjw@sisk.pl>
Date:	Mon, 8 Feb 2010 22:30:30 +0100
From:	"Rafael J. Wysocki" <rjw@...k.pl>
To:	linux-pm@...ts.linux-foundation.org
Cc:	Gary Hade <garyhade@...ibm.com>,
	Linux PCI <linux-pci@...r.kernel.org>,
	LKML <linux-kernel@...r.kernel.org>,
	Jesse Barnes <jbarnes@...tuousgeek.org>,
	"Moore, Robert" <robert.moore@...el.com>,
	Matthew Garrett <mjg@...hat.com>
Subject: Re: [linux-pm] [PATCH 8/9] PCI / ACPI / PM: Platform support for PCI PME wake-up (rev. 7)

On Monday 08 February 2010, Rafael J. Wysocki wrote:
> On Monday 08 February 2010, Gary Hade wrote:
> > On Sat, Feb 06, 2010 at 09:11:56PM +0100, Rafael J. Wysocki wrote:
> > > On Saturday 06 February 2010, Bjorn Helgaas wrote:
> > > > On Sunday 10 January 2010 07:01:03 am Rafael J. Wysocki wrote:
> > > > > From: Rafael J. Wysocki <rjw@...k.pl>
> > > > > 
> > > > > Although the majority of PCI devices can generate PMEs that in
> > > > > principle may be used to wake up devices suspended at run time,
> > > > > platform support is generally necessary to convert PMEs into wake-up
> > > > > events that can be delivered to the kernel.  If ACPI is used for this
> > > > > purpose, a PME generated by a PCI device will trigger the ACPI GPE
> > > > > associated with the device to generate an ACPI wake-up event that we
> > > > > can set up a handler for, provided that everything is configured
> > > > > correctly.
> > > > 
> > > > I think acpiphp needs a little attention after this patch.  Gary
> > > > Hade noticed while testing Jesse's linux-next branch that acpiphp
> > > > complains like this:
> > > > 
> > > >   acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
> > > >   acpiphp: Slot [9] registered
> > > >   acpiphp: Slot [10] registered
> > > >   acpiphp_glue: failed to register interrupt notify handler
> > > >   acpiphp: Slot [6] registered
> > > >   acpiphp_glue: failed to register interrupt notify handler
> > > > 
> > > > I reproduced this on an HP rx3600 (ia64), and found that acpiphp
> > > > doesn't complain on commit 82533a617f453, but it *does* complain
> > > > on commit fb3383bb4ac6e, which seems to be this patch.
> > > 
> > > I can't see the possible reason looking at the code alone.
> > > 
> > > Could you add a debug printk() printing the error code returned by
> > > pci_acpi_add_hp_notifier() in acpiphp_glue.c:register_slot(), please?
> > 
> > Rafael, On the system where I ran into the problem it returns
> > AE_NOT_FOUND.  See below.
> 
> Thanks!
> 
> Well, that means there's no struct acpi_device object associated with handle.
> 
> I must admit I didn't take that into consideration, but it should be easily
> fixable.  I'll send a patch for that later today.

Patch appended.

If the theory is correct, it should fix the issue.  Please test.

Rafael


---
 drivers/pci/pci-acpi.c |   30 ++++++++++++++++++++++++------
 1 file changed, 24 insertions(+), 6 deletions(-)

Index: linux-2.6/drivers/pci/pci-acpi.c
===================================================================
--- linux-2.6.orig/drivers/pci/pci-acpi.c
+++ linux-2.6/drivers/pci/pci-acpi.c
@@ -116,10 +116,19 @@ acpi_status pci_acpi_add_hp_notifier(acp
 {
 	struct pci_acpi_notify_data *nd;
 	struct acpi_device *dev;
-	acpi_status status = AE_OK;
+	acpi_status status;
+
+	if (!handle)
+		return AE_BAD_PARAMETER;
 
-	if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &dev)))
-		return AE_NOT_FOUND;
+	status = acpi_bus_get_device(handle, &dev);
+	/*
+	 * If there's no struct acpi_device for given handle, try to install the
+	 * handler directly.
+	 */
+	if (ACPI_FAILURE(status))
+		return acpi_install_notify_handler(handle, ACPI_SYSTEM_NOTIFY,
+							handler, context);
 
 	mutex_lock(&pci_acpi_notifier_mtx);
 
@@ -170,10 +179,19 @@ acpi_status pci_acpi_remove_hp_notifier(
 {
 	struct pci_acpi_notify_data *nd;
 	struct acpi_device *dev;
-	acpi_status status = AE_NOT_FOUND;
+	acpi_status status;
+
+	if (!handle)
+		return AE_BAD_PARAMETER;
 
-	if (!handle || ACPI_FAILURE(acpi_bus_get_device(handle, &dev)))
-		return AE_NOT_FOUND;
+	status = acpi_bus_get_device(handle, &dev);
+	/*
+	 * If there's no struct acpi_device for given handle, try to remove the
+	 * handler directly.
+	 */
+	if (ACPI_FAILURE(status))
+		return acpi_remove_notify_handler(handle, ACPI_SYSTEM_NOTIFY,
+							handler);
 
 	mutex_lock(&pci_acpi_notifier_mtx);
 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ