|
@@ -1168,8 +1168,7 @@ void acpi_os_wait_events_complete(void)
|
|
|
|
|
|
struct acpi_hp_work {
|
|
struct acpi_hp_work {
|
|
struct work_struct work;
|
|
struct work_struct work;
|
|
- acpi_hp_callback func;
|
|
|
|
- void *data;
|
|
|
|
|
|
+ struct acpi_device *adev;
|
|
u32 src;
|
|
u32 src;
|
|
};
|
|
};
|
|
|
|
|
|
@@ -1178,25 +1177,24 @@ static void acpi_hotplug_work_fn(struct work_struct *work)
|
|
struct acpi_hp_work *hpw = container_of(work, struct acpi_hp_work, work);
|
|
struct acpi_hp_work *hpw = container_of(work, struct acpi_hp_work, work);
|
|
|
|
|
|
acpi_os_wait_events_complete();
|
|
acpi_os_wait_events_complete();
|
|
- hpw->func(hpw->data, hpw->src);
|
|
|
|
|
|
+ acpi_device_hotplug(hpw->adev, hpw->src);
|
|
kfree(hpw);
|
|
kfree(hpw);
|
|
}
|
|
}
|
|
|
|
|
|
-acpi_status acpi_hotplug_execute(acpi_hp_callback func, void *data, u32 src)
|
|
|
|
|
|
+acpi_status acpi_hotplug_schedule(struct acpi_device *adev, u32 src)
|
|
{
|
|
{
|
|
struct acpi_hp_work *hpw;
|
|
struct acpi_hp_work *hpw;
|
|
|
|
|
|
ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
|
|
ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
|
|
- "Scheduling function [%p(%p, %u)] for deferred execution.\n",
|
|
|
|
- func, data, src));
|
|
|
|
|
|
+ "Scheduling hotplug event (%p, %u) for deferred execution.\n",
|
|
|
|
+ adev, src));
|
|
|
|
|
|
hpw = kmalloc(sizeof(*hpw), GFP_KERNEL);
|
|
hpw = kmalloc(sizeof(*hpw), GFP_KERNEL);
|
|
if (!hpw)
|
|
if (!hpw)
|
|
return AE_NO_MEMORY;
|
|
return AE_NO_MEMORY;
|
|
|
|
|
|
INIT_WORK(&hpw->work, acpi_hotplug_work_fn);
|
|
INIT_WORK(&hpw->work, acpi_hotplug_work_fn);
|
|
- hpw->func = func;
|
|
|
|
- hpw->data = data;
|
|
|
|
|
|
+ hpw->adev = adev;
|
|
hpw->src = src;
|
|
hpw->src = src;
|
|
/*
|
|
/*
|
|
* We can't run hotplug code in kacpid_wq/kacpid_notify_wq etc., because
|
|
* We can't run hotplug code in kacpid_wq/kacpid_notify_wq etc., because
|