The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/kernel/backtracetest.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Simple stack backtrace regression test module
    3  *
    4  * (C) Copyright 2008 Intel Corporation
    5  * Author: Arjan van de Ven <arjan@linux.intel.com>
    6  *
    7  * This program is free software; you can redistribute it and/or
    8  * modify it under the terms of the GNU General Public License
    9  * as published by the Free Software Foundation; version 2
   10  * of the License.
   11  */
   12 
   13 #include <linux/completion.h>
   14 #include <linux/delay.h>
   15 #include <linux/interrupt.h>
   16 #include <linux/module.h>
   17 #include <linux/sched.h>
   18 #include <linux/stacktrace.h>
   19 
   20 static void backtrace_test_normal(void)
   21 {
   22         printk("Testing a backtrace from process context.\n");
   23         printk("The following trace is a kernel self test and not a bug!\n");
   24 
   25         dump_stack();
   26 }
   27 
   28 static DECLARE_COMPLETION(backtrace_work);
   29 
   30 static void backtrace_test_irq_callback(unsigned long data)
   31 {
   32         dump_stack();
   33         complete(&backtrace_work);
   34 }
   35 
   36 static DECLARE_TASKLET(backtrace_tasklet, &backtrace_test_irq_callback, 0);
   37 
   38 static void backtrace_test_irq(void)
   39 {
   40         printk("Testing a backtrace from irq context.\n");
   41         printk("The following trace is a kernel self test and not a bug!\n");
   42 
   43         init_completion(&backtrace_work);
   44         tasklet_schedule(&backtrace_tasklet);
   45         wait_for_completion(&backtrace_work);
   46 }
   47 
   48 #ifdef CONFIG_STACKTRACE
   49 static void backtrace_test_saved(void)
   50 {
   51         struct stack_trace trace;
   52         unsigned long entries[8];
   53 
   54         printk("Testing a saved backtrace.\n");
   55         printk("The following trace is a kernel self test and not a bug!\n");
   56 
   57         trace.nr_entries = 0;
   58         trace.max_entries = ARRAY_SIZE(entries);
   59         trace.entries = entries;
   60         trace.skip = 0;
   61 
   62         save_stack_trace(&trace);
   63         print_stack_trace(&trace, 0);
   64 }
   65 #else
   66 static void backtrace_test_saved(void)
   67 {
   68         printk("Saved backtrace test skipped.\n");
   69 }
   70 #endif
   71 
   72 static int backtrace_regression_test(void)
   73 {
   74         printk("====[ backtrace testing ]===========\n");
   75 
   76         backtrace_test_normal();
   77         backtrace_test_irq();
   78         backtrace_test_saved();
   79 
   80         printk("====[ end of backtrace testing ]====\n");
   81         return 0;
   82 }
   83 
   84 static void exitf(void)
   85 {
   86 }
   87 
   88 module_init(backtrace_regression_test);
   89 module_exit(exitf);
   90 MODULE_LICENSE("GPL");
   91 MODULE_AUTHOR("Arjan van de Ven <arjan@linux.intel.com>");

Cache object: 2dc4ec0960902e3ed6fc213ee8700ead


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.