Merge pull request #2108 from LudwigOrtmann/thread_new_irq_api

Thread new IRQ api
This commit is contained in:
Oleg Hahm 2014-12-04 16:53:58 +01:00
commit bca78dedd5

View File

@ -60,9 +60,9 @@ void thread_sleep(void)
return; return;
} }
dINT(); unsigned state = disableIRQ();
sched_set_status((tcb_t *)sched_active_thread, STATUS_SLEEPING); sched_set_status((tcb_t *)sched_active_thread, STATUS_SLEEPING);
eINT(); restoreIRQ(state);
thread_yield_higher(); thread_yield_higher();
} }
@ -165,9 +165,7 @@ kernel_pid_t thread_create(char *stack, int stacksize, char priority, int flags,
} }
#endif #endif
if (!inISR()) { unsigned state = disableIRQ();
dINT();
}
kernel_pid_t pid = KERNEL_PID_UNDEF; kernel_pid_t pid = KERNEL_PID_UNDEF;
for (kernel_pid_t i = KERNEL_PID_FIRST; i <= KERNEL_PID_LAST; ++i) { for (kernel_pid_t i = KERNEL_PID_FIRST; i <= KERNEL_PID_LAST; ++i) {
@ -179,9 +177,7 @@ kernel_pid_t thread_create(char *stack, int stacksize, char priority, int flags,
if (pid == KERNEL_PID_UNDEF) { if (pid == KERNEL_PID_UNDEF) {
DEBUG("thread_create(): too many threads!\n"); DEBUG("thread_create(): too many threads!\n");
if (!inISR()) { restoreIRQ(state);
eINT();
}
return -EOVERFLOW; return -EOVERFLOW;
} }
@ -221,19 +217,13 @@ kernel_pid_t thread_create(char *stack, int stacksize, char priority, int flags,
sched_set_status(cb, STATUS_PENDING); sched_set_status(cb, STATUS_PENDING);
if (!(flags & CREATE_WOUT_YIELD)) { if (!(flags & CREATE_WOUT_YIELD)) {
if (!inISR()) { restoreIRQ(state);
eINT();
sched_switch(priority); sched_switch(priority);
} return pid;
else {
sched_context_switch_request = 1;
}
} }
} }
if (!inISR() && sched_active_thread != NULL) { restoreIRQ(state);
eINT();
}
return pid; return pid;
} }