| 1 | |
| 2 | |
| 3 | * event tracer
|
| 4 | *
|
| 5 | * Copyright (C) 2022 Google Inc, Steven Rostedt <[email protected]>
|
| 6 |
|
| 7 |
|
| 8 | #define pr_fmt(fmt) fmt
|
| 9 |
|
| 10 | #include <linux/trace_events.h>
|
| 11 | #include <linux/module.h>
|
| 12 | #include <linux/sched.h>
|
| 13 |
|
| 14 | |
| 15 | * Must include the event header that the custom event will attach to,
|
| 16 | * from the C file, and not in the custom header file.
|
| 17 |
|
| 18 | #include <trace/events/sched.h>
|
| 19 |
|
| 20 |
|
| 21 | #define CREATE_CUSTOM_TRACE_EVENTS
|
| 22 |
|
| 23 | #include "trace_custom_sched.h"
|
| 24 |
|
| 25 | |
| 26 | * As the trace events are not exported to modules, the use of
|
| 27 | * for_each_kernel_tracepoint() is needed to find the trace event
|
| 28 | * to attach to. The fct() function below, is a callback that
|
| 29 | * will be called for every event.
|
| 30 | *
|
| 31 | * Helper functions are created by the TRACE_CUSTOM_EVENT() macro
|
| 32 | * update the event. Those are of the form:
|
| 33 | *
|
| 34 | * trace_custom_event_<event>_update()
|
| 35 | *
|
| 36 | * Where <event> is the event to attach.
|
| 37 |
|
| 38 | static void fct(struct tracepoint *tp, void *priv)
|
| 39 | {
|
| 40 | trace_custom_event_sched_switch_update(tp);
|
| 41 | trace_custom_event_sched_waking_update(tp);
|
| 42 | }
|
| 43 |
|
| 44 | static int __init trace_sched_init(void)
|
| 45 | {
|
| 46 | for_each_kernel_tracepoint(fct, NULL);
|
| 47 | return 0;
|
| 48 | }
|
| 49 |
|
| 50 | static void __exit trace_sched_exit(void)
|
| 51 | {
|
| 52 | }
|
| 53 |
|
| 54 | module_init(trace_sched_init);
|
| 55 | module_exit(trace_sched_exit);
|
| 56 |
|
| 57 | MODULE_AUTHOR("Steven Rostedt");
|
| 58 | MODULE_DESCRIPTION("Custom scheduling events");
|
| 59 | MODULE_LICENSE("GPL");
|