Skip to content

Commit

Permalink
PCI: pciehp: Drop slot workqueue
Browse files Browse the repository at this point in the history
Previously the slot workqueue was used to handle events and enable or
disable the slot.  That's no longer the case as those tasks are done
synchronously in the IRQ thread.  The slot workqueue is thus merely used
to handle a button press after the 5 second delay and only one such work
item may be in flight at any given time.  A separate workqueue isn't
necessary for this simple task, so use the system workqueue instead.

Signed-off-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
  • Loading branch information
Lukas Wunner authored and Bjorn Helgaas committed Jul 23, 2018
1 parent 0e94916 commit 55a6b7a
Show file tree
Hide file tree
Showing 4 changed files with 2 additions and 17 deletions.
2 changes: 0 additions & 2 deletions drivers/pci/hotplug/pciehp.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ do { \
* protects scheduling, execution and cancellation of @work
* @hotplug_lock: serializes calls to pciehp_enable_slot() and
* pciehp_disable_slot()
* @wq: work queue on which @work is scheduled
*/
struct slot {
u8 state;
Expand All @@ -78,7 +77,6 @@ struct slot {
struct delayed_work work;
struct mutex lock;
struct mutex hotplug_lock;
struct workqueue_struct *wq;
};

/**
Expand Down
6 changes: 0 additions & 6 deletions drivers/pci/hotplug/pciehp_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,6 @@ static int reset_slot(struct hotplug_slot *slot, int probe);
*/
static void release_slot(struct hotplug_slot *hotplug_slot)
{
struct slot *slot = hotplug_slot->private;

/* queued work needs hotplug_slot name */
cancel_delayed_work(&slot->work);
drain_workqueue(slot->wq);

kfree(hotplug_slot->ops);
kfree(hotplug_slot->info);
kfree(hotplug_slot);
Expand Down
2 changes: 1 addition & 1 deletion drivers/pci/hotplug/pciehp_ctrl.c
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ void pciehp_handle_button_press(struct slot *p_slot)
/* blink green LED and turn off amber */
pciehp_green_led_blink(p_slot);
pciehp_set_attention_status(p_slot, 0);
queue_delayed_work(p_slot->wq, &p_slot->work, 5*HZ);
schedule_delayed_work(&p_slot->work, 5 * HZ);
break;
case BLINKINGOFF_STATE:
case BLINKINGON_STATE:
Expand Down
9 changes: 1 addition & 8 deletions drivers/pci/hotplug/pciehp_hpc.c
Original file line number Diff line number Diff line change
Expand Up @@ -767,26 +767,19 @@ static int pcie_init_slot(struct controller *ctrl)
if (!slot)
return -ENOMEM;

slot->wq = alloc_ordered_workqueue("pciehp-%u", 0, PSN(ctrl));
if (!slot->wq)
goto abort;

slot->ctrl = ctrl;
mutex_init(&slot->lock);
mutex_init(&slot->hotplug_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;

destroy_workqueue(slot->wq);
cancel_delayed_work_sync(&slot->work);
kfree(slot);
}

Expand Down

0 comments on commit 55a6b7a

Please sign in to comment.