diff options
author | Michael Sevakis <jethead71@rockbox.org> | 2014-08-06 02:10:14 -0400 |
---|---|---|
committer | Michael Sevakis <jethead71@rockbox.org> | 2014-08-06 02:27:49 -0400 |
commit | 81ffd9bfeee6aca65f507a46c8123b47ca6e2803 (patch) | |
tree | e9eb535dbc71f35bce7519d7a6a063e4a683ba55 /firmware/kernel | |
parent | e7e302f2559ec2c8878e5b5205755900215196b3 (diff) | |
download | rockbox-81ffd9bfeee6aca65f507a46c8123b47ca6e2803.tar.gz rockbox-81ffd9bfeee6aca65f507a46c8123b47ca6e2803.zip |
Fix some stuff for no priority and
thread_queue_wake() doesn't need the 2nd parameter. The original purpose
for it never came to be.
Non priority version mrsw_writer_wakeup_readers was left improperly
finished. Get that back into line.
Change-Id: Ic613a2479f3cc14dc7c761517670eb15178da9f5
Diffstat (limited to 'firmware/kernel')
-rw-r--r-- | firmware/kernel/include/thread.h | 3 | ||||
-rw-r--r-- | firmware/kernel/mrsw_lock.c | 9 | ||||
-rw-r--r-- | firmware/kernel/queue.c | 2 | ||||
-rw-r--r-- | firmware/kernel/thread.c | 10 |
4 files changed, 12 insertions, 12 deletions
diff --git a/firmware/kernel/include/thread.h b/firmware/kernel/include/thread.h index f181f867cb..e10b4e21b4 100644 --- a/firmware/kernel/include/thread.h +++ b/firmware/kernel/include/thread.h | |||
@@ -360,8 +360,7 @@ void block_thread(struct thread_entry *current, int timeout); | |||
360 | higher priority than current were woken) */ | 360 | higher priority than current were woken) */ |
361 | 361 | ||
362 | /* A convenience function for waking an entire queue of threads. */ | 362 | /* A convenience function for waking an entire queue of threads. */ |
363 | unsigned int thread_queue_wake(struct thread_entry **list, | 363 | unsigned int thread_queue_wake(struct thread_entry **list); |
364 | volatile int *count); | ||
365 | 364 | ||
366 | /* Wakeup a thread at the head of a list */ | 365 | /* Wakeup a thread at the head of a list */ |
367 | enum wakeup_thread_protocol | 366 | enum wakeup_thread_protocol |
diff --git a/firmware/kernel/mrsw_lock.c b/firmware/kernel/mrsw_lock.c index 42f43caec3..46ab893622 100644 --- a/firmware/kernel/mrsw_lock.c +++ b/firmware/kernel/mrsw_lock.c | |||
@@ -124,8 +124,15 @@ static FORCE_INLINE unsigned int | |||
124 | mrsw_writer_wakeup_readers(struct mrsw_lock *mrsw) | 124 | mrsw_writer_wakeup_readers(struct mrsw_lock *mrsw) |
125 | { | 125 | { |
126 | mrsw->splay.blocker.thread = NULL; | 126 | mrsw->splay.blocker.thread = NULL; |
127 | for (int count = 0; mrsw->queue && mrsw->queue->retval != 0; count++) | 127 | int count = 0; |
128 | |||
129 | while (mrsw->queue && mrsw->queue->retval != 0) | ||
130 | { | ||
128 | wakeup_thread(&mrsw->queue); | 131 | wakeup_thread(&mrsw->queue); |
132 | count++; | ||
133 | } | ||
134 | |||
135 | mrsw->count = count; | ||
129 | return THREAD_OK; | 136 | return THREAD_OK; |
130 | } | 137 | } |
131 | 138 | ||
diff --git a/firmware/kernel/queue.c b/firmware/kernel/queue.c index 22a8da9bd3..c8beb908b6 100644 --- a/firmware/kernel/queue.c +++ b/firmware/kernel/queue.c | |||
@@ -267,7 +267,7 @@ void queue_delete(struct event_queue *q) | |||
267 | corelock_unlock(&all_queues.cl); | 267 | corelock_unlock(&all_queues.cl); |
268 | 268 | ||
269 | /* Release thread(s) waiting on queue head */ | 269 | /* Release thread(s) waiting on queue head */ |
270 | thread_queue_wake(&q->queue, NULL); | 270 | thread_queue_wake(&q->queue); |
271 | 271 | ||
272 | #ifdef HAVE_EXTENDED_MESSAGING_AND_NAME | 272 | #ifdef HAVE_EXTENDED_MESSAGING_AND_NAME |
273 | if(q->send) | 273 | if(q->send) |
diff --git a/firmware/kernel/thread.c b/firmware/kernel/thread.c index 0a47f97e93..9855cc3c84 100644 --- a/firmware/kernel/thread.c +++ b/firmware/kernel/thread.c | |||
@@ -1527,10 +1527,8 @@ void block_thread(struct thread_entry *current, int timeout) | |||
1527 | * INTERNAL: Intended for use by kernel objects and not for programs. | 1527 | * INTERNAL: Intended for use by kernel objects and not for programs. |
1528 | *--------------------------------------------------------------------------- | 1528 | *--------------------------------------------------------------------------- |
1529 | */ | 1529 | */ |
1530 | unsigned int thread_queue_wake(struct thread_entry **list, | 1530 | unsigned int thread_queue_wake(struct thread_entry **list) |
1531 | volatile int *count) | ||
1532 | { | 1531 | { |
1533 | int num = 0; | ||
1534 | unsigned result = THREAD_NONE; | 1532 | unsigned result = THREAD_NONE; |
1535 | 1533 | ||
1536 | for (;;) | 1534 | for (;;) |
@@ -1541,12 +1539,8 @@ unsigned int thread_queue_wake(struct thread_entry **list, | |||
1541 | break; /* No more threads */ | 1539 | break; /* No more threads */ |
1542 | 1540 | ||
1543 | result |= rc; | 1541 | result |= rc; |
1544 | num++; | ||
1545 | } | 1542 | } |
1546 | 1543 | ||
1547 | if (count) | ||
1548 | *count = num; | ||
1549 | |||
1550 | return result; | 1544 | return result; |
1551 | } | 1545 | } |
1552 | 1546 | ||
@@ -1821,7 +1815,7 @@ static inline void thread_final_exit(struct thread_entry *current) | |||
1821 | * execution except the slot itself. */ | 1815 | * execution except the slot itself. */ |
1822 | 1816 | ||
1823 | /* Signal this thread */ | 1817 | /* Signal this thread */ |
1824 | thread_queue_wake(¤t->queue, NULL); | 1818 | thread_queue_wake(¤t->queue); |
1825 | corelock_unlock(¤t->waiter_cl); | 1819 | corelock_unlock(¤t->waiter_cl); |
1826 | switch_thread(); | 1820 | switch_thread(); |
1827 | /* This should never and must never be reached - if it is, the | 1821 | /* This should never and must never be reached - if it is, the |