Add ADDRENV support to ALL implementations of up_unblock_task()

This commit is contained in:
Gregory Nutt
2014-08-27 16:15:46 -06:00
parent 0b919b6381
commit 4d24c48901
9 changed files with 200 additions and 22 deletions
+12
View File
@@ -288,6 +288,7 @@ void up_block_task(struct tcb_s *tcb, tstate_t task_state)
warn("Disable preemption failed for task block itself\n");
sched_mergepending();
}
nexttcb = (struct tcb_s*)g_readytorun.head;
#ifdef CONFIG_ARCH_ADDRENV
@@ -344,8 +345,19 @@ void up_unblock_task(struct tcb_s *tcb)
// g_readytorun task list.
if (sched_addreadytorun(tcb) && !up_interrupt_context()) {
/* The currently active task has changed! */
struct tcb_s *nexttcb = (struct tcb_s*)g_readytorun.head;
#ifdef CONFIG_ARCH_ADDRENV
// Make sure that the address environment for the previously
// running task is closed down gracefully (data caches dump,
// MMU flushed) and set up the address environment for the new
// thread at the head of the ready-to-run list.
(void)group_addrenv(nexttcb);
#endif
// context switch
up_switchcontext(rtcb, nexttcb);
}
}