Please ignore the patch. I found that ACPI container driver does not need to implement EJECT routine because it has already prepared eject file at userland. 2012/06/05 15:26, Yasuaki Ishimatsu wrote: > Even if ACPI_NOTIFY_EJECT_REQUEST is notified to ACPI container, ACPI > container just calls kobject_uevent(). The patch implements a function > to remove all devices included in ACPI container. > > Signed-off-by: Yasuaki Ishimatsu<isimatu.yasuaki@xxxxxxxxxxxxxx> > > --- > drivers/acpi/container.c | 32 ++++++++++++++++++++++++++++++-- > 1 file changed, 30 insertions(+), 2 deletions(-) > > Index: linux-3.5-rc1/drivers/acpi/container.c > =================================================================== > --- linux-3.5-rc1.orig/drivers/acpi/container.c 2012-06-05 14:01:54.000000000 +0900 > +++ linux-3.5-rc1/drivers/acpi/container.c 2012-06-05 14:17:40.940836226 +0900 > @@ -123,6 +123,8 @@ static int acpi_container_remove(struct > acpi_status status = AE_OK; > struct acpi_container *pc = NULL; > > + kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE); > + > pc = acpi_driver_data(device); > kfree(pc); > return status; > @@ -152,6 +154,32 @@ static int container_device_add(struct a > return result; > } > > +static void container_device_remove(struct acpi_device *device, > + acpi_handle handle) > +{ > + struct acpi_object_list arg_list; > + union acpi_object arg; > + int result; > + acpi_status status; > + > + result = acpi_bus_trim(device, 1); > + if (result) { > + printk(KERN_WARNING "Removing contaier failed"); > + return; > + } > + > + arg_list.count = 1; > + arg_list.pointer =&arg; > + arg.type = ACPI_TYPE_INTEGER; > + arg.integer.value = 1; > + > + status = acpi_evaluate_object(handle, "_EJ0",&arg_list, NULL); > + if (ACPI_FAILURE(status)) > + printk(KERN_WARNING "Eject device failed\n"); > + > + return; > +} > + > static void container_notify_cb(acpi_handle handle, u32 type, void *context) > { > struct acpi_device *device = NULL; > @@ -183,13 +211,13 @@ static void container_notify_cb(acpi_han > } else { > if (ACPI_SUCCESS(status)) { > /* device exist and this is a remove request */ > - kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE); > + container_device_remove(device, handle); > } > } > break; > case ACPI_NOTIFY_EJECT_REQUEST: > if (!acpi_bus_get_device(handle,&device)&& device) { > - kobject_uevent(&device->dev.kobj, KOBJ_OFFLINE); > + container_device_remove(device, handle); > } > break; > default: > > -- > To unsubscribe from this list: send the line "unsubscribe linux-acpi" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > > -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html