summaryrefslogtreecommitdiffstats
path: root/drivers/pci/hotplug/pciehp_hpc.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2013-02-01 07:22:47 +0100
committerTakashi Iwai <tiwai@suse.de>2013-02-01 07:22:47 +0100
commit8058e14259ddc8c1824387198fc53700ed4cccc9 (patch)
treefaffb83ca5173e5f3cbfd4170de603ada4812e23 /drivers/pci/hotplug/pciehp_hpc.c
parentALSA: hda - Fix non-snoop page handling (diff)
parentALSA: usb-audio: fix Roland A-PRO support (diff)
downloadlinux-8058e14259ddc8c1824387198fc53700ed4cccc9.tar.xz
linux-8058e14259ddc8c1824387198fc53700ed4cccc9.zip
Merge branch 'usb-audio-fix' of git://git.alsa-project.org/alsa-kprivate into for-linus
Diffstat (limited to 'drivers/pci/hotplug/pciehp_hpc.c')
-rw-r--r--drivers/pci/hotplug/pciehp_hpc.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
index 13b2eaf7ba43..5127f3f41821 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);
}