From: Keiichiro Tokunaga This is to fix container's ACPI notify handler to handle proper cases properly. Previously, the handler tried to make a container device be offline if an ACPI_NOTIFY_BUS/DEVICE_CHECK notification is performed on the device was present and has its acpi_device. But, the condition is weird. Whenever the notification is performed, there should be only the following two conditions: 1. the device is present, but does not have its acpi_device. 2. the device is not present, but has its acpi_device. #1 is a hot-addition case, which was handled properly also in previous handler. #2 is a surprising hot-removal case, which was not handled in previous handler. Signed-off-by: Keiichiro Tokunaga Signed-off-by: Andrew Morton --- 25-akpm/drivers/acpi/container.c | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-) diff -puN drivers/acpi/container.c~acpi-fix-containers-notify-handler-to-handle-proper-cases-properly drivers/acpi/container.c --- 25/drivers/acpi/container.c~acpi-fix-containers-notify-handler-to-handle-proper-cases-properly 2005-02-23 01:48:06.000000000 -0800 +++ 25-akpm/drivers/acpi/container.c 2005-02-23 01:48:06.000000000 -0800 @@ -177,13 +177,18 @@ container_notify_cb(acpi_handle handle, printk("Container driver received %s event\n", (type == ACPI_NOTIFY_BUS_CHECK)? "ACPI_NOTIFY_BUS_CHECK":"ACPI_NOTIFY_DEVICE_CHECK"); + status = acpi_bus_get_device(handle, &device); if (present) { - status = acpi_bus_get_device(handle, &device); if (ACPI_FAILURE(status) || !device) { result = container_device_add(&device, handle); if (!result) - kobject_hotplug(&device->kobj, KOBJ_ONLINE); - } else { + kobject_hotplug(&device->kobj, + KOBJ_ONLINE); + else + printk("Failed to add container\n"); + } + } else { + if (ACPI_SUCCESS(status)) { /* device exist and this is a remove request */ kobject_hotplug(&device->kobj, KOBJ_OFFLINE); } _