diff options
Diffstat (limited to 'litmus/sched_gsn_edf.c')
-rw-r--r-- | litmus/sched_gsn_edf.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/litmus/sched_gsn_edf.c b/litmus/sched_gsn_edf.c index b40ff7ba4f0e..30c745fe33a7 100644 --- a/litmus/sched_gsn_edf.c +++ b/litmus/sched_gsn_edf.c | |||
@@ -37,6 +37,7 @@ | |||
37 | 37 | ||
38 | #ifdef CONFIG_LITMUS_PAI_SOFTIRQD | 38 | #ifdef CONFIG_LITMUS_PAI_SOFTIRQD |
39 | #include <linux/interrupt.h> | 39 | #include <linux/interrupt.h> |
40 | #include <litmus/trace.h> | ||
40 | #endif | 41 | #endif |
41 | 42 | ||
42 | #ifdef CONFIG_LITMUS_NVIDIA | 43 | #ifdef CONFIG_LITMUS_NVIDIA |
@@ -523,6 +524,9 @@ static void do_lit_tasklets(struct task_struct* sched_task) | |||
523 | unsigned long flags; | 524 | unsigned long flags; |
524 | 525 | ||
525 | while(work_to_do) { | 526 | while(work_to_do) { |
527 | |||
528 | TS_NV_SCHED_BOTISR_START; | ||
529 | |||
526 | // remove tasklet at head of list if it has higher priority. | 530 | // remove tasklet at head of list if it has higher priority. |
527 | raw_spin_lock_irqsave(&gsnedf_lock, flags); | 531 | raw_spin_lock_irqsave(&gsnedf_lock, flags); |
528 | 532 | ||
@@ -576,9 +580,10 @@ static void do_lit_tasklets(struct task_struct* sched_task) | |||
576 | TRACE("%s: done.\n", __FUNCTION__); | 580 | TRACE("%s: done.\n", __FUNCTION__); |
577 | */ | 581 | */ |
578 | 582 | ||
579 | |||
580 | raw_spin_unlock_irqrestore(&gsnedf_lock, flags); | 583 | raw_spin_unlock_irqrestore(&gsnedf_lock, flags); |
581 | 584 | ||
585 | TS_NV_SCHED_BOTISR_END; | ||
586 | |||
582 | if(tasklet) { | 587 | if(tasklet) { |
583 | __do_lit_tasklet(tasklet, 0ul); | 588 | __do_lit_tasklet(tasklet, 0ul); |
584 | tasklet = NULL; | 589 | tasklet = NULL; |
@@ -1069,6 +1074,10 @@ static void gsnedf_task_exit(struct task_struct * t) | |||
1069 | { | 1074 | { |
1070 | unsigned long flags; | 1075 | unsigned long flags; |
1071 | 1076 | ||
1077 | #ifdef CONFIG_LITMUS_PAI_SOFTIRQD | ||
1078 | flush_tasklets(t); | ||
1079 | #endif | ||
1080 | |||
1072 | /* unlink if necessary */ | 1081 | /* unlink if necessary */ |
1073 | raw_spin_lock_irqsave(&gsnedf_lock, flags); | 1082 | raw_spin_lock_irqsave(&gsnedf_lock, flags); |
1074 | unlink(t); | 1083 | unlink(t); |
@@ -1077,10 +1086,6 @@ static void gsnedf_task_exit(struct task_struct * t) | |||
1077 | tsk_rt(t)->scheduled_on = NO_CPU; | 1086 | tsk_rt(t)->scheduled_on = NO_CPU; |
1078 | } | 1087 | } |
1079 | raw_spin_unlock_irqrestore(&gsnedf_lock, flags); | 1088 | raw_spin_unlock_irqrestore(&gsnedf_lock, flags); |
1080 | |||
1081 | #ifdef CONFIG_LITMUS_PAI_SOFTIRQD | ||
1082 | flush_tasklets(t); | ||
1083 | #endif | ||
1084 | 1089 | ||
1085 | BUG_ON(!is_realtime(t)); | 1090 | BUG_ON(!is_realtime(t)); |
1086 | TRACE_TASK(t, "RIP\n"); | 1091 | TRACE_TASK(t, "RIP\n"); |