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

backtracetest.c (1918B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * Simple stack backtrace regression test module
      4 *
      5 * (C) Copyright 2008 Intel Corporation
      6 * Author: Arjan van de Ven <arjan@linux.intel.com>
      7 */
      8
      9#include <linux/completion.h>
     10#include <linux/delay.h>
     11#include <linux/interrupt.h>
     12#include <linux/module.h>
     13#include <linux/sched.h>
     14#include <linux/stacktrace.h>
     15
     16static void backtrace_test_normal(void)
     17{
     18	pr_info("Testing a backtrace from process context.\n");
     19	pr_info("The following trace is a kernel self test and not a bug!\n");
     20
     21	dump_stack();
     22}
     23
     24static DECLARE_COMPLETION(backtrace_work);
     25
     26static void backtrace_test_irq_callback(unsigned long data)
     27{
     28	dump_stack();
     29	complete(&backtrace_work);
     30}
     31
     32static DECLARE_TASKLET_OLD(backtrace_tasklet, &backtrace_test_irq_callback);
     33
     34static void backtrace_test_irq(void)
     35{
     36	pr_info("Testing a backtrace from irq context.\n");
     37	pr_info("The following trace is a kernel self test and not a bug!\n");
     38
     39	init_completion(&backtrace_work);
     40	tasklet_schedule(&backtrace_tasklet);
     41	wait_for_completion(&backtrace_work);
     42}
     43
     44#ifdef CONFIG_STACKTRACE
     45static void backtrace_test_saved(void)
     46{
     47	unsigned long entries[8];
     48	unsigned int nr_entries;
     49
     50	pr_info("Testing a saved backtrace.\n");
     51	pr_info("The following trace is a kernel self test and not a bug!\n");
     52
     53	nr_entries = stack_trace_save(entries, ARRAY_SIZE(entries), 0);
     54	stack_trace_print(entries, nr_entries, 0);
     55}
     56#else
     57static void backtrace_test_saved(void)
     58{
     59	pr_info("Saved backtrace test skipped.\n");
     60}
     61#endif
     62
     63static int backtrace_regression_test(void)
     64{
     65	pr_info("====[ backtrace testing ]===========\n");
     66
     67	backtrace_test_normal();
     68	backtrace_test_irq();
     69	backtrace_test_saved();
     70
     71	pr_info("====[ end of backtrace testing ]====\n");
     72	return 0;
     73}
     74
     75static void exitf(void)
     76{
     77}
     78
     79module_init(backtrace_regression_test);
     80module_exit(exitf);
     81MODULE_LICENSE("GPL");
     82MODULE_AUTHOR("Arjan van de Ven <arjan@linux.intel.com>");