mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 20:51:44 +00:00
ACPI / scan: Indicate to platform when hot remove returns busy
In hotplug logic, it always indicates non-specific failure to platform through _OST when handing ACPI hot-remove event failed. Then platform terminates the hot-remove process but it can not identify the reason. Base on current hot-remove code, there have two situations that it returns busy: - OSPM try to offline an individual device, but the device offline function returns "busy". - When the ejection event is applied to an "not offlined yet" container. OSPM sends a kobject change event to userspace and returns "busy". Both of them will returns -EBUSY to ACPI device hotplug function. Then, the hotplug function indicates non-specific failure to platform just like for any other error, e.g. -ENODEV or -EIO. The benefit to the platform for identifying the OS "busy" state is that it can use a different approach to handle the "busy" instead of simply terminating the hot-remove operation for an unknown reason. For example, the platform can wait for a while and then re-trigger hot-remove. Signed-off-by: "Lee, Chun-Yi" <jlee@suse.com> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> [ rjw: Changelog massage ] Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
6f7da29041
commit
d429e5c122
@ -404,10 +404,6 @@ void acpi_device_hotplug(struct acpi_device *adev, u32 src)
|
||||
error = dock_notify(adev, src);
|
||||
} else if (adev->flags.hotplug_notify) {
|
||||
error = acpi_generic_hotplug_event(adev, src);
|
||||
if (error == -EPERM) {
|
||||
ost_code = ACPI_OST_SC_EJECT_NOT_SUPPORTED;
|
||||
goto err_out;
|
||||
}
|
||||
} else {
|
||||
int (*notify)(struct acpi_device *, u32);
|
||||
|
||||
@ -423,8 +419,20 @@ void acpi_device_hotplug(struct acpi_device *adev, u32 src)
|
||||
else
|
||||
goto out;
|
||||
}
|
||||
if (!error)
|
||||
switch (error) {
|
||||
case 0:
|
||||
ost_code = ACPI_OST_SC_SUCCESS;
|
||||
break;
|
||||
case -EPERM:
|
||||
ost_code = ACPI_OST_SC_EJECT_NOT_SUPPORTED;
|
||||
break;
|
||||
case -EBUSY:
|
||||
ost_code = ACPI_OST_SC_DEVICE_BUSY;
|
||||
break;
|
||||
default:
|
||||
ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE;
|
||||
break;
|
||||
}
|
||||
|
||||
err_out:
|
||||
acpi_evaluate_ost(adev->handle, src, ost_code, NULL);
|
||||
|
Loading…
Reference in New Issue
Block a user