aboutsummaryrefslogtreecommitdiffstats
path: root/litmus/litmus.c
diff options
context:
space:
mode:
Diffstat (limited to 'litmus/litmus.c')
-rw-r--r--litmus/litmus.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/litmus/litmus.c b/litmus/litmus.c
index f8397898ce0a..1bbad8db1a55 100644
--- a/litmus/litmus.c
+++ b/litmus/litmus.c
@@ -393,7 +393,10 @@ static void reinit_litmus_state(struct task_struct* p, int restore)
393 void * ctrl_page_orig = NULL; 393 void * ctrl_page_orig = NULL;
394#endif 394#endif
395 395
396 void* color_ctrl_page = NULL; 396 void *color_ctrl_page = NULL;
397#ifdef CONFIG_ARCH_NEEDS_UNCACHED_CONTROL_PAGE
398 void *color_ctrl_page_orig = NULL;
399#endif
397 400
398 if (restore) { 401 if (restore) {
399 /* Safe user-space provided configuration data. 402 /* Safe user-space provided configuration data.
@@ -403,6 +406,7 @@ static void reinit_litmus_state(struct task_struct* p, int restore)
403 color_ctrl_page = p->rt_param.color_ctrl_page; 406 color_ctrl_page = p->rt_param.color_ctrl_page;
404#ifdef CONFIG_ARCH_NEEDS_UNCACHED_CONTROL_PAGE 407#ifdef CONFIG_ARCH_NEEDS_UNCACHED_CONTROL_PAGE
405 ctrl_page_orig = p->rt_param.ctrl_page_orig; 408 ctrl_page_orig = p->rt_param.ctrl_page_orig;
409 color_ctrl_page_orig = p->rt_param.color_ctrl_page_orig;
406#endif 410#endif
407 } 411 }
408 412
@@ -421,6 +425,7 @@ static void reinit_litmus_state(struct task_struct* p, int restore)
421 p->rt_param.color_ctrl_page = color_ctrl_page; 425 p->rt_param.color_ctrl_page = color_ctrl_page;
422#ifdef CONFIG_ARCH_NEEDS_UNCACHED_CONTROL_PAGE 426#ifdef CONFIG_ARCH_NEEDS_UNCACHED_CONTROL_PAGE
423 p->rt_param.ctrl_page_orig = ctrl_page_orig; 427 p->rt_param.ctrl_page_orig = ctrl_page_orig;
428 p->rt_param.color_ctrl_page_orig = color_ctrl_page_orig;
424#endif 429#endif
425 } 430 }
426} 431}
@@ -573,6 +578,7 @@ void litmus_fork(struct task_struct* p)
573 tsk_rt(p)->color_ctrl_page = NULL; 578 tsk_rt(p)->color_ctrl_page = NULL;
574#ifdef CONFIG_ARCH_NEEDS_UNCACHED_CONTROL_PAGE 579#ifdef CONFIG_ARCH_NEEDS_UNCACHED_CONTROL_PAGE
575 tsk_rt(p)->ctrl_page_orig = NULL; 580 tsk_rt(p)->ctrl_page_orig = NULL;
581 tsk_rt(p)->color_ctrl_page_orig = NULL;
576#endif 582#endif
577 } 583 }
578 584
@@ -590,14 +596,12 @@ void litmus_exec(void)
590 596
591 if (is_realtime(p)) { 597 if (is_realtime(p)) {
592 WARN_ON(p->rt_param.inh_task); 598 WARN_ON(p->rt_param.inh_task);
593 if (tsk_rt(p)->color_ctrl_page) {
594 free_page((unsigned long) tsk_rt(p)->color_ctrl_page);
595 tsk_rt(p)->color_ctrl_page = NULL;
596 }
597 litmus_schedule_deallocation(p); 599 litmus_schedule_deallocation(p);
598 tsk_rt(p)->ctrl_page = NULL; 600 tsk_rt(p)->ctrl_page = NULL;
601 tsk_rt(p)->color_ctrl_page = NULL;
599#ifdef CONFIG_ARCH_NEEDS_UNCACHED_CONTROL_PAGE 602#ifdef CONFIG_ARCH_NEEDS_UNCACHED_CONTROL_PAGE
600 tsk_rt(p)->ctrl_page_orig = NULL; 603 tsk_rt(p)->ctrl_page_orig = NULL;
604 tsk_rt(p)->color_ctrl_page_orig = NULL;
601#endif 605#endif
602 } 606 }
603} 607}
@@ -611,12 +615,6 @@ void exit_litmus(struct task_struct *dead_tsk)
611 * So check if we need to free the page 615 * So check if we need to free the page
612 * in any case. 616 * in any case.
613 */ 617 */
614 if (tsk_rt(dead_tsk)->color_ctrl_page) {
615 TRACE_TASK(dead_tsk,
616 "freeing color_ctrl_page %p\n",
617 tsk_rt(dead_tsk)->color_ctrl_page);
618 free_page((unsigned long) tsk_rt(dead_tsk)->color_ctrl_page);
619 }
620 618
621#ifdef CONFIG_PLUGIN_MC 619#ifdef CONFIG_PLUGIN_MC
622 /* The MC-setup syscall might succeed and allocate mc_data, but the 620 /* The MC-setup syscall might succeed and allocate mc_data, but the