[SeaBIOS] [PATCH 4/8] Introduce helper function have_threads() in stacks.c.

Kevin O'Connor kevin at koconnor.net
Sun Jun 9 04:23:00 CEST 2013


Signed-off-by: Kevin O'Connor <kevin at koconnor.net>
---
 src/stacks.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/stacks.c b/src/stacks.c
index bf9db06..65f2c99 100644
--- a/src/stacks.c
+++ b/src/stacks.c
@@ -248,6 +248,13 @@ struct thread_info MainThread VARFSEG = {
 };
 #define THREADSTACKSIZE 4096
 
+// Check if any threads are running.
+static int
+have_threads(void)
+{
+    return CONFIG_THREADS && GET_FLATPTR(MainThread.next) != &MainThread;
+}
+
 // Return the 'struct thread_info' for the currently running thread.
 struct thread_info *
 getCurThread(void)
@@ -287,7 +294,7 @@ __end_thread(struct thread_info *old)
     *old->pprev = old->next;
     free(old);
     dprintf(DEBUG_thread, "\\%08x/ End thread\n", (u32)old);
-    if (MainThread.next == &MainThread)
+    if (!have_threads())
         dprintf(1, "All threads complete.\n");
 }
 
@@ -384,7 +391,7 @@ yield_toirq(void)
         stack_hop_back(0, 0, wait_irq);
         return;
     }
-    if (CONFIG_THREADS && MainThread.next != &MainThread) {
+    if (have_threads()) {
         // Threads still active - do a yield instead.
         yield();
         return;
@@ -398,9 +405,7 @@ void
 wait_threads(void)
 {
     ASSERT32FLAT();
-    if (! CONFIG_THREADS)
-        return;
-    while (MainThread.next != &MainThread)
+    while (have_threads())
         yield();
 }
 
@@ -480,10 +485,7 @@ yield_preempt(void)
 void
 check_preempt(void)
 {
-    if (! CONFIG_THREAD_OPTIONROMS || !GET_GLOBAL(CanPreempt)
-        || GET_FLATPTR(MainThread.next) == &MainThread)
-        return;
-
     extern void _cfunc32flat_yield_preempt(void);
-    call32(_cfunc32flat_yield_preempt, 0, 0);
+    if (CONFIG_THREAD_OPTIONROMS && GET_GLOBAL(CanPreempt) && have_threads())
+        call32(_cfunc32flat_yield_preempt, 0, 0);
 }
-- 
1.7.11.7




More information about the SeaBIOS mailing list