OSDN Git Service

ACPI / scan: Drop acpi_bus_add() and use acpi_bus_scan() instead
authorRafael J. Wysocki <rafael.j.wysocki@intel.com>
Sat, 19 Jan 2013 00:27:35 +0000 (01:27 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Sat, 19 Jan 2013 00:27:35 +0000 (01:27 +0100)
The only difference between acpi_bus_scan() and acpi_bus_add() is the
invocation of acpi_update_all_gpes() in the latter which in fact is
unnecessary, because acpi_update_all_gpes() has already been called
by acpi_scan_init() and the way it is implemented guarantees the next
invocations of it to do nothing.

For this reason, drop acpi_bus_add() and make all its callers use
acpi_bus_scan() directly instead of it.  Additionally, rearrange the
code in acpi_scan_init() slightly to improve the visibility of the
acpi_update_all_gpes() call in there.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Yinghai Lu <yinghai@kernel.org>
drivers/acpi/acpi_memhotplug.c
drivers/acpi/container.c
drivers/acpi/dock.c
drivers/acpi/processor_driver.c
drivers/acpi/scan.c
drivers/pci/hotplug/acpiphp_glue.c
drivers/pci/hotplug/sgi_hotplug.c
include/acpi/acpi_bus.h

index eaddb7a..15ea22f 100644 (file)
@@ -167,7 +167,7 @@ acpi_memory_get_device(acpi_handle handle,
         * Now add the notified device.  This creates the acpi_device
         * and invokes .add function
         */
-       result = acpi_bus_add(handle);
+       result = acpi_bus_scan(handle);
        if (result) {
                acpi_handle_warn(handle, "Cannot add acpi bus\n");
                return -EINVAL;
index f8fb228..cc79d3e 100644 (file)
@@ -166,7 +166,7 @@ static void container_notify_cb(acpi_handle handle, u32 type, void *context)
                if (!ACPI_FAILURE(status) || device)
                        break;
 
-               result = acpi_bus_add(handle);
+               result = acpi_bus_scan(handle);
                if (result) {
                        acpi_handle_warn(handle, "Failed to add container\n");
                        break;
index 4a56a8b..420d24f 100644 (file)
@@ -317,7 +317,7 @@ static struct acpi_device * dock_create_acpi_device(acpi_handle handle)
                 * no device created for this object,
                 * so we should create one.
                 */
-               ret = acpi_bus_add(handle);
+               ret = acpi_bus_scan(handle);
                if (ret)
                        pr_debug("error adding bus, %x\n", -ret);
 
index a24ee43..9c5929a 100644 (file)
@@ -699,7 +699,7 @@ static void acpi_processor_hotplug_notify(acpi_handle handle,
                if (!acpi_bus_get_device(handle, &device))
                        break;
 
-               result = acpi_bus_add(handle);
+               result = acpi_bus_scan(handle);
                if (result) {
                        acpi_handle_err(handle, "Unable to add the device\n");
                        break;
index 388b59c..7c43bdc 100644 (file)
@@ -1577,26 +1577,8 @@ static acpi_status acpi_bus_device_attach(acpi_handle handle, u32 lvl_not_used,
        return status;
 }
 
-static int acpi_bus_scan(acpi_handle handle)
-{
-       void *device = NULL;
-
-       if (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device)))
-               acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
-                                   acpi_bus_check_add, NULL, NULL, &device);
-
-       if (!device)
-               return -ENODEV;
-
-       if (ACPI_SUCCESS(acpi_bus_device_attach(handle, 0, NULL, NULL)))
-               acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
-                                   acpi_bus_device_attach, NULL, NULL, NULL);
-
-       return 0;
-}
-
 /**
- * acpi_bus_add - Add ACPI device node objects in a given namespace scope.
+ * acpi_bus_scan - Add ACPI device node objects in a given namespace scope.
  * @handle: Root of the namespace scope to scan.
  *
  * Scan a given ACPI tree (probably recently hot-plugged) and create and add
@@ -1607,18 +1589,24 @@ static int acpi_bus_scan(acpi_handle handle)
  * in the table trunk from which the kernel could create a device and add an
  * appropriate driver.
  */
-int acpi_bus_add(acpi_handle handle)
+int acpi_bus_scan(acpi_handle handle)
 {
-       int err;
+       void *device = NULL;
 
-       err = acpi_bus_scan(handle);
-       if (err)
-               return err;
+       if (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device)))
+               acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
+                                   acpi_bus_check_add, NULL, NULL, &device);
+
+       if (!device)
+               return -ENODEV;
+
+       if (ACPI_SUCCESS(acpi_bus_device_attach(handle, 0, NULL, NULL)))
+               acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
+                                   acpi_bus_device_attach, NULL, NULL, NULL);
 
