Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/samples/trace_printk/trace-printk.c
26282 views
1
// SPDX-License-Identifier: GPL-2.0-only
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
irq_work_sync(&irqwork);
40
41
trace_printk("This is a %s that will use trace_bprintk()\n",
42
"static string");
43
44
trace_printk(trace_printk_test_global_str_fmt, "", "dynamic string");
45
46
return 0;
47
}
48
49
static void __exit trace_printk_exit(void)
50
{
51
}
52
53
module_init(trace_printk_init);
54
module_exit(trace_printk_exit);
55
56
MODULE_AUTHOR("Steven Rostedt");
57
MODULE_DESCRIPTION("trace-printk");
58
MODULE_LICENSE("GPL");
59
60