Re: [PATCH v9 06/11] PCI, ACPI, acpiphp: Rename alloc_acpiphp_hp_work() to alloc_acpi_hp_work

From: Rafael J. Wysocki
Date: Sun Jan 20 2013 - 17:31:56 EST


On Thursday, January 17, 2013 11:53:17 PM Yinghai Lu wrote:
> Will need to use it for pci root bridge hotplug support, rename
> *acpiphp* to *acpi* and move to osc.c.
> Also make kacpi_hotplug_wq static after that.
>
> Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>
> Cc: Len Brown <lenb@xxxxxxxxxx>
> Cc: linux-acpi@xxxxxxxxxxxxxxx
> ---
> drivers/acpi/osl.c | 24 +++++++++++++++++++--
> drivers/pci/hotplug/acpiphp_glue.c | 42 ++++++------------------------------
> include/acpi/acpiosxf.h | 9 +++++++-
> 3 files changed, 36 insertions(+), 39 deletions(-)
>
> diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
> index 3ff2678..afcce46 100644
> --- a/drivers/acpi/osl.c
> +++ b/drivers/acpi/osl.c
> @@ -84,8 +84,7 @@ static acpi_osd_handler acpi_irq_handler;
> static void *acpi_irq_context;
> static struct workqueue_struct *kacpid_wq;
> static struct workqueue_struct *kacpi_notify_wq;
> -struct workqueue_struct *kacpi_hotplug_wq;
> -EXPORT_SYMBOL(kacpi_hotplug_wq);
> +static struct workqueue_struct *kacpi_hotplug_wq;
>
> /*
> * This list of permanent mappings is for memory that may be accessed from
> @@ -1778,3 +1777,24 @@ void acpi_os_set_prepare_sleep(int (*func)(u8 sleep_state,
> {
> __acpi_os_prepare_sleep = func;
> }
> +
> +void alloc_acpi_hp_work(acpi_handle handle, u32 type, void *context,
> + void (*func)(struct work_struct *work))
> +{
> + struct acpi_hp_work *hp_work;
> + int ret;
> +
> + hp_work = kmalloc(sizeof(*hp_work), GFP_KERNEL);
> + if (!hp_work)
> + return;
> +
> + hp_work->handle = handle;
> + hp_work->type = type;
> + hp_work->context = context;
> +
> + INIT_WORK(&hp_work->work, func);
> + ret = queue_work(kacpi_hotplug_wq, &hp_work->work);
> + if (!ret)
> + kfree(hp_work);
> +}
> +EXPORT_SYMBOL(alloc_acpi_hp_work);

That should be EXPORT_SYMBOL_GPL().

> diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
> index 79db296..55e03b6 100644
> --- a/drivers/pci/hotplug/acpiphp_glue.c
> +++ b/drivers/pci/hotplug/acpiphp_glue.c
> @@ -1203,34 +1203,6 @@ check_sub_bridges(acpi_handle handle, u32 lvl, void *context, void **rv)
> return AE_OK ;
> }
>
> -struct acpiphp_hp_work {
> - struct work_struct work;
> - acpi_handle handle;
> - u32 type;
> - void *context;
> -};
> -
> -static void alloc_acpiphp_hp_work(acpi_handle handle, u32 type,
> - void *context,
> - void (*func)(struct work_struct *work))
> -{
> - struct acpiphp_hp_work *hp_work;
> - int ret;
> -
> - hp_work = kmalloc(sizeof(*hp_work), GFP_KERNEL);
> - if (!hp_work)
> - return;
> -
> - hp_work->handle = handle;
> - hp_work->type = type;
> - hp_work->context = context;
> -
> - INIT_WORK(&hp_work->work, func);
> - ret = queue_work(kacpi_hotplug_wq, &hp_work->work);
> - if (!ret)
> - kfree(hp_work);
> -}
> -
> static void _handle_hotplug_event_bridge(struct work_struct *work)
> {
> struct acpiphp_bridge *bridge;
> @@ -1239,11 +1211,11 @@ static void _handle_hotplug_event_bridge(struct work_struct *work)
> .pointer = objname };
> struct acpi_device *device;
> int num_sub_bridges = 0;
> - struct acpiphp_hp_work *hp_work;
> + struct acpi_hp_work *hp_work;
> acpi_handle handle;
> u32 type;
>
> - hp_work = container_of(work, struct acpiphp_hp_work, work);
> + hp_work = container_of(work, struct acpi_hp_work, work);
> handle = hp_work->handle;
> type = hp_work->type;
>
> @@ -1346,8 +1318,7 @@ static void handle_hotplug_event_bridge(acpi_handle handle, u32 type,
> * For now just re-add this work to the kacpi_hotplug_wq so we
> * don't deadlock on hotplug actions.
> */
> - alloc_acpiphp_hp_work(handle, type, context,
> - _handle_hotplug_event_bridge);
> + alloc_acpi_hp_work(handle, type, context, _handle_hotplug_event_bridge);
> }
>
> static void _handle_hotplug_event_func(struct work_struct *work)
> @@ -1356,12 +1327,12 @@ static void _handle_hotplug_event_func(struct work_struct *work)
> char objname[64];
> struct acpi_buffer buffer = { .length = sizeof(objname),
> .pointer = objname };
> - struct acpiphp_hp_work *hp_work;
> + struct acpi_hp_work *hp_work;
> acpi_handle handle;
> u32 type;
> void *context;
>
> - hp_work = container_of(work, struct acpiphp_hp_work, work);
> + hp_work = container_of(work, struct acpi_hp_work, work);
> handle = hp_work->handle;
> type = hp_work->type;
> context = hp_work->context;
> @@ -1422,8 +1393,7 @@ static void handle_hotplug_event_func(acpi_handle handle, u32 type,
> * For now just re-add this work to the kacpi_hotplug_wq so we
> * don't deadlock on hotplug actions.
> */
> - alloc_acpiphp_hp_work(handle, type, context,
> - _handle_hotplug_event_func);
> + alloc_acpi_hp_work(handle, type, context, _handle_hotplug_event_func);
> }
>
> static acpi_status
> diff --git a/include/acpi/acpiosxf.h b/include/acpi/acpiosxf.h
> index 4315274..adab63c 100644
> --- a/include/acpi/acpiosxf.h
> +++ b/include/acpi/acpiosxf.h
> @@ -193,7 +193,14 @@ void acpi_os_fixed_event_count(u32 fixed_event_number);
> /*
> * Threads and Scheduling
> */
> -extern struct workqueue_struct *kacpi_hotplug_wq;

include/acpi/acpiosxf.h is related to ACPICA, so while removing kacpi_hotplug_wq
from it should be OK, please put the rest into acpi_bus.h, preferably next to the
definition of acpi_eject_event.

> +struct acpi_hp_work {
> + struct work_struct work;
> + acpi_handle handle;
> + u32 type;
> + void *context;
> +};
> +void alloc_acpi_hp_work(acpi_handle handle, u32 type, void *context,
> + void (*func)(struct work_struct *work));
>
> acpi_thread_id acpi_os_get_thread_id(void);

Thanks,
Rafael


--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
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/