PNP / ACPI: Use DEVICE_ACPI_HANDLE() for device ACPI handle access
authorRafael J. Wysocki <rjw@sisk.pl>
Mon, 10 Jan 2011 20:23:16 +0000 (21:23 +0100)
committerLen Brown <len.brown@intel.com>
Tue, 11 Jan 2011 20:20:40 +0000 (15:20 -0500)
commitcc8e7a355c1ec64b06a5b8126c47c5cb47f44fce
treec2188b1abcab9ac29d47b75f78e48b4007184ff4
parent3c0eee3fe6a3a1c745379547c7e7c904aa64f6d5
PNP / ACPI: Use DEVICE_ACPI_HANDLE() for device ACPI handle access

The PNP ACPI driver squirrels the ACPI handles of PNP devices' ACPI
companions, but this isn't correct, because those handles should be
accessed using the DEVICE_ACPI_HANDLE() macro operating on struct
device objects.

Using DEVICE_ACPI_HANDLE() in the PNP ACPI driver instead of the
driver's own copies of the ACPI handles allows us to avoid a problem
with docking stations where a machine docked before suspend to RAM
and undocked while suspended crashes during the subsequent resume (in
that case the ACPI companion of the PNP device in question doesn't
exist any more while the device is being resumed).  It also allows us
to avoid the problem where suspend to RAM fails when the machine was
undocked while suspended before (again, the ACPI companion of the PNP
device is not present any more while it is being suspended).

This change doesn't fix all of the the PNP ACPI driver's problems
with PNP devices in docking stations (generally speaking, the driver
has no idea that devices can come and go and doesn't even attempt to
handle such events), but at least it makes suspend work for the
users of docking stations who don't use the PNP devices located in
there.

References: https://bugzilla.kernel.org/show_bug.cgi?id=15100

Reported-and-tested-by: Toralf Förster <toralf.foerster@gmx.de>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Len Brown <len.brown@intel.com>
drivers/pnp/driver.c
drivers/pnp/pnpacpi/core.c