aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/dock.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/acpi/dock.c')
-rw-r--r--drivers/acpi/dock.c25
1 files changed, 3 insertions, 22 deletions
diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c
index ca86c1ce7c8a..dcd73ccb514c 100644
--- a/drivers/acpi/dock.c
+++ b/drivers/acpi/dock.c
@@ -669,39 +669,20 @@ static void dock_notify(struct dock_station *ds, u32 event)
669 } 669 }
670} 670}
671 671
672struct dock_data { 672static void acpi_dock_deferred_cb(void *data, u32 event)
673 struct dock_station *ds;
674 u32 event;
675};
676
677static void acpi_dock_deferred_cb(void *context)
678{ 673{
679 struct dock_data *data = context;
680
681 acpi_scan_lock_acquire(); 674 acpi_scan_lock_acquire();
682 dock_notify(data->ds, data->event); 675 dock_notify(data, event);
683 acpi_scan_lock_release(); 676 acpi_scan_lock_release();
684 kfree(data);
685} 677}
686 678
687static void dock_notify_handler(acpi_handle handle, u32 event, void *data) 679static void dock_notify_handler(acpi_handle handle, u32 event, void *data)
688{ 680{
689 struct dock_data *dd;
690
691 if (event != ACPI_NOTIFY_BUS_CHECK && event != ACPI_NOTIFY_DEVICE_CHECK 681 if (event != ACPI_NOTIFY_BUS_CHECK && event != ACPI_NOTIFY_DEVICE_CHECK
692 && event != ACPI_NOTIFY_EJECT_REQUEST) 682 && event != ACPI_NOTIFY_EJECT_REQUEST)
693 return; 683 return;
694 684
695 dd = kmalloc(sizeof(*dd), GFP_KERNEL); 685 acpi_hotplug_execute(acpi_dock_deferred_cb, data, event);
696 if (dd) {
697 acpi_status status;
698
699 dd->ds = data;
700 dd->event = event;
701 status = acpi_os_hotplug_execute(acpi_dock_deferred_cb, dd);
702 if (ACPI_FAILURE(status))
703 kfree(dd);
704 }
705} 686}
706 687
707/** 688/**