diff options
Diffstat (limited to 'drivers/pci/hotplug/pciehp_hpc.c')
| -rw-r--r-- | drivers/pci/hotplug/pciehp_hpc.c | 11 | 
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index 13b2eaf7ba4..5127f3f4182 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c @@ -773,23 +773,32 @@ static void pcie_shutdown_notification(struct controller *ctrl)  static int pcie_init_slot(struct controller *ctrl)  {  	struct slot *slot; +	char name[32];  	slot = kzalloc(sizeof(*slot), GFP_KERNEL);  	if (!slot)  		return -ENOMEM; +	snprintf(name, sizeof(name), "pciehp-%u", PSN(ctrl)); +	slot->wq = alloc_workqueue(name, 0, 0); +	if (!slot->wq) +		goto abort; +  	slot->ctrl = ctrl;  	mutex_init(&slot->lock);  	INIT_DELAYED_WORK(&slot->work, pciehp_queue_pushbutton_work);  	ctrl->slot = slot;  	return 0; +abort: +	kfree(slot); +	return -ENOMEM;  }  static void pcie_cleanup_slot(struct controller *ctrl)  {  	struct slot *slot = ctrl->slot;  	cancel_delayed_work(&slot->work); -	flush_workqueue(pciehp_wq); +	destroy_workqueue(slot->wq);  	kfree(slot);  }  |