Commit | Line | Data |
---|---|---|
457c8996 | 1 | // SPDX-License-Identifier: GPL-2.0-only |
c4cf3b45 BP |
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 | { | |
7bb8b777 | 31 | wq = alloc_ordered_workqueue("edac-poller", WQ_MEM_RECLAIM); |
c4cf3b45 BP |
32 | if (!wq) |
33 | return -ENODEV; | |
34 | else | |
35 | return 0; | |
36 | } | |
37 | ||
38 | void edac_workqueue_teardown(void) | |
39 | { | |
40 | flush_workqueue(wq); | |
41 | destroy_workqueue(wq); | |
42 | wq = NULL; | |
43 | } |