diff options
Diffstat (limited to 'firmware/kernel/queue.c')
-rw-r--r-- | firmware/kernel/queue.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/firmware/kernel/queue.c b/firmware/kernel/queue.c index 927e55274c..70dba46c0a 100644 --- a/firmware/kernel/queue.c +++ b/firmware/kernel/queue.c | |||
@@ -283,6 +283,9 @@ void queue_wait(struct event_queue *q, struct queue_event *ev) | |||
283 | #endif | 283 | #endif |
284 | 284 | ||
285 | oldlevel = disable_irq_save(); | 285 | oldlevel = disable_irq_save(); |
286 | |||
287 | ASSERT_CPU_MODE(CPU_MODE_THREAD_CONTEXT, oldlevel); | ||
288 | |||
286 | corelock_lock(&q->cl); | 289 | corelock_lock(&q->cl); |
287 | 290 | ||
288 | #ifdef HAVE_EXTENDED_MESSAGING_AND_NAME | 291 | #ifdef HAVE_EXTENDED_MESSAGING_AND_NAME |
@@ -335,6 +338,10 @@ void queue_wait_w_tmo(struct event_queue *q, struct queue_event *ev, int ticks) | |||
335 | #endif | 338 | #endif |
336 | 339 | ||
337 | oldlevel = disable_irq_save(); | 340 | oldlevel = disable_irq_save(); |
341 | |||
342 | if (ticks != TIMEOUT_NOBLOCK) | ||
343 | ASSERT_CPU_MODE(CPU_MODE_THREAD_CONTEXT, oldlevel); | ||
344 | |||
338 | corelock_lock(&q->cl); | 345 | corelock_lock(&q->cl); |
339 | 346 | ||
340 | #ifdef HAVE_EXTENDED_MESSAGING_AND_NAME | 347 | #ifdef HAVE_EXTENDED_MESSAGING_AND_NAME |
@@ -421,6 +428,9 @@ intptr_t queue_send(struct event_queue *q, long id, intptr_t data) | |||
421 | unsigned int wr; | 428 | unsigned int wr; |
422 | 429 | ||
423 | oldlevel = disable_irq_save(); | 430 | oldlevel = disable_irq_save(); |
431 | |||
432 | ASSERT_CPU_MODE(CPU_MODE_THREAD_CONTEXT, oldlevel); | ||
433 | |||
424 | corelock_lock(&q->cl); | 434 | corelock_lock(&q->cl); |
425 | 435 | ||
426 | wr = q->write++ & QUEUE_LENGTH_MASK; | 436 | wr = q->write++ & QUEUE_LENGTH_MASK; |