#include "edac_module.h"

static struct workqueue_struct *wq;

bool edac_queue_work(struct delayed_work *work, unsigned long delay)
{
	return queue_delayed_work(wq, work, delay);
}
EXPORT_SYMBOL_GPL(edac_queue_work);

bool edac_mod_work(struct delayed_work *work, unsigned long delay)
{
	return mod_delayed_work(wq, work, delay);
}
EXPORT_SYMBOL_GPL(edac_mod_work);

bool edac_stop_work(struct delayed_work *work)
{
	bool ret;

	ret = cancel_delayed_work_sync(work);
	flush_workqueue(wq);

	return ret;
}
EXPORT_SYMBOL_GPL(edac_stop_work);

int edac_workqueue_setup(void)
{
	wq = alloc_ordered_workqueue("edac-poller", WQ_MEM_RECLAIM);
	if (!wq)
		return -ENODEV;
	else
		return 0;
}

void edac_workqueue_teardown(void)
{
	flush_workqueue(wq);
	destroy_workqueue(wq);
	wq = NULL;
}
