diff options
Diffstat (limited to 'litmus/sched_crm_srt.c')
-rw-r--r-- | litmus/sched_crm_srt.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/litmus/sched_crm_srt.c b/litmus/sched_crm_srt.c index c0004354573d..f0064d486953 100644 --- a/litmus/sched_crm_srt.c +++ b/litmus/sched_crm_srt.c | |||
@@ -57,6 +57,7 @@ | |||
57 | 57 | ||
58 | #ifdef CONFIG_LITMUS_PAI_SOFTIRQD | 58 | #ifdef CONFIG_LITMUS_PAI_SOFTIRQD |
59 | #include <linux/interrupt.h> | 59 | #include <linux/interrupt.h> |
60 | #include <litmus/trace.h> | ||
60 | #endif | 61 | #endif |
61 | 62 | ||
62 | #ifdef CONFIG_LITMUS_NVIDIA | 63 | #ifdef CONFIG_LITMUS_NVIDIA |
@@ -529,6 +530,9 @@ static void do_lit_tasklets(crm_srt_domain_t* cluster, struct task_struct* sched | |||
529 | unsigned long flags; | 530 | unsigned long flags; |
530 | 531 | ||
531 | while(work_to_do) { | 532 | while(work_to_do) { |
533 | |||
534 | TS_NV_SCHED_BOTISR_START; | ||
535 | |||
532 | // remove tasklet at head of list if it has higher priority. | 536 | // remove tasklet at head of list if it has higher priority. |
533 | raw_spin_lock_irqsave(&cluster->crm_srt_lock, flags); | 537 | raw_spin_lock_irqsave(&cluster->crm_srt_lock, flags); |
534 | 538 | ||
@@ -582,6 +586,8 @@ static void do_lit_tasklets(crm_srt_domain_t* cluster, struct task_struct* sched | |||
582 | 586 | ||
583 | raw_spin_unlock_irqrestore(&cluster->crm_srt_lock, flags); | 587 | raw_spin_unlock_irqrestore(&cluster->crm_srt_lock, flags); |
584 | 588 | ||
589 | TS_NV_SCHED_BOTISR_END; | ||
590 | |||
585 | if(tasklet) { | 591 | if(tasklet) { |
586 | __do_lit_tasklet(tasklet, 0ul); | 592 | __do_lit_tasklet(tasklet, 0ul); |
587 | tasklet = NULL; | 593 | tasklet = NULL; |
@@ -1067,6 +1073,10 @@ static void crm_srt_task_exit(struct task_struct * t) | |||
1067 | unsigned long flags; | 1073 | unsigned long flags; |
1068 | crm_srt_domain_t *cluster = task_cpu_cluster(t); | 1074 | crm_srt_domain_t *cluster = task_cpu_cluster(t); |
1069 | 1075 | ||
1076 | #ifdef CONFIG_LITMUS_PAI_SOFTIRQD | ||
1077 | flush_tasklets(cluster, t); | ||
1078 | #endif | ||
1079 | |||
1070 | /* unlink if necessary */ | 1080 | /* unlink if necessary */ |
1071 | raw_spin_lock_irqsave(&cluster->crm_srt_lock, flags); | 1081 | raw_spin_lock_irqsave(&cluster->crm_srt_lock, flags); |
1072 | unlink(t); | 1082 | unlink(t); |
@@ -1077,10 +1087,6 @@ static void crm_srt_task_exit(struct task_struct * t) | |||
1077 | tsk_rt(t)->scheduled_on = NO_CPU; | 1087 | tsk_rt(t)->scheduled_on = NO_CPU; |
1078 | } | 1088 | } |
1079 | raw_spin_unlock_irqrestore(&cluster->crm_srt_lock, flags); | 1089 | raw_spin_unlock_irqrestore(&cluster->crm_srt_lock, flags); |
1080 | |||
1081 | #ifdef CONFIG_LITMUS_PAI_SOFTIRQD | ||
1082 | flush_tasklets(cluster, t); | ||
1083 | #endif | ||
1084 | 1090 | ||
1085 | BUG_ON(!is_realtime(t)); | 1091 | BUG_ON(!is_realtime(t)); |
1086 | TRACE_TASK(t, "RIP\n"); | 1092 | TRACE_TASK(t, "RIP\n"); |