Files
linux-kernel-module-cheat/kernel_module/workqueue_cheat.c
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

42 lines
787 B
C

/* https://github.com/cirosantilli/linux-kernel-module-cheat#workqueue */
#include <linux/delay.h> /* usleep_range */
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/types.h> /* atomic_t */
#include <linux/workqueue.h>
static struct workqueue_struct *queue;
static atomic_t run = ATOMIC_INIT(1);
static void work_func(struct work_struct *work)
{
int i = 0;
while (atomic_read(&run)) {
pr_info("%d\n", i);
usleep_range(1000000, 1000001);
i++;
if (i == 10)
i = 0;
}
}
DECLARE_WORK(work, work_func);
static int myinit(void)
{
queue = create_workqueue("myworkqueue");
queue_work(queue, &work);
return 0;
}
static void myexit(void)
{
atomic_set(&run, 0);
destroy_workqueue(queue);
}
module_init(myinit)
module_exit(myexit)
MODULE_LICENSE("GPL");