| #include "edac_module.h" | |
| static struct workqueue_struct *wq; | |
| bool edac_queue_work(struct delayed_work *work, unsigned long delay) | |
| { | |
| return queue_delayed_work(wq, work, delay); | |
| } | |
| EXPORT_SYMBOL_GPL(edac_queue_work); | |
| bool edac_mod_work(struct delayed_work *work, unsigned long delay) | |
| { | |
| return mod_delayed_work(wq, work, delay); | |
| } | |
| EXPORT_SYMBOL_GPL(edac_mod_work); | |
| bool edac_stop_work(struct delayed_work *work) | |
| { | |
| bool ret; | |
| ret = cancel_delayed_work_sync(work); | |
| flush_workqueue(wq); | |
| return ret; | |
| } | |
| EXPORT_SYMBOL_GPL(edac_stop_work); | |
| int edac_workqueue_setup(void) | |
| { | |
| wq = alloc_ordered_workqueue("edac-poller", WQ_MEM_RECLAIM); | |
| if (!wq) | |
| return -ENODEV; | |
| else | |
| return 0; | |
| } | |
| void edac_workqueue_teardown(void) | |
| { | |
| flush_workqueue(wq); | |
| destroy_workqueue(wq); | |
| wq = NULL; | |
| } |