Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/samples/livepatch/livepatch-callbacks-busymod.c
26278 views
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
/*
3
* Copyright (C) 2017 Joe Lawrence <[email protected]>
4
*/
5
6
/*
7
* livepatch-callbacks-busymod.c - (un)patching callbacks demo support module
8
*
9
*
10
* Purpose
11
* -------
12
*
13
* Simple module to demonstrate livepatch (un)patching callbacks.
14
*
15
*
16
* Usage
17
* -----
18
*
19
* This module is not intended to be standalone. See the "Usage"
20
* section of livepatch-callbacks-mod.c.
21
*/
22
23
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
24
25
#include <linux/module.h>
26
#include <linux/kernel.h>
27
#include <linux/workqueue.h>
28
#include <linux/delay.h>
29
30
static int sleep_secs;
31
module_param(sleep_secs, int, 0644);
32
MODULE_PARM_DESC(sleep_secs, "sleep_secs (default=0)");
33
34
static void busymod_work_func(struct work_struct *work);
35
static DECLARE_DELAYED_WORK(work, busymod_work_func);
36
37
static void busymod_work_func(struct work_struct *work)
38
{
39
pr_info("%s, sleeping %d seconds ...\n", __func__, sleep_secs);
40
msleep(sleep_secs * 1000);
41
pr_info("%s exit\n", __func__);
42
}
43
44
static int livepatch_callbacks_mod_init(void)
45
{
46
pr_info("%s\n", __func__);
47
schedule_delayed_work(&work, 0);
48
return 0;
49
}
50
51
static void livepatch_callbacks_mod_exit(void)
52
{
53
cancel_delayed_work_sync(&work);
54
pr_info("%s\n", __func__);
55
}
56
57
module_init(livepatch_callbacks_mod_init);
58
module_exit(livepatch_callbacks_mod_exit);
59
MODULE_DESCRIPTION("Live patching demo for (un)patching callbacks, support module");
60
MODULE_LICENSE("GPL");
61
62