Re: [PATCH 4/4] ACPI: remove acpi_op_start workaround
From: Konrad Rzeszutek Wilk
Date: Thu Oct 04 2012 - 08:57:51 EST
On Wed, Oct 3, 2012 at 7:00 PM, Yinghai Lu <yinghai@xxxxxxxxxx> wrote:
> No .start on any acpi_driver ops anymore.
Could you include the git commit number (of the one that removed it)
and a little description of why it was removed please?
>
> Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>
> ---
> drivers/acpi/scan.c | 95 ++++++++--------------------------------------
> include/acpi/acpi_bus.h | 8 ----
> 2 files changed, 17 insertions(+), 86 deletions(-)
>
> diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
> index 1bafa2d..5e6d2ad 100644
> --- a/drivers/acpi/scan.c
> +++ b/drivers/acpi/scan.c
> @@ -416,7 +416,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);
> @@ -425,9 +424,6 @@ static int acpi_device_probe(struct device * dev)
>
> ret = acpi_bus_driver_init(acpi_dev, acpi_drv);
> if (!ret) {
> - if (acpi_dev->bus_ops.acpi_op_start)
> - acpi_start_single_object(acpi_dev);
> -
> if (acpi_drv->ops.notify) {
> ret = acpi_device_install_notify_handler(acpi_dev);
> if (ret) {
> @@ -604,24 +600,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
> @@ -1254,8 +1232,7 @@ static int acpi_bus_remove(struct acpi_device *dev, int rmdevice)
>
> static int acpi_add_single_object(struct acpi_device **child,
> acpi_handle handle, int type,
> - unsigned long long sta,
> - struct acpi_bus_ops *ops)
> + unsigned long long sta)
> {
> int result;
> struct acpi_device *device;
> @@ -1271,7 +1248,6 @@ static int acpi_add_single_object(struct acpi_device **child,
> device->device_type = type;
> device->handle = handle;
> device->parent = acpi_bus_get_parent(handle);
> - device->bus_ops = *ops; /* workround for not call .start */
> STRUCT_TO_INT(device->status) = sta;
> device->drivers_autoprobe = true;
>
> @@ -1354,16 +1330,12 @@ end:
>
> static void acpi_bus_add_power_resource(acpi_handle handle)
> {
> - struct acpi_bus_ops ops = {
> - .acpi_op_add = 1,
> - .acpi_op_start = 1,
> - };
> struct acpi_device *device = NULL;
>
> acpi_bus_get_device(handle, &device);
> if (!device)
> acpi_add_single_object(&device, handle, ACPI_BUS_TYPE_POWER,
> - ACPI_STA_DEFAULT, &ops);
> + ACPI_STA_DEFAULT);
> }
>
> static int acpi_bus_type_and_status(acpi_handle handle, int *type,
> @@ -1408,7 +1380,6 @@ static int acpi_bus_type_and_status(acpi_handle handle, int *type,
> static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl,
> void *context, void **return_value)
> {
> - struct acpi_bus_ops *ops = context;
> int type;
> unsigned long long sta;
> struct acpi_device *device;
> @@ -1433,37 +1404,30 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl,
>
> /*
> * We may already have an acpi_device from a previous enumeration. If
> - * so, we needn't add it again, but we may still have to start it.
> + * so, we needn't add it again.
> */
> device = NULL;
> acpi_bus_get_device(handle, &device);
> - if (ops->acpi_op_add && !device)
> - acpi_add_single_object(&device, handle, type, sta, ops);
> + if (!device)
> + acpi_add_single_object(&device, handle, type, sta);
>
> if (!device)
> return AE_CTRL_DEPTH;
>
> - if (ops->acpi_op_start && !(ops->acpi_op_add)) {
> - status = acpi_start_single_object(device);
> - if (ACPI_FAILURE(status))
> - return AE_CTRL_DEPTH;
> - }
> -
> if (!*return_value)
> *return_value = device;
> return AE_OK;
> }
>
> -static int acpi_bus_scan(acpi_handle handle, struct acpi_bus_ops *ops,
> - struct acpi_device **child)
> +static int acpi_bus_scan(acpi_handle handle, struct acpi_device **child)
> {
> acpi_status status;
> void *device = NULL;
>
> - status = acpi_bus_check_add(handle, 0, ops, &device);
> + status = acpi_bus_check_add(handle, 0, NULL, &device);
> if (ACPI_SUCCESS(status))
> acpi_walk_namespace(ACPI_TYPE_ANY, handle, ACPI_UINT32_MAX,
> - acpi_bus_check_add, NULL, ops, &device);
> + acpi_bus_check_add, NULL, NULL, &device);
>
> if (child)
> *child = device;
> @@ -1488,28 +1452,24 @@ static void acpi_bus_attach(struct acpi_device *dev)
> }
>
> /*
> - * 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)
> {
> - struct acpi_bus_ops ops;
> int result;
>
> - memset(&ops, 0, sizeof(ops));
> - ops.acpi_op_add = 1;
> -
> - result = acpi_bus_scan(handle, &ops, child);
> + result = acpi_bus_scan(handle, child);
>
> if (*child)
> acpi_bus_attach(*child);
> @@ -1520,20 +1480,12 @@ EXPORT_SYMBOL(acpi_bus_add);
>
> int acpi_bus_start(struct acpi_device *device)
> {
> - struct acpi_bus_ops ops;
> - int result;
> -
> if (!device)
> return -EINVAL;
>
> - memset(&ops, 0, sizeof(ops));
> - ops.acpi_op_start = 1;
> -
> - result = acpi_bus_scan(device->handle, &ops, NULL);
> -
> acpi_update_all_gpes();
>
> - return result;
> + return 0;
> }
> EXPORT_SYMBOL(acpi_bus_start);
>
> @@ -1596,11 +1548,6 @@ static int acpi_bus_scan_fixed(void)
> {
> int result = 0;
> struct acpi_device *device = NULL;
> - struct acpi_bus_ops ops;
> -
> - memset(&ops, 0, sizeof(ops));
> - ops.acpi_op_add = 1;
> - ops.acpi_op_start = 1;
>
> /*
> * Enumerate all fixed-feature devices.
> @@ -1608,17 +1555,14 @@ static int acpi_bus_scan_fixed(void)
> if ((acpi_gbl_FADT.flags & ACPI_FADT_POWER_BUTTON) == 0) {
> result = acpi_add_single_object(&device, NULL,
> ACPI_BUS_TYPE_POWER_BUTTON,
> - ACPI_STA_DEFAULT,
> - &ops);
> + ACPI_STA_DEFAULT);
> device_init_wakeup(&device->dev, true);
> }
>
> - if ((acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON) == 0) {
> + if ((acpi_gbl_FADT.flags & ACPI_FADT_SLEEP_BUTTON) == 0)
> result = acpi_add_single_object(&device, NULL,
> ACPI_BUS_TYPE_SLEEP_BUTTON,
> - ACPI_STA_DEFAULT,
> - &ops);
> - }
> + ACPI_STA_DEFAULT);
>
> return result;
> }
> @@ -1626,11 +1570,6 @@ static int acpi_bus_scan_fixed(void)
> int __init acpi_scan_init(void)
> {
> int result;
> - struct acpi_bus_ops ops;
> -
> - memset(&ops, 0, sizeof(ops));
> - ops.acpi_op_add = 1;
> - ops.acpi_op_start = 1;
>
> result = bus_register(&acpi_bus_type);
> if (result) {
> @@ -1643,7 +1582,7 @@ int __init acpi_scan_init(void)
> /*
> * Enumerate devices in the ACPI namespace.
> */
> - result = acpi_bus_scan(ACPI_ROOT_OBJECT, &ops, &acpi_root);
> + result = acpi_bus_scan(ACPI_ROOT_OBJECT, &acpi_root);
>
> if (!result)
> result = acpi_bus_scan_fixed();
> diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
> index 969544e..cc9363b 100644
> --- a/include/acpi/acpi_bus.h
> +++ b/include/acpi/acpi_bus.h
> @@ -119,20 +119,13 @@ struct acpi_device;
>
> typedef int (*acpi_op_add) (struct acpi_device * device);
> typedef int (*acpi_op_remove) (struct acpi_device * device, int type);
> -typedef int (*acpi_op_start) (struct acpi_device * device);
> typedef int (*acpi_op_bind) (struct acpi_device * device);
> typedef int (*acpi_op_unbind) (struct acpi_device * device);
> typedef void (*acpi_op_notify) (struct acpi_device * device, u32 event);
>
> -struct acpi_bus_ops {
> - u32 acpi_op_add:1;
> - u32 acpi_op_start:1;
> -};
> -
> struct acpi_device_ops {
> acpi_op_add add;
> acpi_op_remove remove;
> - acpi_op_start start;
> acpi_op_bind bind;
> acpi_op_unbind unbind;
> acpi_op_notify notify;
> @@ -302,7 +295,6 @@ struct acpi_device {
> struct acpi_driver *driver;
> void *driver_data;
> struct device dev;
> - struct acpi_bus_ops bus_ops; /* workaround for different code path for hotplug */
> enum acpi_bus_removal_type removal_type; /* indicate for different removal type */
> bool drivers_autoprobe;
> };
> --
> 1.7.7
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/