[SeaBIOS] [PATCH 1/2] Move CanInterrupt check to check_irqs() and wait_irq()

Kevin O'Connor kevin at koconnor.net
Thu Aug 13 14:16:30 CET 2015


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

diff --git a/src/stacks.c b/src/stacks.c
index 1ad9ef0..1cd0fde 100644
--- a/src/stacks.c
+++ b/src/stacks.c
@@ -661,6 +661,9 @@ fail:
 void VISIBLE16
 check_irqs(void)
 {
+    if (!MODESEGMENT && !CanInterrupt)
+        // Can't enable interrupts (PIC and/or IVT not yet setup)
+        return;
     if (need_hop_back()) {
         extern void _cfunc16_check_irqs(void);
         stack_hop_back(0, 0, _cfunc16_check_irqs);
@@ -674,12 +677,11 @@ void
 yield(void)
 {
     if (MODESEGMENT || !CONFIG_THREADS) {
-        if (MODESEGMENT || CanInterrupt)
-            check_irqs();
+        check_irqs();
         return;
     }
     struct thread_info *cur = getCurThread();
-    if (cur == &MainThread && CanInterrupt)
+    if (cur == &MainThread)
         // Permit irqs to fire
         check_irqs();
 
@@ -690,6 +692,9 @@ yield(void)
 void VISIBLE16
 wait_irq(void)
 {
+    if (!MODESEGMENT && !CanInterrupt)
+        // Can't enable interrupts (PIC and/or IVT not yet setup)
+        return;
     if (need_hop_back()) {
         extern void _cfunc16_wait_irq(void);
         stack_hop_back(0, 0, _cfunc16_wait_irq);
@@ -707,8 +712,7 @@ yield_toirq(void)
         yield();
         return;
     }
-    if (MODESEGMENT || CanInterrupt)
-        wait_irq();
+    wait_irq();
 }
 
 // Wait for all threads (other than the main thread) to complete.
-- 
1.9.3




More information about the SeaBIOS mailing list