ACPI: use handle, not device, in system notification path
This patch changes the global system notification path so it uses the acpi_handle, not the acpi_device. System notifications often deal with device presence and status change. In these cases, we may not have an acpi_device. For example, we may get a Device Check notification on an object that previously was not present. Since the object was not present, we would not have had an acpi_device for it. Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
cdd5b8ca12
commit
ff754e2e85
@ -450,11 +450,14 @@ int acpi_bus_receive_event(struct acpi_bus_event *event)
|
|||||||
Notification Handling
|
Notification Handling
|
||||||
-------------------------------------------------------------------------- */
|
-------------------------------------------------------------------------- */
|
||||||
|
|
||||||
static void acpi_bus_check_device(struct acpi_device *device)
|
static void acpi_bus_check_device(acpi_handle handle)
|
||||||
{
|
{
|
||||||
|
struct acpi_device *device;
|
||||||
acpi_status status;
|
acpi_status status;
|
||||||
struct acpi_device_status old_status;
|
struct acpi_device_status old_status;
|
||||||
|
|
||||||
|
if (acpi_bus_get_device(handle, &device))
|
||||||
|
return;
|
||||||
if (!device)
|
if (!device)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -488,13 +491,10 @@ static void acpi_bus_check_device(struct acpi_device *device)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void acpi_bus_check_scope(struct acpi_device *device)
|
static void acpi_bus_check_scope(acpi_handle handle)
|
||||||
{
|
{
|
||||||
if (!device)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Status Change? */
|
/* Status Change? */
|
||||||
acpi_bus_check_device(device);
|
acpi_bus_check_device(handle);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* TBD: Enumerate child devices within this device's scope and
|
* TBD: Enumerate child devices within this device's scope and
|
||||||
@ -531,13 +531,10 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
|
|||||||
blocking_notifier_call_chain(&acpi_bus_notify_list,
|
blocking_notifier_call_chain(&acpi_bus_notify_list,
|
||||||
type, (void *)handle);
|
type, (void *)handle);
|
||||||
|
|
||||||
if (acpi_bus_get_device(handle, &device))
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
|
||||||
case ACPI_NOTIFY_BUS_CHECK:
|
case ACPI_NOTIFY_BUS_CHECK:
|
||||||
acpi_bus_check_scope(device);
|
acpi_bus_check_scope(handle);
|
||||||
/*
|
/*
|
||||||
* TBD: We'll need to outsource certain events to non-ACPI
|
* TBD: We'll need to outsource certain events to non-ACPI
|
||||||
* drivers via the device manager (device.c).
|
* drivers via the device manager (device.c).
|
||||||
@ -545,7 +542,7 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case ACPI_NOTIFY_DEVICE_CHECK:
|
case ACPI_NOTIFY_DEVICE_CHECK:
|
||||||
acpi_bus_check_device(device);
|
acpi_bus_check_device(handle);
|
||||||
/*
|
/*
|
||||||
* TBD: We'll need to outsource certain events to non-ACPI
|
* TBD: We'll need to outsource certain events to non-ACPI
|
||||||
* drivers via the device manager (device.c).
|
* drivers via the device manager (device.c).
|
||||||
@ -583,10 +580,13 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
driver = device->driver;
|
acpi_bus_get_device(handle, &device);
|
||||||
if (driver && driver->ops.notify &&
|
if (device) {
|
||||||
(driver->flags & ACPI_DRIVER_ALL_NOTIFY_EVENTS))
|
driver = device->driver;
|
||||||
driver->ops.notify(device, type);
|
if (driver && driver->ops.notify &&
|
||||||
|
(driver->flags & ACPI_DRIVER_ALL_NOTIFY_EVENTS))
|
||||||
|
driver->ops.notify(device, type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
|
Loading…
Reference in New Issue
Block a user