From f5f960947ef7cae17c7bc3c49fbe509ed1213dc1 Mon Sep 17 00:00:00 2001 From: Liu Jinsong Date: Sun, 17 Feb 2013 11:47:24 +0800 Subject: [PATCH] --- yaml --- r: 360727 b: refs/heads/master c: 1b37d6ea2cdc61102f4643d8cd654ec15212b927 h: refs/heads/master i: 360725: 0450351b9e682c5b5cd42337f2d3567ece46e40e 360723: 860cb8e851721e4e74064754c7e29b54e4fc0e71 360719: 1635e162380abaef679278040f20019f1f3e6f64 v: v3 --- [refs] | 2 +- trunk/drivers/xen/xen-acpi-cpuhotplug.c | 34 +++++++++---------------- 2 files changed, 13 insertions(+), 23 deletions(-) diff --git a/[refs] b/[refs] index 4a19767c5431..fa828fa26dc0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 484400ffbf2dd33446d71c05b9cddf91932a882e +refs/heads/master: 1b37d6ea2cdc61102f4643d8cd654ec15212b927 diff --git a/trunk/drivers/xen/xen-acpi-cpuhotplug.c b/trunk/drivers/xen/xen-acpi-cpuhotplug.c index 757827966e34..18c742bec91b 100644 --- a/trunk/drivers/xen/xen-acpi-cpuhotplug.c +++ b/trunk/drivers/xen/xen-acpi-cpuhotplug.c @@ -239,24 +239,6 @@ static acpi_status xen_acpi_cpu_hotadd(struct acpi_processor *pr) return AE_OK; } -static -int acpi_processor_device_add(acpi_handle handle, struct acpi_device **device) -{ - acpi_handle phandle; - struct acpi_device *pdev; - - if (acpi_get_parent(handle, &phandle)) - return -ENODEV; - - if (acpi_bus_get_device(phandle, &pdev)) - return -ENODEV; - - if (acpi_bus_scan(handle)) - return -ENODEV; - - return 0; -} - static int acpi_processor_device_remove(struct acpi_device *device) { pr_debug(PREFIX "Xen does not support CPU hotremove\n"); @@ -272,6 +254,8 @@ static void acpi_processor_hotplug_notify(acpi_handle handle, u32 ost_code = ACPI_OST_SC_NON_SPECIFIC_FAILURE; /* default */ int result; + acpi_scan_lock_acquire(); + switch (event) { case ACPI_NOTIFY_BUS_CHECK: case ACPI_NOTIFY_DEVICE_CHECK: @@ -286,12 +270,16 @@ static void acpi_processor_hotplug_notify(acpi_handle handle, if (!acpi_bus_get_device(handle, &device)) break; - result = acpi_processor_device_add(handle, &device); + result = acpi_bus_scan(handle); if (result) { pr_err(PREFIX "Unable to add the device\n"); break; } - + result = acpi_bus_get_device(handle, &device); + if (result) { + pr_err(PREFIX "Missing device object\n"); + break; + } ost_code = ACPI_OST_SC_SUCCESS; break; @@ -321,11 +309,13 @@ static void acpi_processor_hotplug_notify(acpi_handle handle, "Unsupported event [0x%x]\n", event)); /* non-hotplug event; possibly handled by other handler */ - return; + goto out; } (void) acpi_evaluate_hotplug_ost(handle, event, ost_code, NULL); - return; + +out: + acpi_scan_lock_release(); } static acpi_status is_processor_device(acpi_handle handle)