Interrupt support for SMP and the per-CPU thread dispatch disable level.
---
 c/src/lib/libbsp/i386/shared/irq/irq_asm.S |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/c/src/lib/libbsp/i386/shared/irq/irq_asm.S 
b/c/src/lib/libbsp/i386/shared/irq/irq_asm.S
index f77dd7f..d73c517 100644
--- a/c/src/lib/libbsp/i386/shared/irq/irq_asm.S
+++ b/c/src/lib/libbsp/i386/shared/irq/irq_asm.S
@@ -144,7 +144,14 @@ ISR_STOP:
 .check_stack_switch:
        movl      esp, ebp                  /* ebp = previous stack pointer */
 
+#ifdef RTEMS_SMP
+       call      SYM(_CPU_SMP_Get_current_processor)
+       sall      $PER_CPU_CONTROL_SIZE_LOG2, eax
+       addl      $SYM(_Per_CPU_Information), eax
+       movl      eax, ebx
+#else
        movl      $SYM(_Per_CPU_Information), ebx
+#endif
 
        /* is this the outermost interrupt? */
        cmpl      $0, PER_CPU_ISR_NEST_LEVEL(ebx)
@@ -159,8 +166,8 @@ ISR_STOP:
 
 nested:
        incl      PER_CPU_ISR_NEST_LEVEL(ebx)  /* one nest level deeper */
-       incl      SYM (_Thread_Dispatch_disable_level) /* disable multitasking 
*/
-
+       incl      PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(ebx) /* disable
+                                                               multitasking */
        /*
         * GCC versions starting with 4.3 no longer place the cld
         * instruction before string operations.  We  need to ensure
@@ -215,7 +222,7 @@ nested:
                                            /* If interrupts are nested, */
                                            /*   then dispatching is disabled */
 
-       decl      SYM (_Thread_Dispatch_disable_level)
+       decl      PER_CPU_THREAD_DISPATCH_DISABLE_LEVEL(ebx)
                                            /* unnest multitasking */
                                            /* Is dispatch disabled */
        jne       .exit                     /* Yes, then exit */
-- 
1.7.7

_______________________________________________
rtems-devel mailing list
[email protected]
http://www.rtems.org/mailman/listinfo/rtems-devel

Reply via email to