diff options
Diffstat (limited to 'litmus/litmus.c')
-rw-r--r-- | litmus/litmus.c | 20 |
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 |