forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tracepoint example code under samples/. Signed-off-by: Mathieu Desnoyers <[email protected]> Acked-by: 'Peter Zijlstra' <[email protected]> Signed-off-by: Ingo Molnar <[email protected]>
- Loading branch information
Mathieu Desnoyers
authored and
Ingo Molnar
committed
Oct 14, 2008
1 parent
24b8d83
commit 4a08975
Showing
7 changed files
with
176 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
# Makefile for Linux samples code | ||
|
||
obj-$(CONFIG_SAMPLES) += markers/ kobject/ kprobes/ | ||
obj-$(CONFIG_SAMPLES) += markers/ kobject/ kprobes/ tracepoints/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
# builds the tracepoint example kernel modules; | ||
# then to use one (as root): insmod <module_name.ko> | ||
|
||
obj-$(CONFIG_SAMPLE_TRACEPOINTS) += tracepoint-sample.o | ||
obj-$(CONFIG_SAMPLE_TRACEPOINTS) += tracepoint-probe-sample.o | ||
obj-$(CONFIG_SAMPLE_TRACEPOINTS) += tracepoint-probe-sample2.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
#ifndef _TP_SAMPLES_TRACE_H | ||
#define _TP_SAMPLES_TRACE_H | ||
|
||
#include <linux/proc_fs.h> /* for struct inode and struct file */ | ||
#include <linux/tracepoint.h> | ||
|
||
DEFINE_TRACE(subsys_event, | ||
TPPROTO(struct inode *inode, struct file *file), | ||
TPARGS(inode, file)); | ||
DEFINE_TRACE(subsys_eventb, | ||
TPPROTO(void), | ||
TPARGS()); | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
/* | ||
* tracepoint-probe-sample.c | ||
* | ||
* sample tracepoint probes. | ||
*/ | ||
|
||
#include <linux/module.h> | ||
#include <linux/file.h> | ||
#include <linux/dcache.h> | ||
#include "tp-samples-trace.h" | ||
|
||
/* | ||
* Here the caller only guarantees locking for struct file and struct inode. | ||
* Locking must therefore be done in the probe to use the dentry. | ||
*/ | ||
static void probe_subsys_event(struct inode *inode, struct file *file) | ||
{ | ||
path_get(&file->f_path); | ||
dget(file->f_path.dentry); | ||
printk(KERN_INFO "Event is encountered with filename %s\n", | ||
file->f_path.dentry->d_name.name); | ||
dput(file->f_path.dentry); | ||
path_put(&file->f_path); | ||
} | ||
|
||
static void probe_subsys_eventb(void) | ||
{ | ||
printk(KERN_INFO "Event B is encountered\n"); | ||
} | ||
|
||
int __init tp_sample_trace_init(void) | ||
{ | ||
int ret; | ||
|
||
ret = register_trace_subsys_event(probe_subsys_event); | ||
WARN_ON(ret); | ||
ret = register_trace_subsys_eventb(probe_subsys_eventb); | ||
WARN_ON(ret); | ||
|
||
return 0; | ||
} | ||
|
||
module_init(tp_sample_trace_init); | ||
|
||
void __exit tp_sample_trace_exit(void) | ||
{ | ||
unregister_trace_subsys_eventb(probe_subsys_eventb); | ||
unregister_trace_subsys_event(probe_subsys_event); | ||
} | ||
|
||
module_exit(tp_sample_trace_exit); | ||
|
||
MODULE_LICENSE("GPL"); | ||
MODULE_AUTHOR("Mathieu Desnoyers"); | ||
MODULE_DESCRIPTION("Tracepoint Probes Samples"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
/* | ||
* tracepoint-probe-sample2.c | ||
* | ||
* 2nd sample tracepoint probes. | ||
*/ | ||
|
||
#include <linux/module.h> | ||
#include <linux/fs.h> | ||
#include "tp-samples-trace.h" | ||
|
||
/* | ||
* Here the caller only guarantees locking for struct file and struct inode. | ||
* Locking must therefore be done in the probe to use the dentry. | ||
*/ | ||
static void probe_subsys_event(struct inode *inode, struct file *file) | ||
{ | ||
printk(KERN_INFO "Event is encountered with inode number %lu\n", | ||
inode->i_ino); | ||
} | ||
|
||
int __init tp_sample_trace_init(void) | ||
{ | ||
int ret; | ||
|
||
ret = register_trace_subsys_event(probe_subsys_event); | ||
WARN_ON(ret); | ||
|
||
return 0; | ||
} | ||
|
||
module_init(tp_sample_trace_init); | ||
|
||
void __exit tp_sample_trace_exit(void) | ||
{ | ||
unregister_trace_subsys_event(probe_subsys_event); | ||
} | ||
|
||
module_exit(tp_sample_trace_exit); | ||
|
||
MODULE_LICENSE("GPL"); | ||
MODULE_AUTHOR("Mathieu Desnoyers"); | ||
MODULE_DESCRIPTION("Tracepoint Probes Samples"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
/* tracepoint-sample.c | ||
* | ||
* Executes a tracepoint when /proc/tracepoint-example is opened. | ||
* | ||
* (C) Copyright 2007 Mathieu Desnoyers <[email protected]> | ||
* | ||
* This file is released under the GPLv2. | ||
* See the file COPYING for more details. | ||
*/ | ||
|
||
#include <linux/module.h> | ||
#include <linux/sched.h> | ||
#include <linux/proc_fs.h> | ||
#include "tp-samples-trace.h" | ||
|
||
struct proc_dir_entry *pentry_example; | ||
|
||
static int my_open(struct inode *inode, struct file *file) | ||
{ | ||
int i; | ||
|
||
trace_subsys_event(inode, file); | ||
for (i = 0; i < 10; i++) | ||
trace_subsys_eventb(); | ||
return -EPERM; | ||
} | ||
|
||
static struct file_operations mark_ops = { | ||
.open = my_open, | ||
}; | ||
|
||
static int example_init(void) | ||
{ | ||
printk(KERN_ALERT "example init\n"); | ||
pentry_example = proc_create("tracepoint-example", 0444, NULL, | ||
&mark_ops); | ||
if (!pentry_example) | ||
return -EPERM; | ||
return 0; | ||
} | ||
|
||
static void example_exit(void) | ||
{ | ||
printk(KERN_ALERT "example exit\n"); | ||
remove_proc_entry("tracepoint-example", NULL); | ||
} | ||
|
||
module_init(example_init) | ||
module_exit(example_exit) | ||
|
||
MODULE_LICENSE("GPL"); | ||
MODULE_AUTHOR("Mathieu Desnoyers"); | ||
MODULE_DESCRIPTION("Tracepoint example"); |