Commit b8bd759a authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

ACPI / scan: Drop acpi_bus_add() and use acpi_bus_scan() instead

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: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: default avatarYinghai Lu <yinghai@kernel.org>
parent 5993c467
...@@ -167,7 +167,7 @@ acpi_memory_get_device(acpi_handle handle, ...@@ -167,7 +167,7 @@ acpi_memory_get_device(acpi_handle handle,
* Now add the notified device. This creates the acpi_device * Now add the notified device. This creates the acpi_device
* and invokes .add function * and invokes .add function
*/ */
result = acpi_bus_add(handle); result = acpi_bus_scan(handle);
if (result) { if (result) {
acpi_handle_warn(handle, "Cannot add acpi bus\n"); acpi_handle_warn(handle, "Cannot add acpi bus\n");
return -EINVAL; return -EINVAL;
......
...@@ -166,7 +166,7 @@ static void container_notify_cb(acpi_handle handle, u32 type, void *context) ...@@ -166,7 +166,7 @@ static void container_notify_cb(acpi_handle handle, u32 type, void *context)
if (!ACPI_FAILURE(status) || device) if (!ACPI_FAILURE(status) || device)
break; break;
result = acpi_bus_add(handle); result = acpi_bus_scan(handle);
if (result) { if (result) {
acpi_handle_warn(handle, "Failed to add container\n"); acpi_handle_warn(handle, "Failed to add container\n");
break; break;
......
...@@ -317,7 +317,7 @@ static struct acpi_device * dock_create_acpi_device(acpi_handle handle) ...@@ -317,7 +317,7 @@ static struct acpi_device * dock_create_acpi_device(acpi_handle handle)
* no device created for this object, * no device created for this object,
* so we should create one. * so we should create one.
*/ */
ret = acpi_bus_add(handle); ret = acpi_bus_scan(handle);
if (ret) if (ret)
pr_debug("error adding bus, %x\n", -ret); pr_debug("error adding bus, %x\n", -ret);
......
...@@ -699,7 +699,7 @@ static void acpi_processor_hotplug_notify(acpi_handle handle, ...@@ -699,7 +699,7 @@ static void acpi_processor_hotplug_notify(acpi_handle handle,
if (!acpi_bus_get_device(handle, &device)) if (!acpi_bus_get_device(handle, &device))
break; break;
result = acpi_bus_add(handle); result = acpi_bus_scan(handle);
if (result) { if (result) {
acpi_handle_err(handle, "Unable to add the device\n"); acpi_handle_err(handle, "Unable to add the device\n");
break; break;
......
...@@ -1577,26 +1577,8 @@ static acpi_status acpi_bus_device_attach(acpi_handle handle, u32 lvl_not_used, ...@@ -1577,26 +1577,8 @@ static acpi_status acpi_bus_device_attach(acpi_handle handle, u32 lvl_not_used,
return status; 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. * @handle: Root of the namespace scope to scan.
* *
* Scan a given ACPI tree (probably recently hot-plugged) and create and add * 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) ...@@ -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 * in the table trunk from which the kernel could create a device and add an
* appropriate driver. * 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 (ACPI_SUCCESS(acpi_bus_check_add(handle, 0, NULL, &device)))
if (err) acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
return err; 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; 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, static acpi_status acpi_bus_device_detach(acpi_handle handle, u32 lvl_not_used,
void *not_used, void **ret_not_used) void *not_used, void **ret_not_used)
...@@ -1708,13 +1696,15 @@ int __init acpi_scan_init(void) ...@@ -1708,13 +1696,15 @@ int __init acpi_scan_init(void)
return result; return result;
result = acpi_bus_get_device(ACPI_ROOT_OBJECT, &acpi_root); result = acpi_bus_get_device(ACPI_ROOT_OBJECT, &acpi_root);
if (!result)
result = acpi_bus_scan_fixed();
if (result) if (result)
return result;
result = acpi_bus_scan_fixed();
if (result) {
acpi_device_unregister(acpi_root); acpi_device_unregister(acpi_root);
else return result;
acpi_update_all_gpes(); }
return result; acpi_update_all_gpes();
return 0;
} }
...@@ -746,7 +746,7 @@ static int acpiphp_bus_add(struct acpiphp_func *func) ...@@ -746,7 +746,7 @@ static int acpiphp_bus_add(struct acpiphp_func *func)
dbg("acpi_bus_trim return %x\n", ret_val); 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) if (!ret_val)
ret_val = acpi_bus_get_device(func->handle, &device); ret_val = acpi_bus_get_device(func->handle, &device);
...@@ -1129,7 +1129,7 @@ static void handle_bridge_insertion(acpi_handle handle, u32 type) ...@@ -1129,7 +1129,7 @@ static void handle_bridge_insertion(acpi_handle handle, u32 type)
return; return;
} }
if (acpi_bus_add(handle)) { if (acpi_bus_scan(handle)) {
err("cannot add bridge to acpi list\n"); err("cannot add bridge to acpi list\n");
return; return;
} }
......
...@@ -447,9 +447,9 @@ static int enable_slot(struct hotplug_slot *bss_hotplug_slot) ...@@ -447,9 +447,9 @@ static int enable_slot(struct hotplug_slot *bss_hotplug_slot)
if (ACPI_SUCCESS(ret) && if (ACPI_SUCCESS(ret) &&
(adr>>16) == (slot->device_num + 1)) { (adr>>16) == (slot->device_num + 1)) {
ret = acpi_bus_add(chandle); ret = acpi_bus_scan(chandle);
if (ACPI_FAILURE(ret)) { if (ACPI_FAILURE(ret)) {
printk(KERN_ERR "%s: acpi_bus_add " printk(KERN_ERR "%s: acpi_bus_scan "
"failed (0x%x) for slot %d " "failed (0x%x) for slot %d "
"func %d\n", __func__, "func %d\n", __func__,
ret, (int)(adr>>16), ret, (int)(adr>>16),
......
...@@ -346,7 +346,7 @@ static inline int acpi_bus_generate_proc_event(struct acpi_device *device, u8 ty ...@@ -346,7 +346,7 @@ static inline int acpi_bus_generate_proc_event(struct acpi_device *device, u8 ty
#endif #endif
int acpi_bus_register_driver(struct acpi_driver *driver); int acpi_bus_register_driver(struct acpi_driver *driver);
void acpi_bus_unregister_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); void acpi_bus_hot_remove_device(void *context);
int acpi_bus_trim(struct acpi_device *start); int acpi_bus_trim(struct acpi_device *start);
acpi_status acpi_bus_get_ejd(acpi_handle handle, acpi_handle * ejd); acpi_status acpi_bus_get_ejd(acpi_handle handle, acpi_handle * ejd);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment