1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

core: Access internal vars via helper funcs

Replace accesses to `sched_active_thread`, `sched_active_pid`, and
`sched_threads` with `thread_get_active()`, `thread_get_active_pid()`, and
`thread_get_unchecked()` where sensible.
This commit is contained in:
Marian Buschsieweke 2020-08-06 10:46:17 +02:00
parent 4a31578982
commit 57264c5059
No known key found for this signature in database
GPG Key ID: 61F64C6599B1539F
10 changed files with 81 additions and 86 deletions

View File

@ -35,7 +35,7 @@ void cond_init(cond_t *cond)
void cond_wait(cond_t *cond, mutex_t *mutex) void cond_wait(cond_t *cond, mutex_t *mutex)
{ {
unsigned irqstate = irq_disable(); unsigned irqstate = irq_disable();
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
mutex_unlock(mutex); mutex_unlock(mutex);
sched_set_status(me, STATUS_COND_BLOCKED); sched_set_status(me, STATUS_COND_BLOCKED);

View File

@ -46,8 +46,8 @@ extern "C" {
#include "cpu_conf.h" #include "cpu_conf.h"
#define DEBUG_PRINT(...) \ #define DEBUG_PRINT(...) \
do { \ do { \
if ((sched_active_thread == NULL) || \ if ((thread_get_active() == NULL) || \
(sched_active_thread->stack_size >= \ (thread_get_active()->stack_size >= \
THREAD_EXTRA_STACKSIZE_PRINTF)) { \ THREAD_EXTRA_STACKSIZE_PRINTF)) { \
printf(__VA_ARGS__); \ printf(__VA_ARGS__); \
} \ } \

View File

@ -132,11 +132,11 @@ thread_flags_t thread_flags_clear(thread_flags_t mask);
* immediately, otherwise, it will suspend the thread (as * immediately, otherwise, it will suspend the thread (as
* THREAD_STATUS_WAIT_ANY) until any of the flags in mask get set. * THREAD_STATUS_WAIT_ANY) until any of the flags in mask get set.
* *
* Both ways, it will clear and return (sched_active_thread-flags & mask). * Both ways, it will clear and return (`thread_get_active()->flags & mask`).
* *
* @param[in] mask mask of flags to wait for * @param[in] mask mask of flags to wait for
* *
* @returns flags that caused return/wakeup ((sched_active_thread-flags & mask). * @returns flags that caused return/wakeup (`thread_get_active()->flags & mask`).
*/ */
thread_flags_t thread_flags_wait_any(thread_flags_t mask); thread_flags_t thread_flags_wait_any(thread_flags_t mask);
@ -147,7 +147,7 @@ thread_flags_t thread_flags_wait_any(thread_flags_t mask);
* immediately, otherwise, it will suspend the thread (as * immediately, otherwise, it will suspend the thread (as
* THREAD_STATUS_WAIT_ALL) until all of the flags in mask have been set. * THREAD_STATUS_WAIT_ALL) until all of the flags in mask have been set.
* *
* Both ways, it will clear and return (sched_active_thread-flags & mask). * Both ways, it will clear and return (`thread_get_active()->flags & mask`).
* *
* @param[in] mask mask of flags to wait for * @param[in] mask mask of flags to wait for
* *

View File

@ -33,7 +33,7 @@ static void _wake_waiter(thread_t *thread, unsigned irqstate)
sched_set_status(thread, STATUS_PENDING); sched_set_status(thread, STATUS_PENDING);
DEBUG("mbox: Thread %" PRIkernel_pid ": _wake_waiter(): waking up " DEBUG("mbox: Thread %" PRIkernel_pid ": _wake_waiter(): waking up "
"%" PRIkernel_pid ".\n", sched_active_pid, thread->pid); "%" PRIkernel_pid ".\n", thread_getpid(), thread->pid);
uint16_t process_priority = thread->priority; uint16_t process_priority = thread->priority;
irq_restore(irqstate); irq_restore(irqstate);
@ -43,16 +43,16 @@ static void _wake_waiter(thread_t *thread, unsigned irqstate)
static void _wait(list_node_t *wait_list, unsigned irqstate) static void _wait(list_node_t *wait_list, unsigned irqstate)
{ {
DEBUG("mbox: Thread %" PRIkernel_pid " _wait(): going blocked.\n", DEBUG("mbox: Thread %" PRIkernel_pid " _wait(): going blocked.\n",
sched_active_pid); thread_getpid());
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
sched_set_status(me, STATUS_MBOX_BLOCKED); sched_set_status(me, STATUS_MBOX_BLOCKED);
thread_add_to_list(wait_list, me); thread_add_to_list(wait_list, me);
irq_restore(irqstate); irq_restore(irqstate);
thread_yield(); thread_yield();
DEBUG("mbox: Thread %" PRIkernel_pid " _wait(): woke up.\n", DEBUG("mbox: Thread %" PRIkernel_pid " _wait(): woke up.\n",
sched_active_pid); thread_getpid());
} }
int _mbox_put(mbox_t *mbox, msg_t *msg, int blocking) int _mbox_put(mbox_t *mbox, msg_t *msg, int blocking)
@ -63,7 +63,7 @@ int _mbox_put(mbox_t *mbox, msg_t *msg, int blocking)
if (next) { if (next) {
DEBUG("mbox: Thread %" PRIkernel_pid " mbox 0x%08x: _tryput(): " DEBUG("mbox: Thread %" PRIkernel_pid " mbox 0x%08x: _tryput(): "
"there's a waiter.\n", sched_active_pid, (unsigned)mbox); "there's a waiter.\n", thread_getpid(), (unsigned)mbox);
thread_t *thread = thread_t *thread =
container_of((clist_node_t *)next, thread_t, rq_entry); container_of((clist_node_t *)next, thread_t, rq_entry);
*(msg_t *)thread->wait_data = *msg; *(msg_t *)thread->wait_data = *msg;
@ -83,8 +83,8 @@ int _mbox_put(mbox_t *mbox, msg_t *msg, int blocking)
} }
DEBUG("mbox: Thread %" PRIkernel_pid " mbox 0x%08x: _tryput(): " DEBUG("mbox: Thread %" PRIkernel_pid " mbox 0x%08x: _tryput(): "
"queued message.\n", sched_active_pid, (unsigned)mbox); "queued message.\n", thread_getpid(), (unsigned)mbox);
msg->sender_pid = sched_active_pid; msg->sender_pid = thread_getpid();
/* copy msg into queue */ /* copy msg into queue */
mbox->msg_array[cib_put_unsafe(&mbox->cib)] = *msg; mbox->msg_array[cib_put_unsafe(&mbox->cib)] = *msg;
irq_restore(irqstate); irq_restore(irqstate);
@ -98,7 +98,7 @@ int _mbox_get(mbox_t *mbox, msg_t *msg, int blocking)
if (cib_avail(&mbox->cib)) { if (cib_avail(&mbox->cib)) {
DEBUG("mbox: Thread %" PRIkernel_pid " mbox 0x%08x: _tryget(): " DEBUG("mbox: Thread %" PRIkernel_pid " mbox 0x%08x: _tryget(): "
"got queued message.\n", sched_active_pid, (unsigned)mbox); "got queued message.\n", thread_getpid(), (unsigned)mbox);
/* copy msg from queue */ /* copy msg from queue */
*msg = mbox->msg_array[cib_get_unsafe(&mbox->cib)]; *msg = mbox->msg_array[cib_get_unsafe(&mbox->cib)];
list_node_t *next = list_remove_head(&mbox->writers); list_node_t *next = list_remove_head(&mbox->writers);
@ -113,7 +113,7 @@ int _mbox_get(mbox_t *mbox, msg_t *msg, int blocking)
return 1; return 1;
} }
else if (blocking) { else if (blocking) {
sched_active_thread->wait_data = (void *)msg; thread_get_active()->wait_data = msg;
_wait(&mbox->readers, irqstate); _wait(&mbox->readers, irqstate);
/* sender has copied message */ /* sender has copied message */
return 1; return 1;

View File

@ -65,7 +65,7 @@ int msg_send(msg_t *m, kernel_pid_t target_pid)
if (irq_is_in()) { if (irq_is_in()) {
return msg_send_int(m, target_pid); return msg_send_int(m, target_pid);
} }
if (sched_active_pid == target_pid) { if (thread_getpid() == target_pid) {
return msg_send_to_self(m); return msg_send_to_self(m);
} }
return _msg_send(m, target_pid, true, irq_disable()); return _msg_send(m, target_pid, true, irq_disable());
@ -76,7 +76,7 @@ int msg_try_send(msg_t *m, kernel_pid_t target_pid)
if (irq_is_in()) { if (irq_is_in()) {
return msg_send_int(m, target_pid); return msg_send_int(m, target_pid);
} }
if (sched_active_pid == target_pid) { if (thread_getpid() == target_pid) {
return msg_send_to_self(m); return msg_send_to_self(m);
} }
return _msg_send(m, target_pid, false, irq_disable()); return _msg_send(m, target_pid, false, irq_disable());
@ -91,9 +91,9 @@ static int _msg_send(msg_t *m, kernel_pid_t target_pid, bool block,
} }
#endif /* DEVELHELP */ #endif /* DEVELHELP */
thread_t *target = (thread_t *)sched_threads[target_pid]; thread_t *target = thread_get_unchecked(target_pid);
m->sender_pid = sched_active_pid; m->sender_pid = thread_getpid();
if (target == NULL) { if (target == NULL) {
DEBUG("msg_send(): target thread %d does not exist\n", target_pid); DEBUG("msg_send(): target thread %d does not exist\n", target_pid);
@ -101,11 +101,11 @@ static int _msg_send(msg_t *m, kernel_pid_t target_pid, bool block,
return -1; return -1;
} }
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
DEBUG("msg_send() %s:%i: Sending from %" PRIkernel_pid " to %" PRIkernel_pid DEBUG("msg_send() %s:%i: Sending from %" PRIkernel_pid " to %" PRIkernel_pid
". block=%i src->state=%i target->state=%i\n", RIOT_FILE_RELATIVE, ". block=%i src->state=%i target->state=%i\n", RIOT_FILE_RELATIVE,
__LINE__, sched_active_pid, target_pid, __LINE__, thread_getpid(), target_pid,
block, me->status, target->status); block, me->status, target->status);
if (target->status != STATUS_RECEIVE_BLOCKED) { if (target->status != STATUS_RECEIVE_BLOCKED) {
@ -125,9 +125,8 @@ static int _msg_send(msg_t *m, kernel_pid_t target_pid, bool block,
} }
if (!block) { if (!block) {
DEBUG( DEBUG("msg_send: %" PRIkernel_pid ": Receiver not waiting, "
"msg_send: %" PRIkernel_pid ": Receiver not waiting, block=%u\n", "block=%u\n", me->pid, block);
me->pid, block);
irq_restore(state); irq_restore(state);
return 0; return 0;
} }
@ -135,7 +134,7 @@ static int _msg_send(msg_t *m, kernel_pid_t target_pid, bool block,
DEBUG("msg_send: %" PRIkernel_pid ": going send blocked.\n", DEBUG("msg_send: %" PRIkernel_pid ": going send blocked.\n",
me->pid); me->pid);
me->wait_data = (void *)m; me->wait_data = m;
int newstatus; int newstatus;
@ -146,7 +145,7 @@ static int _msg_send(msg_t *m, kernel_pid_t target_pid, bool block,
newstatus = STATUS_SEND_BLOCKED; newstatus = STATUS_SEND_BLOCKED;
} }
sched_set_status((thread_t *)me, newstatus); sched_set_status(me, newstatus);
thread_add_to_list(&(target->msg_waiters), me); thread_add_to_list(&(target->msg_waiters), me);
@ -166,7 +165,7 @@ static int _msg_send(msg_t *m, kernel_pid_t target_pid, bool block,
PRIkernel_pid " to %" PRIkernel_pid ".\n", PRIkernel_pid " to %" PRIkernel_pid ".\n",
me->pid, thread_getpid(), target_pid); me->pid, thread_getpid(), target_pid);
/* copy msg to target */ /* copy msg to target */
msg_t *target_message = (msg_t *)target->wait_data; msg_t *target_message = target->wait_data;
*target_message = *m; *target_message = *m;
sched_set_status(target, STATUS_PENDING); sched_set_status(target, STATUS_PENDING);
@ -181,8 +180,8 @@ int msg_send_to_self(msg_t *m)
{ {
unsigned state = irq_disable(); unsigned state = irq_disable();
m->sender_pid = sched_active_pid; m->sender_pid = thread_getpid();
int res = queue_msg((thread_t *)sched_active_thread, m); int res = queue_msg(thread_get_active(), m);
irq_restore(state); irq_restore(state);
return res; return res;
@ -196,7 +195,7 @@ static int _msg_send_oneway(msg_t *m, kernel_pid_t target_pid)
} }
#endif /* DEVELHELP */ #endif /* DEVELHELP */
thread_t *target = (thread_t *)sched_threads[target_pid]; thread_t *target = thread_get_unchecked(target_pid);
if (target == NULL) { if (target == NULL) {
DEBUG("%s: target thread %d does not exist\n", __func__, target_pid); DEBUG("%s: target thread %d does not exist\n", __func__, target_pid);
@ -242,7 +241,7 @@ int msg_send_bus(msg_t *m, msg_bus_t *bus)
const uint32_t event_mask = (1UL << (m->type & 0x1F)); const uint32_t event_mask = (1UL << (m->type & 0x1F));
int count = 0; int count = 0;
m->sender_pid = in_irq ? KERNEL_PID_ISR : sched_active_pid; m->sender_pid = in_irq ? KERNEL_PID_ISR : thread_getpid();
unsigned state = irq_disable(); unsigned state = irq_disable();
@ -269,11 +268,11 @@ int msg_send_bus(msg_t *m, msg_bus_t *bus)
int msg_send_receive(msg_t *m, msg_t *reply, kernel_pid_t target_pid) int msg_send_receive(msg_t *m, msg_t *reply, kernel_pid_t target_pid)
{ {
assert(sched_active_pid != target_pid); assert(thread_getpid() != target_pid);
unsigned state = irq_disable(); unsigned state = irq_disable();
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
sched_set_status(me, STATUS_REPLY_BLOCKED); sched_set_status(me, STATUS_REPLY_BLOCKED);
me->wait_data = (void *)reply; me->wait_data = reply;
/* we re-use (abuse) reply for sending, because wait_data might be /* we re-use (abuse) reply for sending, because wait_data might be
* overwritten if the target is not in RECEIVE_BLOCKED */ * overwritten if the target is not in RECEIVE_BLOCKED */
@ -286,20 +285,20 @@ int msg_reply(msg_t *m, msg_t *reply)
{ {
unsigned state = irq_disable(); unsigned state = irq_disable();
thread_t *target = (thread_t *)sched_threads[m->sender_pid]; thread_t *target = thread_get_unchecked(m->sender_pid);
assert(target != NULL); assert(target != NULL);
if (target->status != STATUS_REPLY_BLOCKED) { if (target->status != STATUS_REPLY_BLOCKED) {
DEBUG("msg_reply(): %" PRIkernel_pid ": Target \"%" PRIkernel_pid DEBUG("msg_reply(): %" PRIkernel_pid ": Target \"%" PRIkernel_pid
"\" not waiting for reply.", sched_active_thread->pid, "\" not waiting for reply.", thread_getpid(),
target->pid); target->pid);
irq_restore(state); irq_restore(state);
return -1; return -1;
} }
DEBUG("msg_reply(): %" PRIkernel_pid ": Direct msg copy.\n", DEBUG("msg_reply(): %" PRIkernel_pid ": Direct msg copy.\n",
sched_active_thread->pid); thread_getpid());
/* copy msg to target */ /* copy msg to target */
msg_t *target_message = (msg_t *)target->wait_data; msg_t *target_message = (msg_t *)target->wait_data;
*target_message = *reply; *target_message = *reply;
@ -313,11 +312,11 @@ int msg_reply(msg_t *m, msg_t *reply)
int msg_reply_int(msg_t *m, msg_t *reply) int msg_reply_int(msg_t *m, msg_t *reply)
{ {
thread_t *target = (thread_t *)sched_threads[m->sender_pid]; thread_t *target = thread_get_unchecked(m->sender_pid);
if (target->status != STATUS_REPLY_BLOCKED) { if (target->status != STATUS_REPLY_BLOCKED) {
DEBUG("msg_reply_int(): %" PRIkernel_pid ": Target \"%" PRIkernel_pid DEBUG("msg_reply_int(): %" PRIkernel_pid ": Target \"%" PRIkernel_pid
"\" not waiting for reply.", sched_active_thread->pid, "\" not waiting for reply.", thread_getpid(),
target->pid); target->pid);
return -1; return -1;
} }
@ -344,9 +343,9 @@ static int _msg_receive(msg_t *m, int block)
unsigned state = irq_disable(); unsigned state = irq_disable();
DEBUG("_msg_receive: %" PRIkernel_pid ": _msg_receive.\n", DEBUG("_msg_receive: %" PRIkernel_pid ": _msg_receive.\n",
sched_active_thread->pid); thread_getpid());
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
int queue_index = -1; int queue_index = -1;
@ -361,9 +360,8 @@ static int _msg_receive(msg_t *m, int block)
} }
if (queue_index >= 0) { if (queue_index >= 0) {
DEBUG( DEBUG("_msg_receive: %" PRIkernel_pid ": _msg_receive(): We've got a "
"_msg_receive: %" PRIkernel_pid ": _msg_receive(): We've got a queued message.\n", "queued message.\n", thread_getpid());
sched_active_thread->pid);
*m = me->msg_array[queue_index]; *m = me->msg_array[queue_index];
} }
else { else {
@ -373,21 +371,19 @@ static int _msg_receive(msg_t *m, int block)
list_node_t *next = list_remove_head(&me->msg_waiters); list_node_t *next = list_remove_head(&me->msg_waiters);
if (next == NULL) { if (next == NULL) {
DEBUG( DEBUG("_msg_receive: %" PRIkernel_pid ": _msg_receive(): No thread in "
"_msg_receive: %" PRIkernel_pid ": _msg_receive(): No thread in waiting list.\n", "waiting list.\n", thread_getpid());
sched_active_thread->pid);
if (queue_index < 0) { if (queue_index < 0) {
DEBUG( DEBUG("_msg_receive(): %" PRIkernel_pid ": No msg in queue. Going "
"_msg_receive(): %" PRIkernel_pid ": No msg in queue. Going blocked.\n", "blocked.\n", thread_getpid());
sched_active_thread->pid);
sched_set_status(me, STATUS_RECEIVE_BLOCKED); sched_set_status(me, STATUS_RECEIVE_BLOCKED);
irq_restore(state); irq_restore(state);
thread_yield_higher(); thread_yield_higher();
/* sender copied message */ /* sender copied message */
assert(sched_active_thread->status != STATUS_RECEIVE_BLOCKED); assert(thread_get_active()->status != STATUS_RECEIVE_BLOCKED);
} }
else { else {
irq_restore(state); irq_restore(state);
@ -396,9 +392,8 @@ static int _msg_receive(msg_t *m, int block)
return 1; return 1;
} }
else { else {
DEBUG( DEBUG("_msg_receive: %" PRIkernel_pid ": _msg_receive(): Waking up "
"_msg_receive: %" PRIkernel_pid ": _msg_receive(): Waking up waiting thread.\n", "waiting thread.\n", thread_getpid());
sched_active_thread->pid);
thread_t *sender = thread_t *sender =
container_of((clist_node_t *)next, thread_t, rq_entry); container_of((clist_node_t *)next, thread_t, rq_entry);
@ -435,9 +430,9 @@ static int _msg_receive(msg_t *m, int block)
int msg_avail(void) int msg_avail(void)
{ {
DEBUG("msg_available: %" PRIkernel_pid ": msg_available.\n", DEBUG("msg_available: %" PRIkernel_pid ": msg_available.\n",
sched_active_thread->pid); thread_getpid());
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
int queue_index = -1; int queue_index = -1;
@ -450,7 +445,7 @@ int msg_avail(void)
void msg_init_queue(msg_t *array, int num) void msg_init_queue(msg_t *array, int num)
{ {
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
me->msg_array = array; me->msg_array = array;
cib_init(&(me->msg_queue), num); cib_init(&(me->msg_queue), num);
@ -460,7 +455,7 @@ void msg_queue_print(void)
{ {
unsigned state = irq_disable(); unsigned state = irq_disable();
thread_t *thread = (thread_t *)sched_active_thread; thread_t *thread = thread_get_active();
cib_t *msg_queue = &thread->msg_queue; cib_t *msg_queue = &thread->msg_queue;
msg_t *msg_array = thread->msg_array; msg_t *msg_array = thread->msg_array;
unsigned int i = msg_queue->read_count & msg_queue->mask; unsigned int i = msg_queue->read_count & msg_queue->mask;

View File

@ -37,7 +37,7 @@ void msg_bus_attach(msg_bus_t *bus, msg_bus_entry_t *entry)
entry->next.next = NULL; entry->next.next = NULL;
entry->event_mask = 0; entry->event_mask = 0;
entry->pid = sched_active_pid; entry->pid = thread_getpid();
state = irq_disable(); state = irq_disable();
list_add(&bus->subs, &entry->next); list_add(&bus->subs, &entry->next);
@ -62,7 +62,7 @@ msg_bus_entry_t *msg_bus_get_entry(msg_bus_t *bus)
msg_bus_entry_t *subscriber = container_of(e, msg_bus_entry_t, next); msg_bus_entry_t *subscriber = container_of(e, msg_bus_entry_t, next);
if (subscriber->pid == sched_active_pid) { if (subscriber->pid == thread_getpid()) {
s = subscriber; s = subscriber;
break; break;
} }

View File

@ -36,20 +36,20 @@ int _mutex_lock(mutex_t *mutex, volatile uint8_t *blocking)
{ {
unsigned irqstate = irq_disable(); unsigned irqstate = irq_disable();
DEBUG("PID[%" PRIkernel_pid "]: Mutex in use.\n", sched_active_pid); DEBUG("PID[%" PRIkernel_pid "]: Mutex in use.\n", thread_getpid());
if (mutex->queue.next == NULL) { if (mutex->queue.next == NULL) {
/* mutex is unlocked. */ /* mutex is unlocked. */
mutex->queue.next = MUTEX_LOCKED; mutex->queue.next = MUTEX_LOCKED;
DEBUG("PID[%" PRIkernel_pid "]: mutex_wait early out.\n", DEBUG("PID[%" PRIkernel_pid "]: mutex_wait early out.\n",
sched_active_pid); thread_getpid());
irq_restore(irqstate); irq_restore(irqstate);
return 1; return 1;
} }
else if (*blocking) { else if (*blocking) {
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
DEBUG("PID[%" PRIkernel_pid "]: Adding node to mutex queue: prio: %" DEBUG("PID[%" PRIkernel_pid "]: Adding node to mutex queue: prio: %"
PRIu32 "\n", sched_active_pid, (uint32_t)me->priority); PRIu32 "\n", thread_getpid(), (uint32_t)me->priority);
sched_set_status(me, STATUS_MUTEX_BLOCKED); sched_set_status(me, STATUS_MUTEX_BLOCKED);
if (mutex->queue.next == MUTEX_LOCKED) { if (mutex->queue.next == MUTEX_LOCKED) {
mutex->queue.next = (list_node_t *)&me->rq_entry; mutex->queue.next = (list_node_t *)&me->rq_entry;
@ -75,7 +75,7 @@ void mutex_unlock(mutex_t *mutex)
unsigned irqstate = irq_disable(); unsigned irqstate = irq_disable();
DEBUG("mutex_unlock(): queue.next: %p pid: %" PRIkernel_pid "\n", DEBUG("mutex_unlock(): queue.next: %p pid: %" PRIkernel_pid "\n",
(void *)mutex->queue.next, sched_active_pid); (void *)mutex->queue.next, thread_getpid());
if (mutex->queue.next == NULL) { if (mutex->queue.next == NULL) {
/* the mutex was not locked */ /* the mutex was not locked */
@ -110,7 +110,7 @@ void mutex_unlock(mutex_t *mutex)
void mutex_unlock_and_sleep(mutex_t *mutex) void mutex_unlock_and_sleep(mutex_t *mutex)
{ {
DEBUG("PID[%" PRIkernel_pid "]: unlocking mutex. queue.next: %p, and " DEBUG("PID[%" PRIkernel_pid "]: unlocking mutex. queue.next: %p, and "
"taking a nap\n", sched_active_pid, (void *)mutex->queue.next); "taking a nap\n", thread_getpid(), (void *)mutex->queue.next);
unsigned irqstate = irq_disable(); unsigned irqstate = irq_disable();
if (mutex->queue.next) { if (mutex->queue.next) {
@ -129,8 +129,8 @@ void mutex_unlock_and_sleep(mutex_t *mutex)
} }
} }
DEBUG("PID[%" PRIkernel_pid "]: going to sleep.\n", sched_active_pid); DEBUG("PID[%" PRIkernel_pid "]: going to sleep.\n", thread_getpid());
sched_set_status((thread_t *)sched_active_thread, STATUS_SLEEPING); sched_set_status(thread_get_active(), STATUS_SLEEPING);
irq_restore(irqstate); irq_restore(irqstate);
thread_yield_higher(); thread_yield_higher();
} }

View File

@ -102,7 +102,7 @@ static void _unschedule(thread_t *active_thread)
int __attribute__((used)) sched_run(void) int __attribute__((used)) sched_run(void)
{ {
thread_t *active_thread = (thread_t *)sched_active_thread; thread_t *active_thread = thread_get_active();
if (!IS_USED(MODULE_CORE_IDLE_THREAD)) { if (!IS_USED(MODULE_CORE_IDLE_THREAD)) {
if (!runqueue_bitcache) { if (!runqueue_bitcache) {
@ -147,7 +147,7 @@ int __attribute__((used)) sched_run(void)
next_thread->status = STATUS_RUNNING; next_thread->status = STATUS_RUNNING;
sched_active_pid = next_thread->pid; sched_active_pid = next_thread->pid;
sched_active_thread = (volatile thread_t *)next_thread; sched_active_thread = next_thread;
#ifdef MODULE_MPU_STACK_GUARD #ifdef MODULE_MPU_STACK_GUARD
mpu_configure( mpu_configure(
@ -194,7 +194,7 @@ void sched_set_status(thread_t *process, thread_status_t status)
void sched_switch(uint16_t other_prio) void sched_switch(uint16_t other_prio)
{ {
thread_t *active_thread = (thread_t *)sched_active_thread; thread_t *active_thread = thread_get_active();
uint16_t current_prio = active_thread->priority; uint16_t current_prio = active_thread->priority;
int on_runqueue = (active_thread->status >= STATUS_ON_RUNQUEUE); int on_runqueue = (active_thread->status >= STATUS_ON_RUNQUEUE);
@ -221,13 +221,13 @@ void sched_switch(uint16_t other_prio)
NORETURN void sched_task_exit(void) NORETURN void sched_task_exit(void)
{ {
DEBUG("sched_task_exit: ending thread %" PRIkernel_pid "...\n", DEBUG("sched_task_exit: ending thread %" PRIkernel_pid "...\n",
sched_active_thread->pid); thread_getpid());
(void)irq_disable(); (void)irq_disable();
sched_threads[sched_active_pid] = NULL; sched_threads[thread_getpid()] = NULL;
sched_num_threads--; sched_num_threads--;
sched_set_status((thread_t *)sched_active_thread, STATUS_STOPPED); sched_set_status(thread_get_active(), STATUS_STOPPED);
sched_active_thread = NULL; sched_active_thread = NULL;
cpu_switch_context_exit(); cpu_switch_context_exit();

View File

@ -32,7 +32,7 @@
thread_status_t thread_getstatus(kernel_pid_t pid) thread_status_t thread_getstatus(kernel_pid_t pid)
{ {
volatile thread_t *thread = thread_get(pid); thread_t *thread = thread_get(pid);
return thread ? thread->status : STATUS_NOT_FOUND; return thread ? thread->status : STATUS_NOT_FOUND;
} }
@ -40,7 +40,7 @@ thread_status_t thread_getstatus(kernel_pid_t pid)
const char *thread_getname(kernel_pid_t pid) const char *thread_getname(kernel_pid_t pid)
{ {
#ifdef DEVELHELP #ifdef DEVELHELP
volatile thread_t *thread = thread_get(pid); thread_t *thread = thread_get(pid);
return thread ? thread->name : NULL; return thread ? thread->name : NULL;
#else #else
(void)pid; (void)pid;
@ -55,7 +55,7 @@ void thread_zombify(void)
} }
irq_disable(); irq_disable();
sched_set_status((thread_t *)sched_active_thread, STATUS_ZOMBIE); sched_set_status(thread_get_active(), STATUS_ZOMBIE);
irq_enable(); irq_enable();
thread_yield_higher(); thread_yield_higher();
@ -70,7 +70,7 @@ int thread_kill_zombie(kernel_pid_t pid)
int result = (int)STATUS_NOT_FOUND; int result = (int)STATUS_NOT_FOUND;
thread_t *thread = (thread_t *)thread_get(pid); thread_t *thread = thread_get(pid);
if (!thread) { if (!thread) {
DEBUG("thread_kill: Thread does not exist!\n"); DEBUG("thread_kill: Thread does not exist!\n");
@ -98,7 +98,7 @@ void thread_sleep(void)
} }
unsigned state = irq_disable(); unsigned state = irq_disable();
sched_set_status((thread_t *)sched_active_thread, STATUS_SLEEPING); sched_set_status(thread_get_active(), STATUS_SLEEPING);
irq_restore(state); irq_restore(state);
thread_yield_higher(); thread_yield_higher();
} }
@ -109,7 +109,7 @@ int thread_wakeup(kernel_pid_t pid)
unsigned old_state = irq_disable(); unsigned old_state = irq_disable();
thread_t *thread = (thread_t *)thread_get(pid); thread_t *thread = thread_get(pid);
if (!thread) { if (!thread) {
DEBUG("thread_wakeup: Thread does not exist!\n"); DEBUG("thread_wakeup: Thread does not exist!\n");
@ -135,7 +135,7 @@ int thread_wakeup(kernel_pid_t pid)
void thread_yield(void) void thread_yield(void)
{ {
unsigned old_state = irq_disable(); unsigned old_state = irq_disable();
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
if (me->status >= STATUS_ON_RUNQUEUE) { if (me->status >= STATUS_ON_RUNQUEUE) {
clist_lpoprpush(&sched_runqueues[me->priority]); clist_lpoprpush(&sched_runqueues[me->priority]);

View File

@ -52,7 +52,7 @@ static void _thread_flags_wait(thread_flags_t mask, thread_t *thread,
thread_flags_t thread_flags_clear(thread_flags_t mask) thread_flags_t thread_flags_clear(thread_flags_t mask)
{ {
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
mask = _thread_flags_clear_atomic(me, mask); mask = _thread_flags_clear_atomic(me, mask);
DEBUG("thread_flags_clear(): pid %" PRIkernel_pid " clearing 0x%08x\n", DEBUG("thread_flags_clear(): pid %" PRIkernel_pid " clearing 0x%08x\n",
@ -62,7 +62,7 @@ thread_flags_t thread_flags_clear(thread_flags_t mask)
static void _thread_flags_wait_any(thread_flags_t mask) static void _thread_flags_wait_any(thread_flags_t mask)
{ {
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
unsigned state = irq_disable(); unsigned state = irq_disable();
if (!(me->flags & mask)) { if (!(me->flags & mask)) {
@ -75,7 +75,7 @@ static void _thread_flags_wait_any(thread_flags_t mask)
thread_flags_t thread_flags_wait_any(thread_flags_t mask) thread_flags_t thread_flags_wait_any(thread_flags_t mask)
{ {
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
_thread_flags_wait_any(mask); _thread_flags_wait_any(mask);
return _thread_flags_clear_atomic(me, mask); return _thread_flags_clear_atomic(me, mask);
@ -84,7 +84,7 @@ thread_flags_t thread_flags_wait_any(thread_flags_t mask)
thread_flags_t thread_flags_wait_one(thread_flags_t mask) thread_flags_t thread_flags_wait_one(thread_flags_t mask)
{ {
_thread_flags_wait_any(mask); _thread_flags_wait_any(mask);
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
thread_flags_t tmp = me->flags & mask; thread_flags_t tmp = me->flags & mask;
/* clear all but least significant bit */ /* clear all but least significant bit */
tmp &= (~tmp + 1); tmp &= (~tmp + 1);
@ -94,7 +94,7 @@ thread_flags_t thread_flags_wait_one(thread_flags_t mask)
thread_flags_t thread_flags_wait_all(thread_flags_t mask) thread_flags_t thread_flags_wait_all(thread_flags_t mask)
{ {
unsigned state = irq_disable(); unsigned state = irq_disable();
thread_t *me = (thread_t *)sched_active_thread; thread_t *me = thread_get_active();
if (!((me->flags & mask) == mask)) { if (!((me->flags & mask) == mask)) {
DEBUG( DEBUG(