1 #include "edac_module.h" 2 3 static struct workqueue_struct *wq; 4 edac_queue_work(struct delayed_work * work,unsigned long delay)5bool edac_queue_work(struct delayed_work *work, unsigned long delay) 6 { 7 return queue_delayed_work(wq, work, delay); 8 } 9 EXPORT_SYMBOL_GPL(edac_queue_work); 10 edac_mod_work(struct delayed_work * work,unsigned long delay)11bool edac_mod_work(struct delayed_work *work, unsigned long delay) 12 { 13 return mod_delayed_work(wq, work, delay); 14 } 15 EXPORT_SYMBOL_GPL(edac_mod_work); 16 edac_stop_work(struct delayed_work * work)17bool edac_stop_work(struct delayed_work *work) 18 { 19 bool ret; 20 21 ret = cancel_delayed_work_sync(work); 22 flush_workqueue(wq); 23 24 return ret; 25 } 26 EXPORT_SYMBOL_GPL(edac_stop_work); 27 edac_workqueue_setup(void)28int edac_workqueue_setup(void) 29 { 30 wq = alloc_ordered_workqueue("edac-poller", WQ_MEM_RECLAIM); 31 if (!wq) 32 return -ENODEV; 33 else 34 return 0; 35 } 36 edac_workqueue_teardown(void)37void edac_workqueue_teardown(void) 38 { 39 flush_workqueue(wq); 40 destroy_workqueue(wq); 41 wq = NULL; 42 } 43