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