Files
Ciro Santilli 7d16a5c024 Move sleep and workqueue module doc to README
sleep was broken because the workqueue was declared locally inside init,
further evidence that no one has ever run the examples :-(
2018-07-07 19:04:58 +01:00

41 lines
787 B
C

/* https://github.com/cirosantilli/linux-kernel-module-cheat#workqueue-from-workqueue */
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/workqueue.h>
static int i;
static struct workqueue_struct *queue;
static void work_func(struct work_struct *work);
DECLARE_DELAYED_WORK(next_work, work_func);
DECLARE_WORK(work, work_func);
static void work_func(struct work_struct *work)
{
pr_info("%d\n", i);
i++;
if (i == 10)
i = 0;
queue_delayed_work(queue, &next_work, HZ);
}
static int myinit(void)
{
queue = create_workqueue("myworkqueue");
queue_work(queue, &work);
return 0;
}
static void myexit(void)
{
cancel_delayed_work(&next_work);
flush_workqueue(queue);
destroy_workqueue(queue);
}
module_init(myinit)
module_exit(myexit)
MODULE_LICENSE("GPL");