Commit d347e758 authored by Bjorn Helgaas's avatar Bjorn Helgaas

PCI: shpchp: Handle push button event asynchronously

Use non-ordered workqueue for attention button events.

Attention button events on each slot can be handled asynchronously. So
we should use non-ordered workqueue. This patch also removes ordered
workqueue in shpchp as a result.

486b10b9 ("PCI: pciehp: Handle push button event asynchronously") made
the same change to pciehp.  I split this out from a patch by Yijing Wang
<wangyijing@huawei.com> so we fix one thing at a time and to make the
shpchp history correspond more closely with the pciehp history.
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
CC: Kenji Kaneshige <kaneshige.kenji@jp.fujitsu.com>
parent 10959d72
...@@ -47,7 +47,6 @@ extern bool shpchp_poll_mode; ...@@ -47,7 +47,6 @@ extern bool shpchp_poll_mode;
extern int shpchp_poll_time; extern int shpchp_poll_time;
extern bool shpchp_debug; extern bool shpchp_debug;
extern struct workqueue_struct *shpchp_wq; extern struct workqueue_struct *shpchp_wq;
extern struct workqueue_struct *shpchp_ordered_wq;
#define dbg(format, arg...) \ #define dbg(format, arg...) \
do { \ do { \
......
...@@ -40,7 +40,6 @@ bool shpchp_debug; ...@@ -40,7 +40,6 @@ bool shpchp_debug;
bool shpchp_poll_mode; bool shpchp_poll_mode;
int shpchp_poll_time; int shpchp_poll_time;
struct workqueue_struct *shpchp_wq; struct workqueue_struct *shpchp_wq;
struct workqueue_struct *shpchp_ordered_wq;
#define DRIVER_VERSION "0.4" #define DRIVER_VERSION "0.4"
#define DRIVER_AUTHOR "Dan Zink <dan.zink@compaq.com>, Greg Kroah-Hartman <greg@kroah.com>, Dely Sy <dely.l.sy@intel.com>" #define DRIVER_AUTHOR "Dan Zink <dan.zink@compaq.com>, Greg Kroah-Hartman <greg@kroah.com>, Dely Sy <dely.l.sy@intel.com>"
...@@ -181,7 +180,6 @@ void cleanup_slots(struct controller *ctrl) ...@@ -181,7 +180,6 @@ void cleanup_slots(struct controller *ctrl)
list_del(&slot->slot_list); list_del(&slot->slot_list);
cancel_delayed_work(&slot->work); cancel_delayed_work(&slot->work);
flush_workqueue(shpchp_wq); flush_workqueue(shpchp_wq);
flush_workqueue(shpchp_ordered_wq);
pci_hp_deregister(slot->hotplug_slot); pci_hp_deregister(slot->hotplug_slot);
} }
} }
...@@ -370,17 +368,10 @@ static int __init shpcd_init(void) ...@@ -370,17 +368,10 @@ static int __init shpcd_init(void)
if (!shpchp_wq) if (!shpchp_wq)
return -ENOMEM; return -ENOMEM;
shpchp_ordered_wq = alloc_ordered_workqueue("shpchp_ordered", 0);
if (!shpchp_ordered_wq) {
destroy_workqueue(shpchp_wq);
return -ENOMEM;
}
retval = pci_register_driver(&shpc_driver); retval = pci_register_driver(&shpc_driver);
dbg("%s: pci_register_driver = %d\n", __func__, retval); dbg("%s: pci_register_driver = %d\n", __func__, retval);
info(DRIVER_DESC " version: " DRIVER_VERSION "\n"); info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
if (retval) { if (retval) {
destroy_workqueue(shpchp_ordered_wq);
destroy_workqueue(shpchp_wq); destroy_workqueue(shpchp_wq);
} }
return retval; return retval;
...@@ -390,7 +381,6 @@ static void __exit shpcd_cleanup(void) ...@@ -390,7 +381,6 @@ static void __exit shpcd_cleanup(void)
{ {
dbg("unload_shpchpd()\n"); dbg("unload_shpchpd()\n");
pci_unregister_driver(&shpc_driver); pci_unregister_driver(&shpc_driver);
destroy_workqueue(shpchp_ordered_wq);
destroy_workqueue(shpchp_wq); destroy_workqueue(shpchp_wq);
info(DRIVER_DESC " version: " DRIVER_VERSION " unloaded\n"); info(DRIVER_DESC " version: " DRIVER_VERSION " unloaded\n");
} }
......
...@@ -453,7 +453,7 @@ void shpchp_queue_pushbutton_work(struct work_struct *work) ...@@ -453,7 +453,7 @@ void shpchp_queue_pushbutton_work(struct work_struct *work)
kfree(info); kfree(info);
goto out; goto out;
} }
queue_work(shpchp_ordered_wq, &info->work); queue_work(shpchp_wq, &info->work);
out: out:
mutex_unlock(&p_slot->lock); mutex_unlock(&p_slot->lock);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment