diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/interrupt.h | 6 | ||||
-rw-r--r-- | include/litmus/gpu_affinity.h | 7 | ||||
-rw-r--r-- | include/litmus/nvidia_info.h | 1 | ||||
-rw-r--r-- | include/litmus/rt_param.h | 5 | ||||
-rw-r--r-- | include/litmus/sched_trace.h | 44 |
5 files changed, 52 insertions, 11 deletions
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 57a7bc8807be..8fb3dad55f19 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -528,7 +528,7 @@ static inline int tasklet_trylock(struct tasklet_struct *t) | |||
528 | 528 | ||
529 | static inline void tasklet_unlock(struct tasklet_struct *t) | 529 | static inline void tasklet_unlock(struct tasklet_struct *t) |
530 | { | 530 | { |
531 | smp_mb__before_clear_bit(); | 531 | smp_mb__before_clear_bit(); |
532 | clear_bit(TASKLET_STATE_RUN, &(t)->state); | 532 | clear_bit(TASKLET_STATE_RUN, &(t)->state); |
533 | } | 533 | } |
534 | 534 | ||
@@ -590,7 +590,7 @@ static inline void tasklet_disable(struct tasklet_struct *t) | |||
590 | } | 590 | } |
591 | 591 | ||
592 | static inline void tasklet_enable(struct tasklet_struct *t) | 592 | static inline void tasklet_enable(struct tasklet_struct *t) |
593 | { | 593 | { |
594 | smp_mb__before_atomic_dec(); | 594 | smp_mb__before_atomic_dec(); |
595 | atomic_dec(&t->count); | 595 | atomic_dec(&t->count); |
596 | } | 596 | } |
@@ -659,7 +659,7 @@ void tasklet_hrtimer_cancel(struct tasklet_hrtimer *ttimer) | |||
659 | * if more than one irq occurred. | 659 | * if more than one irq occurred. |
660 | */ | 660 | */ |
661 | 661 | ||
662 | #if defined(CONFIG_GENERIC_HARDIRQS) && !defined(CONFIG_GENERIC_IRQ_PROBE) | 662 | #if defined(CONFIG_GENERIC_HARDIRQS) && !defined(CONFIG_GENERIC_IRQ_PROBE) |
663 | static inline unsigned long probe_irq_on(void) | 663 | static inline unsigned long probe_irq_on(void) |
664 | { | 664 | { |
665 | return 0; | 665 | return 0; |
diff --git a/include/litmus/gpu_affinity.h b/include/litmus/gpu_affinity.h index d4db2003ad86..6b3fb8b28745 100644 --- a/include/litmus/gpu_affinity.h +++ b/include/litmus/gpu_affinity.h | |||
@@ -43,10 +43,7 @@ static inline lt_t get_gpu_estimate(struct task_struct* t, gpu_migration_dist_t | |||
43 | val = _fp_to_integer(t->rt_param.gpu_migration_est[i].est); | 43 | val = _fp_to_integer(t->rt_param.gpu_migration_est[i].est); |
44 | } | 44 | } |
45 | 45 | ||
46 | // minimum value is 1 (val is 0 if we haven't run with local affinity yet) | 46 | return ((val > 0) ? val : dist+1); |
47 | // TODO: pick a better default min-value. 1 is too small. perhaps | ||
48 | // task execution time? | ||
49 | return ((val > 0) ? val : 1); | ||
50 | } | 47 | } |
51 | 48 | ||
52 | #endif \ No newline at end of file | 49 | #endif |
diff --git a/include/litmus/nvidia_info.h b/include/litmus/nvidia_info.h index 580728051d4e..97c9577141db 100644 --- a/include/litmus/nvidia_info.h +++ b/include/litmus/nvidia_info.h | |||
@@ -12,6 +12,7 @@ | |||
12 | #define NV_MAX_SIMULT_USERS CONFIG_NV_MAX_SIMULT_USERS | 12 | #define NV_MAX_SIMULT_USERS CONFIG_NV_MAX_SIMULT_USERS |
13 | 13 | ||
14 | int init_nvidia_info(void); | 14 | int init_nvidia_info(void); |
15 | void shutdown_nvidia_info(void); | ||
15 | 16 | ||
16 | int is_nvidia_func(void* func_addr); | 17 | int is_nvidia_func(void* func_addr); |
17 | 18 | ||
diff --git a/include/litmus/rt_param.h b/include/litmus/rt_param.h index 4553521146cc..0198884eab86 100644 --- a/include/litmus/rt_param.h +++ b/include/litmus/rt_param.h | |||
@@ -26,6 +26,7 @@ static inline int lt_after_eq(lt_t a, lt_t b) | |||
26 | typedef enum { | 26 | typedef enum { |
27 | RT_CLASS_HARD, | 27 | RT_CLASS_HARD, |
28 | RT_CLASS_SOFT, | 28 | RT_CLASS_SOFT, |
29 | RT_CLASS_SOFT_W_SLIP, | ||
29 | RT_CLASS_BEST_EFFORT | 30 | RT_CLASS_BEST_EFFORT |
30 | } task_class_t; | 31 | } task_class_t; |
31 | 32 | ||
@@ -189,8 +190,8 @@ struct rt_param { | |||
189 | long unsigned int held_gpus; // bitmap of held GPUs. | 190 | long unsigned int held_gpus; // bitmap of held GPUs. |
190 | 191 | ||
191 | #ifdef CONFIG_LITMUS_AFFINITY_LOCKING | 192 | #ifdef CONFIG_LITMUS_AFFINITY_LOCKING |
192 | fp_t gpu_fb_param_a; | 193 | fp_t gpu_fb_param_a[MIG_LAST+1]; |
193 | fp_t gpu_fb_param_b; | 194 | fp_t gpu_fb_param_b[MIG_LAST+1]; |
194 | 195 | ||
195 | gpu_migration_dist_t gpu_migration; | 196 | gpu_migration_dist_t gpu_migration; |
196 | int last_gpu; | 197 | int last_gpu; |
diff --git a/include/litmus/sched_trace.h b/include/litmus/sched_trace.h index 232c7588d103..b1b71f6c5f0c 100644 --- a/include/litmus/sched_trace.h +++ b/include/litmus/sched_trace.h | |||
@@ -10,7 +10,8 @@ struct st_trace_header { | |||
10 | u8 type; /* Of what type is this record? */ | 10 | u8 type; /* Of what type is this record? */ |
11 | u8 cpu; /* On which CPU was it recorded? */ | 11 | u8 cpu; /* On which CPU was it recorded? */ |
12 | u16 pid; /* PID of the task. */ | 12 | u16 pid; /* PID of the task. */ |
13 | u32 job; /* The job sequence number. */ | 13 | u32 job:24; /* The job sequence number. */ |
14 | u8 extra; | ||
14 | } __attribute__((packed)); | 15 | } __attribute__((packed)); |
15 | 16 | ||
16 | #define ST_NAME_LEN 16 | 17 | #define ST_NAME_LEN 16 |
@@ -136,6 +137,22 @@ struct st_nv_interrupt_end_data { | |||
136 | u32 serialNumber; | 137 | u32 serialNumber; |
137 | } __attribute__((packed)); | 138 | } __attribute__((packed)); |
138 | 139 | ||
140 | struct st_prediction_err_data { | ||
141 | u64 distance; | ||
142 | u64 rel_err; | ||
143 | } __attribute__((packed)); | ||
144 | |||
145 | struct st_migration_data { | ||
146 | u64 observed; | ||
147 | u64 estimated; | ||
148 | } __attribute__((packed)); | ||
149 | |||
150 | struct migration_info { | ||
151 | u64 observed; | ||
152 | u64 estimated; | ||
153 | u8 distance; | ||
154 | } __attribute__((packed)); | ||
155 | |||
139 | #define DATA(x) struct st_ ## x ## _data x; | 156 | #define DATA(x) struct st_ ## x ## _data x; |
140 | 157 | ||
141 | typedef enum { | 158 | typedef enum { |
@@ -160,6 +177,9 @@ typedef enum { | |||
160 | ST_EFF_PRIO_CHANGE, | 177 | ST_EFF_PRIO_CHANGE, |
161 | ST_NV_INTERRUPT_BEGIN, | 178 | ST_NV_INTERRUPT_BEGIN, |
162 | ST_NV_INTERRUPT_END, | 179 | ST_NV_INTERRUPT_END, |
180 | |||
181 | ST_PREDICTION_ERR, | ||
182 | ST_MIGRATION, | ||
163 | } st_event_record_type_t; | 183 | } st_event_record_type_t; |
164 | 184 | ||
165 | struct st_event_record { | 185 | struct st_event_record { |
@@ -187,6 +207,9 @@ struct st_event_record { | |||
187 | DATA(effective_priority_change); | 207 | DATA(effective_priority_change); |
188 | DATA(nv_interrupt_begin); | 208 | DATA(nv_interrupt_begin); |
189 | DATA(nv_interrupt_end); | 209 | DATA(nv_interrupt_end); |
210 | |||
211 | DATA(prediction_err); | ||
212 | DATA(migration); | ||
190 | } data; | 213 | } data; |
191 | } __attribute__((packed)); | 214 | } __attribute__((packed)); |
192 | 215 | ||
@@ -259,6 +282,19 @@ feather_callback void do_sched_trace_nv_interrupt_begin(unsigned long id, | |||
259 | feather_callback void do_sched_trace_nv_interrupt_end(unsigned long id, | 282 | feather_callback void do_sched_trace_nv_interrupt_end(unsigned long id, |
260 | unsigned long unused); | 283 | unsigned long unused); |
261 | 284 | ||
285 | feather_callback void do_sched_trace_prediction_err(unsigned long id, | ||
286 | struct task_struct* task, | ||
287 | gpu_migration_dist_t* distance, | ||
288 | fp_t* rel_err); | ||
289 | |||
290 | |||
291 | |||
292 | |||
293 | |||
294 | feather_callback void do_sched_trace_migration(unsigned long id, | ||
295 | struct task_struct* task, | ||
296 | struct migration_info* mig_info); | ||
297 | |||
262 | 298 | ||
263 | /* returns true if we're tracing an interrupt on current CPU */ | 299 | /* returns true if we're tracing an interrupt on current CPU */ |
264 | /* int is_interrupt_tracing_active(void); */ | 300 | /* int is_interrupt_tracing_active(void); */ |
@@ -331,6 +367,12 @@ feather_callback void do_sched_trace_nv_interrupt_end(unsigned long id, | |||
331 | #define sched_trace_nv_interrupt_end(d) \ | 367 | #define sched_trace_nv_interrupt_end(d) \ |
332 | SCHED_TRACE(SCHED_TRACE_BASE_ID + 19, do_sched_trace_nv_interrupt_end, d) | 368 | SCHED_TRACE(SCHED_TRACE_BASE_ID + 19, do_sched_trace_nv_interrupt_end, d) |
333 | 369 | ||
370 | #define sched_trace_prediction_err(t, dist, rel_err) \ | ||
371 | SCHED_TRACE3(SCHED_TRACE_BASE_ID + 20, do_sched_trace_prediction_err, t, dist, rel_err) | ||
372 | |||
373 | #define sched_trace_migration(t, mig_info) \ | ||
374 | SCHED_TRACE2(SCHED_TRACE_BASE_ID + 21, do_sched_trace_migration, t, mig_info) | ||
375 | |||
334 | #define sched_trace_quantum_boundary() /* NOT IMPLEMENTED */ | 376 | #define sched_trace_quantum_boundary() /* NOT IMPLEMENTED */ |
335 | 377 | ||
336 | #endif /* __KERNEL__ */ | 378 | #endif /* __KERNEL__ */ |