linux/drivers/edac/wq.c
<<
>>
Prefs
   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}
  44