diff options
| -rw-r--r-- | drivers/acpi/osl.c | 24 | ||||
| -rw-r--r-- | drivers/pci/hotplug/acpiphp_glue.c | 42 | ||||
| -rw-r--r-- | include/acpi/acpi_bus.h | 9 | ||||
| -rw-r--r-- | include/acpi/acpiosxf.h | 2 | 
4 files changed, 37 insertions, 40 deletions
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 3ff26786154..59ec5f52e84 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_GPL(alloc_acpi_hp_work); diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c index b94879d2063..bf338d2ff37 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/acpi_bus.h b/include/acpi/acpi_bus.h index 2c722deb249..d26c0d7a6d1 100644 --- a/include/acpi/acpi_bus.h +++ b/include/acpi/acpi_bus.h @@ -310,6 +310,15 @@ struct acpi_eject_event {  	u32		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)); +  extern struct kobject *acpi_kobj;  extern int acpi_bus_generate_netlink_event(const char*, const char*, u8, int);  void acpi_bus_private_data_handler(acpi_handle, void *); diff --git a/include/acpi/acpiosxf.h b/include/acpi/acpiosxf.h index 43152742b46..66f1fd70e8c 100644 --- a/include/acpi/acpiosxf.h +++ b/include/acpi/acpiosxf.h @@ -193,8 +193,6 @@ void acpi_os_fixed_event_count(u32 fixed_event_number);  /*   * Threads and Scheduling   */ -extern struct workqueue_struct *kacpi_hotplug_wq; -  acpi_thread_id acpi_os_get_thread_id(void);  acpi_status  |