1 // SPDX-License-Identifier: GPL-2.0-only 2 #include "edac_module.h" 3 4 static struct workqueue_struct *wq; 5 6 bool 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 12 bool 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 18 bool 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 29 int 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 38 void edac_workqueue_teardown(void) 39 { 40 destroy_workqueue(wq); 41 wq = NULL; 42 } 43