diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-08-02 16:28:23 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2013-08-09 23:02:45 +0200 |
commit | 4e3b7e26a29fccd3022d0c021c54b51f2d081c1d (patch) | |
tree | dec81e649181c584584d162cb6e08cd3e147b342 | |
parent | bsps/i386: Revert most SMP related changes (diff) | |
download | rtems-4e3b7e26a29fccd3022d0c021c54b51f2d081c1d.tar.bz2 |
bsps/i386: SMP and per-CPU thread dispatch disable
Interrupt support for SMP and the per-CPU thread dispatch disable level.
-rw-r--r-- | 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 f77dd7f0cf..d73c51725d 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 */ |