61 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Copyright (C) 2017 Joe Lawrence <joe.lawrence@redhat.com>4 */5 6/*7 * livepatch-callbacks-busymod.c - (un)patching callbacks demo support module8 *9 *10 * Purpose11 * -------12 *13 * Simple module to demonstrate livepatch (un)patching callbacks.14 *15 *16 * Usage17 * -----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 ": " fmt24 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");61