wq.c (823B)
1// SPDX-License-Identifier: GPL-2.0-only 2#include "edac_module.h" 3 4static struct workqueue_struct *wq; 5 6bool edac_queue_work(struct delayed_work *work, unsigned long delay) 7{ 8 return queue_delayed_work(wq, work, delay); 9} 10EXPORT_SYMBOL_GPL(edac_queue_work); 11 12bool edac_mod_work(struct delayed_work *work, unsigned long delay) 13{ 14 return mod_delayed_work(wq, work, delay); 15} 16EXPORT_SYMBOL_GPL(edac_mod_work); 17 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} 27EXPORT_SYMBOL_GPL(edac_stop_work); 28 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 38void edac_workqueue_teardown(void) 39{ 40 flush_workqueue(wq); 41 destroy_workqueue(wq); 42 wq = NULL; 43}