diff options
Diffstat (limited to 'firmware/kernel.c')
-rw-r--r-- | firmware/kernel.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/firmware/kernel.c b/firmware/kernel.c index 29907f3082..27f3b0d08b 100644 --- a/firmware/kernel.c +++ b/firmware/kernel.c | |||
@@ -57,8 +57,6 @@ volatile long current_tick SHAREDDATA_ATTR = 0; | |||
57 | /* List of tick tasks - final element always NULL for termination */ | 57 | /* List of tick tasks - final element always NULL for termination */ |
58 | void (*tick_funcs[MAX_NUM_TICK_TASKS+1])(void); | 58 | void (*tick_funcs[MAX_NUM_TICK_TASKS+1])(void); |
59 | 59 | ||
60 | extern struct core_entry cores[NUM_CORES]; | ||
61 | |||
62 | /* This array holds all queues that are initiated. It is used for broadcast. */ | 60 | /* This array holds all queues that are initiated. It is used for broadcast. */ |
63 | static struct | 61 | static struct |
64 | { | 62 | { |
@@ -535,7 +533,7 @@ void queue_wait(struct event_queue *q, struct queue_event *ev) | |||
535 | 533 | ||
536 | #ifdef HAVE_PRIORITY_SCHEDULING | 534 | #ifdef HAVE_PRIORITY_SCHEDULING |
537 | KERNEL_ASSERT(QUEUE_GET_THREAD(q) == NULL || | 535 | KERNEL_ASSERT(QUEUE_GET_THREAD(q) == NULL || |
538 | QUEUE_GET_THREAD(q) == cores[CURRENT_CORE].running, | 536 | QUEUE_GET_THREAD(q) == thread_id_entry(THREAD_ID_CURRENT), |
539 | "queue_wait->wrong thread\n"); | 537 | "queue_wait->wrong thread\n"); |
540 | #endif | 538 | #endif |
541 | 539 | ||
@@ -547,7 +545,7 @@ void queue_wait(struct event_queue *q, struct queue_event *ev) | |||
547 | 545 | ||
548 | if (q->read == q->write) | 546 | if (q->read == q->write) |
549 | { | 547 | { |
550 | struct thread_entry *current = cores[CURRENT_CORE].running; | 548 | struct thread_entry *current = thread_id_entry(THREAD_ID_CURRENT); |
551 | 549 | ||
552 | do | 550 | do |
553 | { | 551 | { |
@@ -582,7 +580,7 @@ void queue_wait_w_tmo(struct event_queue *q, struct queue_event *ev, int ticks) | |||
582 | 580 | ||
583 | #ifdef HAVE_EXTENDED_MESSAGING_AND_NAME | 581 | #ifdef HAVE_EXTENDED_MESSAGING_AND_NAME |
584 | KERNEL_ASSERT(QUEUE_GET_THREAD(q) == NULL || | 582 | KERNEL_ASSERT(QUEUE_GET_THREAD(q) == NULL || |
585 | QUEUE_GET_THREAD(q) == cores[CURRENT_CORE].running, | 583 | QUEUE_GET_THREAD(q) == thread_id_entry(THREAD_ID_CURRENT), |
586 | "queue_wait_w_tmo->wrong thread\n"); | 584 | "queue_wait_w_tmo->wrong thread\n"); |
587 | #endif | 585 | #endif |
588 | 586 | ||
@@ -594,7 +592,7 @@ void queue_wait_w_tmo(struct event_queue *q, struct queue_event *ev, int ticks) | |||
594 | 592 | ||
595 | if (q->read == q->write && ticks > 0) | 593 | if (q->read == q->write && ticks > 0) |
596 | { | 594 | { |
597 | struct thread_entry *current = cores[CURRENT_CORE].running; | 595 | struct thread_entry *current = thread_id_entry(THREAD_ID_CURRENT); |
598 | 596 | ||
599 | IF_COP( current->obj_cl = &q->cl; ) | 597 | IF_COP( current->obj_cl = &q->cl; ) |
600 | current->bqp = &q->queue; | 598 | current->bqp = &q->queue; |
@@ -669,7 +667,7 @@ intptr_t queue_send(struct event_queue *q, long id, intptr_t data) | |||
669 | { | 667 | { |
670 | struct queue_sender_list *send = q->send; | 668 | struct queue_sender_list *send = q->send; |
671 | struct thread_entry **spp = &send->senders[wr]; | 669 | struct thread_entry **spp = &send->senders[wr]; |
672 | struct thread_entry *current = cores[CURRENT_CORE].running; | 670 | struct thread_entry *current = thread_id_entry(THREAD_ID_CURRENT); |
673 | 671 | ||
674 | if(UNLIKELY(*spp)) | 672 | if(UNLIKELY(*spp)) |
675 | { | 673 | { |
@@ -878,8 +876,7 @@ void mutex_init(struct mutex *m) | |||
878 | /* Gain ownership of a mutex object or block until it becomes free */ | 876 | /* Gain ownership of a mutex object or block until it becomes free */ |
879 | void mutex_lock(struct mutex *m) | 877 | void mutex_lock(struct mutex *m) |
880 | { | 878 | { |
881 | const unsigned int core = CURRENT_CORE; | 879 | struct thread_entry *current = thread_id_entry(THREAD_ID_CURRENT); |
882 | struct thread_entry *current = cores[core].running; | ||
883 | 880 | ||
884 | if(current == MUTEX_GET_THREAD(m)) | 881 | if(current == MUTEX_GET_THREAD(m)) |
885 | { | 882 | { |
@@ -918,10 +915,10 @@ void mutex_lock(struct mutex *m) | |||
918 | void mutex_unlock(struct mutex *m) | 915 | void mutex_unlock(struct mutex *m) |
919 | { | 916 | { |
920 | /* unlocker not being the owner is an unlocking violation */ | 917 | /* unlocker not being the owner is an unlocking violation */ |
921 | KERNEL_ASSERT(MUTEX_GET_THREAD(m) == cores[CURRENT_CORE].running, | 918 | KERNEL_ASSERT(MUTEX_GET_THREAD(m) == thread_id_entry(THREAD_ID_CURRENT), |
922 | "mutex_unlock->wrong thread (%s != %s)\n", | 919 | "mutex_unlock->wrong thread (%s != %s)\n", |
923 | MUTEX_GET_THREAD(m)->name, | 920 | MUTEX_GET_THREAD(m)->name, |
924 | cores[CURRENT_CORE].running->name); | 921 | thread_id_entry(THREAD_ID_CURRENT)->name); |
925 | 922 | ||
926 | if(m->count > 0) | 923 | if(m->count > 0) |
927 | { | 924 | { |
@@ -989,7 +986,7 @@ void semaphore_wait(struct semaphore *s) | |||
989 | } | 986 | } |
990 | 987 | ||
991 | /* too many waits - block until dequeued... */ | 988 | /* too many waits - block until dequeued... */ |
992 | current = cores[CURRENT_CORE].running; | 989 | current = thread_id_entry(THREAD_ID_CURRENT); |
993 | 990 | ||
994 | IF_COP( current->obj_cl = &s->cl; ) | 991 | IF_COP( current->obj_cl = &s->cl; ) |
995 | current->bqp = &s->queue; | 992 | current->bqp = &s->queue; |
@@ -1051,7 +1048,7 @@ int wakeup_wait(struct wakeup *w, int timeout) | |||
1051 | 1048 | ||
1052 | if(LIKELY(w->signalled == 0 && timeout != TIMEOUT_NOBLOCK)) | 1049 | if(LIKELY(w->signalled == 0 && timeout != TIMEOUT_NOBLOCK)) |
1053 | { | 1050 | { |
1054 | struct thread_entry * current = cores[CURRENT_CORE].running; | 1051 | struct thread_entry * current = thread_id_entry(THREAD_ID_CURRENT); |
1055 | 1052 | ||
1056 | IF_COP( current->obj_cl = &w->cl; ) | 1053 | IF_COP( current->obj_cl = &w->cl; ) |
1057 | current->bqp = &w->queue; | 1054 | current->bqp = &w->queue; |