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 <ying...@kernel.org>
> Cc: Len Brown <l...@kernel.org>
> Cc: linux-a...@vger.kernel.org
> ---
>  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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to