cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

test_klp_callbacks_busy.c (1510B)


      1// SPDX-License-Identifier: GPL-2.0
      2// Copyright (C) 2018 Joe Lawrence <joe.lawrence@redhat.com>
      3
      4#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
      5
      6#include <linux/module.h>
      7#include <linux/kernel.h>
      8#include <linux/sched.h>
      9#include <linux/workqueue.h>
     10#include <linux/delay.h>
     11
     12/* load/run-time control from sysfs writer  */
     13static bool block_transition;
     14module_param(block_transition, bool, 0644);
     15MODULE_PARM_DESC(block_transition, "block_transition (default=false)");
     16
     17static void busymod_work_func(struct work_struct *work);
     18static DECLARE_WORK(work, busymod_work_func);
     19
     20static void busymod_work_func(struct work_struct *work)
     21{
     22	pr_info("%s enter\n", __func__);
     23
     24	while (READ_ONCE(block_transition)) {
     25		/*
     26		 * Busy-wait until the sysfs writer has acknowledged a
     27		 * blocked transition and clears the flag.
     28		 */
     29		msleep(20);
     30	}
     31
     32	pr_info("%s exit\n", __func__);
     33}
     34
     35static int test_klp_callbacks_busy_init(void)
     36{
     37	pr_info("%s\n", __func__);
     38	schedule_work(&work);
     39
     40	if (!block_transition) {
     41		/*
     42		 * Serialize output: print all messages from the work
     43		 * function before returning from init().
     44		 */
     45		flush_work(&work);
     46	}
     47
     48	return 0;
     49}
     50
     51static void test_klp_callbacks_busy_exit(void)
     52{
     53	WRITE_ONCE(block_transition, false);
     54	flush_work(&work);
     55	pr_info("%s\n", __func__);
     56}
     57
     58module_init(test_klp_callbacks_busy_init);
     59module_exit(test_klp_callbacks_busy_exit);
     60MODULE_LICENSE("GPL");
     61MODULE_AUTHOR("Joe Lawrence <joe.lawrence@redhat.com>");
     62MODULE_DESCRIPTION("Livepatch test: busy target module");