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