-       acpi_update_all_gpes();
        return 0;
 }
-EXPORT_SYMBOL(acpi_bus_add);
+EXPORT_SYMBOL(acpi_bus_scan);
 
 static acpi_status acpi_bus_device_detach(acpi_handle handle, u32 lvl_not_used,
                                          void *not_used, void **ret_not_used)
@@ -1708,13 +1696,15 @@ int __init acpi_scan_init(void)
                return result;
 
        result = acpi_bus_get_device(ACPI_ROOT_OBJECT, &acpi_root);
-       if (!result)
-               result = acpi_bus_scan_fixed();
-
        if (result)
+               return result;
+
+       result = acpi_bus_scan_fixed();
+       if (result) {
                acpi_device_unregister(acpi_root);
-       else
-               acpi_update_all_gpes();
+               return result;
+       }
 
-       return result;
+       acpi_update_all_gpes();
+       return 0;
 }
index 22006f2..9e2b1f6 100644 (file)
@@ -746,7 +746,7 @@ static int acpiphp_bus_add(struct acpiphp_func *func)
                dbg("acpi_bus_trim return %x\n", ret_val);
        }
 
-       ret_val = acpi_bus_add(func->handle);
+       ret_val = acpi_bus_scan(func->handle);
        if (!ret_val)
                ret_val = acpi_bus_get_device(func->handle, &device);
 
@@ -1129,7 +1129,7 @@ static void handle_bridge_insertion(acpi_handle handle, u32 type)
                return;
        }
 
-       if (acpi_bus_add(handle)) {
+       if (acpi_bus_scan(handle)) {
                err("cannot add bridge to acpi list\n");
                return;
        }
index 2e006ee..ae606b3 100644 (file)
@@ -447,9 +447,9 @@ static int enable_slot(struct hotplug_slot *bss_hotplug_slot)
                        if (ACPI_SUCCESS(ret) &&
                            (adr>>16) == (slot->device_num + 1)) {
 
-                               ret = acpi_bus_add(chandle);
+                               ret = acpi_bus_scan(chandle);
                                if (ACPI_FAILURE(ret)) {
-                                       printk(KERN_ERR "%s: acpi_bus_add "
+                                       printk(KERN_ERR "%s: acpi_bus_scan "
                                               "failed (0x%x) for slot %d "
                                               "func %d\n", __func__,
                                               ret, (int)(adr>>16),
index 567851b..2c722de 100644 (file)
@@ -346,7 +346,7 @@ static inline int acpi_bus_generate_proc_event(struct acpi_device *device, u8 ty
 #endif
 int acpi_bus_register_driver(struct acpi_driver *driver);
 void acpi_bus_unregister_driver(struct acpi_driver *driver);
-int acpi_bus_add(acpi_handle handle);
+int acpi_bus_scan(acpi_handle handle);
 void acpi_bus_hot_remove_device(void *context);
 int acpi_bus_trim(struct acpi_device *start);
 acpi_status acpi_bus_get_ejd(acpi_handle handle, acpi_handle * ejd);