summaryrefslogtreecommitdiff
path: root/firmware/kernel/queue.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2017-01-21 14:18:37 -0500
committerMichael Sevakis <jethead71@rockbox.org>2017-01-21 14:25:52 -0500
commit3e738661108fb2a8e3474c6336c2a5c2668f82b6 (patch)
treec3c7bc51c4329ab6652fd2550a241a56bbafda1f /firmware/kernel/queue.c
parentda464572318a34f4791ccb419acbf0a470b810e6 (diff)
downloadrockbox-3e738661108fb2a8e3474c6336c2a5c2668f82b6.tar.gz
rockbox-3e738661108fb2a8e3474c6336c2a5c2668f82b6.zip
Add CPU mode asserts to kernel on blocking functions.
This scourge finds it's way back in far too often. Right now, only defined for ARM. Have fun! Change-Id: Ib21be09ebf71dec10dc652a7a664779251f49644
Diffstat (limited to 'firmware/kernel/queue.c')
-rw-r--r--firmware/kernel/queue.c10
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;