Skip to content

Commit

Permalink
ACPI: Remove acpi_start_single_object() and acpi_bus_start()
Browse files Browse the repository at this point in the history
The ACPI PCI root bridge driver was the only ACPI driver implementing
the .start() callback, which isn't used by any ACPI drivers any more
now.

For this reason, acpi_start_single_object() has no purpose any more,
so remove it and all references to it.  Also remove
acpi_bus_start_device(), whose only purpose was to call
acpi_start_single_object().

Moreover, since after the removal of acpi_bus_start_device() the
only purpose of acpi_bus_start() remains to call
acpi_update_all_gpes(), move that into acpi_bus_add() and drop
acpi_bus_start() too, remove its header from acpi_bus.h and
update all of its former users accordingly.

This change was previously proposed in a different from by
Yinghai Lu.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Yinghai Lu <yinghai@kernel.org>
Acked-by: Toshi Kani <toshi.kani@hp.com>
  • Loading branch information
Rafael J. Wysocki committed Jan 3, 2013
1 parent 47525cd commit 02f57c6
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 77 deletions.
16 changes: 3 additions & 13 deletions drivers/acpi/container.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,24 +139,14 @@ static int container_device_add(struct acpi_device **device, acpi_handle handle)
{
acpi_handle phandle;
struct acpi_device *pdev;
int result;


if (acpi_get_parent(handle, &phandle)) {
return -ENODEV;
}

if (acpi_bus_get_device(phandle, &pdev)) {
if (acpi_get_parent(handle, &phandle))
return -ENODEV;
}

if (acpi_bus_add(device, pdev, handle, ACPI_BUS_TYPE_DEVICE)) {
if (acpi_bus_get_device(phandle, &pdev))
return -ENODEV;
}

result = acpi_bus_start(*device);

return result;
return acpi_bus_add(device, pdev, handle, ACPI_BUS_TYPE_DEVICE);
}

static void container_notify_cb(acpi_handle handle, u32 type, void *context)
Expand Down
66 changes: 8 additions & 58 deletions drivers/acpi/scan.c
Original file line number Diff line number Diff line change
Expand Up @@ -571,7 +571,6 @@ static void acpi_device_remove_notify_handler(struct acpi_device *device)
}

static int acpi_bus_driver_init(struct acpi_device *, struct acpi_driver *);
static int acpi_start_single_object(struct acpi_device *);
static int acpi_device_probe(struct device * dev)
{
struct acpi_device *acpi_dev = to_acpi_device(dev);
Expand All @@ -580,9 +579,6 @@ static int acpi_device_probe(struct device * dev)

ret = acpi_bus_driver_init(acpi_dev, acpi_drv);
if (!ret) {
if (acpi_dev->add_type == ACPI_BUS_ADD_START)
acpi_start_single_object(acpi_dev);

if (acpi_drv->ops.notify) {
ret = acpi_device_install_notify_handler(acpi_dev);
if (ret) {
Expand Down Expand Up @@ -761,24 +757,6 @@ acpi_bus_driver_init(struct acpi_device *device, struct acpi_driver *driver)
return 0;
}

static int acpi_start_single_object(struct acpi_device *device)
{
int result = 0;
struct acpi_driver *driver;


if (!(driver = device->driver))
return 0;

if (driver->ops.start) {
result = driver->ops.start(device);
if (result && driver->ops.remove)
driver->ops.remove(device, ACPI_BUS_REMOVAL_NORMAL);
}

return result;
}

/**
* acpi_bus_register_driver - register a driver with the ACPI bus
* @driver: driver being registered
Expand Down Expand Up @@ -1673,59 +1651,31 @@ static int acpi_bus_scan(acpi_handle handle, bool start,
}

/*
* acpi_bus_add and acpi_bus_start
* acpi_bus_add
*
* scan a given ACPI tree and (probably recently hot-plugged)
* create and add or starts found devices.
* create and add found devices.
*
* If no devices were found -ENODEV is returned which does not
* mean that this is a real error, there just have been no suitable
* ACPI objects in the table trunk from which the kernel could create
* a device and add/start an appropriate driver.
* a device and add an appropriate driver.
*/

int
acpi_bus_add(struct acpi_device **child,
struct acpi_device *parent, acpi_handle handle, int type)
{
return acpi_bus_scan(handle, false, child);
}
EXPORT_SYMBOL(acpi_bus_add);

static acpi_status acpi_bus_start_device(acpi_handle handle, u32 lvl,
void *not_used, void **ret_not_used)
{
struct acpi_device *device;
unsigned long long sta_not_used;
int type_not_used;

/*
* Ignore errors ignored by acpi_bus_check_add() to avoid terminating
* namespace walks prematurely.
*/
if (acpi_bus_type_and_status(handle, &type_not_used, &sta_not_used))
return AE_OK;

if (acpi_bus_get_device(handle, &device))
return AE_CTRL_DEPTH;

return acpi_start_single_object(device);
}

int acpi_bus_start(struct acpi_device *device)
{
if (!device)
return -EINVAL;
int err;

if (ACPI_SUCCESS(acpi_start_single_object(device)))
acpi_walk_namespace(ACPI_TYPE_ANY, device->handle,
ACPI_UINT32_MAX, acpi_bus_start_device,
NULL, NULL, NULL);
err = acpi_bus_scan(handle, false, child);
if (err)
return err;

acpi_update_all_gpes();
return 0;
}
EXPORT_SYMBOL(acpi_bus_start);
EXPORT_SYMBOL(acpi_bus_add);

int acpi_bus_trim(struct acpi_device *start, int rmdevice)
{
Expand Down
4 changes: 1 addition & 3 deletions drivers/pci/hotplug/acpiphp_glue.c
Original file line number Diff line number Diff line change
Expand Up @@ -759,7 +759,6 @@ static int acpiphp_bus_add(struct acpiphp_func *func)
-ret_val);
goto acpiphp_bus_add_out;
}
ret_val = acpi_bus_start(device);

acpiphp_bus_add_out:
return ret_val;
Expand Down Expand Up @@ -1148,8 +1147,7 @@ static void handle_bridge_insertion(acpi_handle handle, u32 type)
err("cannot add bridge to acpi list\n");
return;
}
if (!acpiphp_configure_bridge(handle) &&
!acpi_bus_start(device))
if (!acpiphp_configure_bridge(handle))
add_bridge(handle);
else
err("cannot configure and start bridge\n");
Expand Down
2 changes: 0 additions & 2 deletions drivers/pci/hotplug/sgi_hotplug.c
Original file line number Diff line number Diff line change
Expand Up @@ -457,8 +457,6 @@ static int enable_slot(struct hotplug_slot *bss_hotplug_slot)
ret, (int)(adr>>16),
(int)(adr&0xffff));
/* try to continue on */
} else {
acpi_bus_start(device);
}
}
}
Expand Down
1 change: 0 additions & 1 deletion include/acpi/acpi_bus.h
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,6 @@ int acpi_bus_add(struct acpi_device **child, struct acpi_device *parent,
acpi_handle handle, int type);
void acpi_bus_hot_remove_device(void *context);
int acpi_bus_trim(struct acpi_device *start, int rmdevice);
int acpi_bus_start(struct acpi_device *device);
acpi_status acpi_bus_get_ejd(acpi_handle handle, acpi_handle * ejd);
int acpi_match_device_ids(struct acpi_device *device,
const struct acpi_device_id *ids);
Expand Down

0 comments on commit 02f57c6

Please sign in to comment.