diff options
Diffstat (limited to 'include/sched_trace.h')
-rw-r--r-- | include/sched_trace.h | 112 |
1 files changed, 2 insertions, 110 deletions
diff --git a/include/sched_trace.h b/include/sched_trace.h index 5d2ddb3..0e08c69 100644 --- a/include/sched_trace.h +++ b/include/sched_trace.h | |||
@@ -6,116 +6,8 @@ | |||
6 | typedef __u8 u8; | 6 | typedef __u8 u8; |
7 | typedef __u32 u32; | 7 | typedef __u32 u32; |
8 | typedef __u16 u16; | 8 | typedef __u16 u16; |
9 | typedef __u64 u64; | ||
9 | 10 | ||
10 | typedef enum { | 11 | #include <litmus/sched_trace.h> |
11 | ST_INVOCATION = 0, | ||
12 | ST_ARRIVAL = 1, | ||
13 | ST_DEPARTURE = 2, | ||
14 | ST_PREEMPTION = 3, | ||
15 | ST_SCHEDULED = 4, | ||
16 | ST_JOB_RELEASE = 5, | ||
17 | ST_JOB_COMPLETION = 6, | ||
18 | ST_CAPACITY_RELEASE = 7, | ||
19 | ST_CAPACITY_ALLOCATION = 8, | ||
20 | 12 | ||
21 | ST_MAX | ||
22 | } trace_type_t; | ||
23 | |||
24 | |||
25 | typedef struct { | ||
26 | trace_type_t trace:8; | ||
27 | unsigned int size:24; | ||
28 | unsigned long long timestamp; | ||
29 | } trace_header_t; | ||
30 | |||
31 | typedef struct { | ||
32 | unsigned int is_rt:1; | ||
33 | unsigned int is_server:1; | ||
34 | task_class_t class:4; | ||
35 | unsigned int budget:24; | ||
36 | u32 deadline; | ||
37 | |||
38 | pid_t pid; | ||
39 | } task_info_t; | ||
40 | |||
41 | typedef struct { | ||
42 | trace_header_t header; | ||
43 | unsigned long flags; | ||
44 | } invocation_record_t; | ||
45 | |||
46 | typedef struct { | ||
47 | trace_header_t header; | ||
48 | task_info_t task; | ||
49 | } arrival_record_t; | ||
50 | |||
51 | typedef struct { | ||
52 | trace_header_t header; | ||
53 | task_info_t task; | ||
54 | } departure_record_t; | ||
55 | |||
56 | typedef struct { | ||
57 | trace_header_t header; | ||
58 | task_info_t task; | ||
59 | task_info_t by; | ||
60 | } preemption_record_t; | ||
61 | |||
62 | typedef struct { | ||
63 | trace_header_t header; | ||
64 | task_info_t task; | ||
65 | } scheduled_record_t; | ||
66 | |||
67 | typedef struct { | ||
68 | trace_header_t header; | ||
69 | task_info_t task; | ||
70 | u16 period; | ||
71 | u16 wcet; | ||
72 | } release_record_t; | ||
73 | |||
74 | typedef struct { | ||
75 | trace_header_t header; | ||
76 | task_info_t task; | ||
77 | u16 period; | ||
78 | u16 wcet; | ||
79 | int tardiness; | ||
80 | unsigned int job_no; | ||
81 | } completion_record_t; | ||
82 | |||
83 | typedef struct { | ||
84 | trace_header_t header; | ||
85 | task_info_t task; | ||
86 | } cap_release_record_t; | ||
87 | |||
88 | typedef struct { | ||
89 | trace_header_t header; | ||
90 | task_info_t task; | ||
91 | u16 budget; | ||
92 | u32 deadline; | ||
93 | pid_t donor; | ||
94 | } cap_allocation_record_t; | ||
95 | |||
96 | |||
97 | |||
98 | |||
99 | |||
100 | enum { | ||
101 | INVALID_HEADER = 1 | ||
102 | }; | ||
103 | |||
104 | typedef int (*record_callback_fn)(trace_header_t* hdr); | ||
105 | |||
106 | typedef struct { | ||
107 | record_callback_fn handler[ST_MAX]; | ||
108 | } record_callback_t; | ||
109 | |||
110 | #define init_record_callback(a) memset(a, 0, sizeof(record_callback_t)) | ||
111 | #define set_callback(type, fn, a) do {(a)->handler[type] = fn; } while (0); | ||
112 | |||
113 | int walk_sched_trace(void* start, void* end, record_callback_t *cb); | ||
114 | int walk_sched_traces_ordered(void** start, void** end, unsigned int count, | ||
115 | record_callback_t *cb); | ||
116 | |||
117 | int walk_sched_trace_file(const char* name, int keep_mapped, | ||
118 | record_callback_t *cb); | ||
119 | int walk_sched_trace_files_ordered(const char** names, unsigned int count, | ||
120 | int keep_mapped, record_callback_t *cb); | ||
121 | #endif | 13 | #endif |