summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c/src/lib/libbsp/i386/ChangeLog12
-rw-r--r--c/src/lib/libbsp/i386/shared/irq/irq_asm.S13
2 files changed, 23 insertions, 2 deletions
diff --git a/c/src/lib/libbsp/i386/ChangeLog b/c/src/lib/libbsp/i386/ChangeLog
index 0ee055b220..57ac17391a 100644
--- a/c/src/lib/libbsp/i386/ChangeLog
+++ b/c/src/lib/libbsp/i386/ChangeLog
@@ -1,3 +1,15 @@
+2011-03-16 Jennifer Averett <jennifer.averett@OARcorp.com>
+
+ PR 1729/cpukit
+ * shared/irq/irq_asm.S: Add next step in SMP support. This adds an
+ allocated array of the Per_CPU structures to support multiple cpus vs
+ a single instance of the structure which is still used if SMP support
+ is disabled. Configuration support is also added to explicitly enable
+ or disable SMP. But SMP can only be enabled for the CPUs which will
+ support it initially -- SPARC and i386. With the stub BSP support, a
+ BSP can be run as a single core SMP system from an RTEMS data
+ structure standpoint.
+
2011-03-01 Ralf Corsépius <ralf.corsepius@rtems.org>
* acinclude.m4: Regenerate (Reflect the i386ex and tx_386ex BSP have
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 8634a25589..d899f47448 100644
--- a/c/src/lib/libbsp/i386/shared/irq/irq_asm.S
+++ b/c/src/lib/libbsp/i386/shared/irq/irq_asm.S
@@ -4,6 +4,9 @@
*
* Copyright (C) 1998 valette@crf.canon.fr
*
+ * COPYRIGHT (c) 1989-2011.
+ * On-Line Applications Research Corporation (OAR).
+ *
* The license and distribution terms for this file may be
* found in found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE.
@@ -12,6 +15,7 @@
*/
#include <rtems/asm.h>
+#include <rtems/system.h>
#include <bspopts.h>
#include <bsp/irq_asm.h>
#include <rtems/score/cpu.h>
@@ -140,8 +144,13 @@ PUBLIC (ISR_STOP)
ISR_STOP:
.check_stack_switch:
movl esp, ebp /* ebp = previous stack pointer */
-
- movl $SYM(_Per_CPU_Information), ebx
+#if defined(RTEMS_SMP) && defined(BSP_HAS_SMP)
+ movl $SYM(_Per_CPU_Information_p), ebx
+ call SYM(bsp_smp_processor_id)
+ mov (ebx,eax,4), ebx
+#else
+ movl $SYM(_Per_CPU_Information), ebx
+#endif
/* is this the outermost interrupt? */
cmpl $0, PER_CPU_ISR_NEST_LEVEL(ebx)