aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/sched_gsn_edf.c
diff options
context:
space:
mode:
Diffstat (limited to 'litmus/sched_gsn_edf.c')
-rw-r--r--litmus/sched_gsn_edf.c15
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");