livepatch-callbacks-busymod.c (1373B)
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Copyright (C) 2017 Joe Lawrence <joe.lawrence@redhat.com> 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 30static int sleep_secs; 31module_param(sleep_secs, int, 0644); 32MODULE_PARM_DESC(sleep_secs, "sleep_secs (default=0)"); 33 34static void busymod_work_func(struct work_struct *work); 35static DECLARE_DELAYED_WORK(work, busymod_work_func); 36 37static 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 44static int livepatch_callbacks_mod_init(void) 45{ 46 pr_info("%s\n", __func__); 47 schedule_delayed_work(&work, 48 msecs_to_jiffies(1000 * 0)); 49 return 0; 50} 51 52static void livepatch_callbacks_mod_exit(void) 53{ 54 cancel_delayed_work_sync(&work); 55 pr_info("%s\n", __func__); 56} 57 58module_init(livepatch_callbacks_mod_init); 59module_exit(livepatch_callbacks_mod_exit); 60MODULE_LICENSE("GPL");