summaryrefslogtreecommitdiff
path: root/firmware/export
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2010-12-27 10:05:09 +0000
committerMichael Sevakis <jethead71@rockbox.org>2010-12-27 10:05:09 +0000
commit7b4eb44395bced7073e37d0b8b0d83fb2f518482 (patch)
treeaf526b3cf241e9eeb2bd3c1508791078f93f4157 /firmware/export
parent479414faccedeeb1ca7d0b6074bd69f2ef6dd441 (diff)
downloadrockbox-7b4eb44395bced7073e37d0b8b0d83fb2f518482.tar.gz
rockbox-7b4eb44395bced7073e37d0b8b0d83fb2f518482.zip
Certain data accesses in the kernel should have volatile semantics to be correct and not rely on the whims of the compiler. Change queue clearing to simply catch read up to write rather than reset both to 0 to ensure sane results for queue_count and queue_empty with concurrency. Binsize may or may not increase a bit depending upon whether the output was as intended in all places; wrong stuff was already unlikely to cause any issue.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28909 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/export')
-rw-r--r--firmware/export/kernel.h10
-rw-r--r--firmware/export/thread.h2
2 files changed, 6 insertions, 6 deletions
diff --git a/firmware/export/kernel.h b/firmware/export/kernel.h
index c7fcd93284..4656d87fb2 100644
--- a/firmware/export/kernel.h
+++ b/firmware/export/kernel.h
@@ -106,7 +106,7 @@ struct queue_sender_list
106 struct thread_entry *senders[QUEUE_LENGTH]; /* message->thread map */ 106 struct thread_entry *senders[QUEUE_LENGTH]; /* message->thread map */
107 struct thread_entry *list; /* list of senders in map */ 107 struct thread_entry *list; /* list of senders in map */
108 /* Send info for last message dequeued or NULL if replied or not sent */ 108 /* Send info for last message dequeued or NULL if replied or not sent */
109 struct thread_entry *curr_sender; 109 struct thread_entry * volatile curr_sender;
110#ifdef HAVE_PRIORITY_SCHEDULING 110#ifdef HAVE_PRIORITY_SCHEDULING
111 struct blocker blocker; 111 struct blocker blocker;
112#endif 112#endif
@@ -126,10 +126,10 @@ struct event_queue
126{ 126{
127 struct thread_entry *queue; /* waiter list */ 127 struct thread_entry *queue; /* waiter list */
128 struct queue_event events[QUEUE_LENGTH]; /* list of events */ 128 struct queue_event events[QUEUE_LENGTH]; /* list of events */
129 unsigned int read; /* head of queue */ 129 unsigned int volatile read; /* head of queue */
130 unsigned int write; /* tail of queue */ 130 unsigned int volatile write; /* tail of queue */
131#ifdef HAVE_EXTENDED_MESSAGING_AND_NAME 131#ifdef HAVE_EXTENDED_MESSAGING_AND_NAME
132 struct queue_sender_list *send; /* list of threads waiting for 132 struct queue_sender_list * volatile send; /* list of threads waiting for
133 reply to an event */ 133 reply to an event */
134#ifdef HAVE_PRIORITY_SCHEDULING 134#ifdef HAVE_PRIORITY_SCHEDULING
135 struct blocker *blocker_p; /* priority inheritance info 135 struct blocker *blocker_p; /* priority inheritance info
@@ -171,7 +171,7 @@ struct semaphore
171struct wakeup 171struct wakeup
172{ 172{
173 struct thread_entry *queue; /* waiter list */ 173 struct thread_entry *queue; /* waiter list */
174 bool signalled; /* signalled status */ 174 bool volatile signalled; /* signalled status */
175 IF_COP( struct corelock cl; ) /* multiprocessor sync */ 175 IF_COP( struct corelock cl; ) /* multiprocessor sync */
176}; 176};
177#endif 177#endif
diff --git a/firmware/export/thread.h b/firmware/export/thread.h
index 87c2d2d709..ba777dc3d1 100644
--- a/firmware/export/thread.h
+++ b/firmware/export/thread.h
@@ -269,7 +269,7 @@ struct thread_entry
269 /* Only enabled when using queue_send for now */ 269 /* Only enabled when using queue_send for now */
270#endif 270#endif
271#if defined(HAVE_EXTENDED_MESSAGING_AND_NAME) || NUM_CORES > 1 271#if defined(HAVE_EXTENDED_MESSAGING_AND_NAME) || NUM_CORES > 1
272 intptr_t retval; /* Return value from a blocked operation/ 272 volatile intptr_t retval; /* Return value from a blocked operation/
273 misc. use */ 273 misc. use */
274#endif 274#endif
275#ifdef HAVE_PRIORITY_SCHEDULING 275#ifdef HAVE_PRIORITY_SCHEDULING