diff options
author | Bjoern Brandenburg <bbb@mpi-sws.org> | 2012-09-03 07:58:18 -0400 |
---|---|---|
committer | Bjoern Brandenburg <bbb@mpi-sws.org> | 2012-10-18 16:14:03 -0400 |
commit | 173e46b1ea0305ab74ab8e6a4b4461e296b83922 (patch) | |
tree | 6245c6f340a896d20196ee92ec826572ca0ce285 /include | |
parent | 80e2d84533265a8231534f10c56d9eba01cec99a (diff) |
Export IRQ count to control page
Also add some compile-time checks to detect unexpected offsets.
Diffstat (limited to 'include')
-rw-r--r-- | include/litmus/rt_param.h | 22 | ||||
-rw-r--r-- | include/litmus/trace_irq.h | 12 |
2 files changed, 18 insertions, 16 deletions
diff --git a/include/litmus/rt_param.h b/include/litmus/rt_param.h index 6456ed04fddb..8d9aa07cf324 100644 --- a/include/litmus/rt_param.h +++ b/include/litmus/rt_param.h | |||
@@ -65,12 +65,12 @@ struct rt_task { | |||
65 | }; | 65 | }; |
66 | 66 | ||
67 | union np_flag { | 67 | union np_flag { |
68 | uint32_t raw; | 68 | uint64_t raw; |
69 | struct { | 69 | struct { |
70 | /* Is the task currently in a non-preemptive section? */ | 70 | /* Is the task currently in a non-preemptive section? */ |
71 | uint32_t flag:31; | 71 | uint64_t flag:31; |
72 | /* Should the task call into the scheduler? */ | 72 | /* Should the task call into the scheduler? */ |
73 | uint32_t preempt:1; | 73 | uint64_t preempt:1; |
74 | } np; | 74 | } np; |
75 | }; | 75 | }; |
76 | 76 | ||
@@ -93,13 +93,25 @@ struct control_page { | |||
93 | * sections. */ | 93 | * sections. */ |
94 | volatile union np_flag sched; | 94 | volatile union np_flag sched; |
95 | 95 | ||
96 | volatile uint64_t irq_count; /* Incremented by the kernel each time an IRQ is | ||
97 | * handled. */ | ||
98 | |||
96 | /* Locking overhead tracing: userspace records here the time stamp | 99 | /* Locking overhead tracing: userspace records here the time stamp |
97 | * prior to starting the system call. */ | 100 | * and IRQ counter prior to starting the system call. */ |
98 | uint64_t ts_syscall_start; /* Feather-Trace cycles */ | 101 | uint64_t ts_syscall_start; /* Feather-Trace cycles */ |
102 | uint64_t irq_syscall_start; /* Snapshot of irq_count when the syscall | ||
103 | * started. */ | ||
99 | 104 | ||
100 | /* to be extended */ | 105 | /* to be extended */ |
101 | }; | 106 | }; |
102 | 107 | ||
108 | /* Expected offsets within the control page. */ | ||
109 | |||
110 | #define LITMUS_CP_OFFSET_SCHED 0 | ||
111 | #define LITMUS_CP_OFFSET_IRQ_COUNT 8 | ||
112 | #define LITMUS_CP_OFFSET_TS_SC_START 16 | ||
113 | #define LITMUS_CP_OFFSET_IRQ_SC_START 24 | ||
114 | |||
103 | /* don't export internal data structures to user space (liblitmus) */ | 115 | /* don't export internal data structures to user space (liblitmus) */ |
104 | #ifdef __KERNEL__ | 116 | #ifdef __KERNEL__ |
105 | 117 | ||
diff --git a/include/litmus/trace_irq.h b/include/litmus/trace_irq.h index 01e4b98fc3e0..0d0c042ba9c3 100644 --- a/include/litmus/trace_irq.h +++ b/include/litmus/trace_irq.h | |||
@@ -3,17 +3,7 @@ | |||
3 | 3 | ||
4 | #ifdef CONFIG_SCHED_OVERHEAD_TRACE | 4 | #ifdef CONFIG_SCHED_OVERHEAD_TRACE |
5 | 5 | ||
6 | #include <asm/atomic.h> | 6 | void ft_irq_fired(void); |
7 | #include <linux/percpu.h> | ||
8 | |||
9 | extern DEFINE_PER_CPU(atomic_t, irq_fired_count); | ||
10 | |||
11 | static inline void ft_irq_fired(void) | ||
12 | { | ||
13 | /* Only called with preemptions disabled. */ | ||
14 | atomic_inc(&__get_cpu_var(irq_fired_count)); | ||
15 | } | ||
16 | |||
17 | 7 | ||
18 | #else | 8 | #else |
19 | 9 | ||