Commit | Line | Data |
---|---|---|
09c434b8 | 1 | // SPDX-License-Identifier: GPL-2.0-only |
aad108aa SRRH |
2 | #include <linux/module.h> |
3 | #include <linux/kthread.h> | |
4 | #include <linux/irq_work.h> | |
5 | ||
6 | /* Must not be static to force gcc to consider these non constant */ | |
7 | char *trace_printk_test_global_str = | |
8 | "This is a dynamic string that will use trace_puts\n"; | |
9 | ||
10 | char *trace_printk_test_global_str_irq = | |
11 | "(irq) This is a dynamic string that will use trace_puts\n"; | |
12 | ||
13 | char *trace_printk_test_global_str_fmt = | |
14 | "%sThis is a %s that will use trace_printk\n"; | |
15 | ||
16 | static struct irq_work irqwork; | |
17 | ||
18 | static void trace_printk_irq_work(struct irq_work *work) | |
19 | { | |
20 | trace_printk("(irq) This is a static string that will use trace_bputs\n"); | |
21 | trace_printk(trace_printk_test_global_str_irq); | |
22 | ||
23 | trace_printk("(irq) This is a %s that will use trace_bprintk()\n", | |
24 | "static string"); | |
25 | ||
26 | trace_printk(trace_printk_test_global_str_fmt, | |
27 | "(irq) ", "dynamic string"); | |
28 | } | |
29 | ||
30 | static int __init trace_printk_init(void) | |
31 | { | |
32 | init_irq_work(&irqwork, trace_printk_irq_work); | |
33 | ||
34 | trace_printk("This is a static string that will use trace_bputs\n"); | |
35 | trace_printk(trace_printk_test_global_str); | |
36 | ||
37 | /* Kick off printing in irq context */ | |
38 | irq_work_queue(&irqwork); | |
39 | ||
40 | trace_printk("This is a %s that will use trace_bprintk()\n", | |
41 | "static string"); | |
42 | ||
43 | trace_printk(trace_printk_test_global_str_fmt, "", "dynamic string"); | |
44 | ||
45 | return 0; | |
46 | } | |
47 | ||
48 | static void __exit trace_printk_exit(void) | |
49 | { | |
50 | } | |
51 | ||
52 | module_init(trace_printk_init); | |
53 | module_exit(trace_printk_exit); | |
54 | ||
55 | MODULE_AUTHOR("Steven Rostedt"); | |
56 | MODULE_DESCRIPTION("trace-printk"); | |
57 | MODULE_LICENSE("GPL"); |