summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/mips/shared
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2010-06-29 00:38:20 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2010-06-29 00:38:20 +0000
commit5a0b7914c8fb8e3d3846dc0b0747a32100dbef48 (patch)
tree9316db1e38bb6c9d010b524995a59aadfe1f38f6 /c/src/lib/libbsp/mips/shared
parent2010-06-28 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-5a0b7914c8fb8e3d3846dc0b0747a32100dbef48.tar.bz2
2010-06-28 Joel Sherrill <joel.sherrill@oarcorp.com>
PR 1573/cpukit * shared/irq/exception.S: Add a per cpu data structure which contains the information required by RTEMS for each CPU core. This encapsulates information such as thread executing, heir, idle and dispatch needed.
Diffstat (limited to 'c/src/lib/libbsp/mips/shared')
-rw-r--r--c/src/lib/libbsp/mips/shared/irq/exception.S18
1 files changed, 8 insertions, 10 deletions
diff --git a/c/src/lib/libbsp/mips/shared/irq/exception.S b/c/src/lib/libbsp/mips/shared/irq/exception.S
index 611dc2269c..b8ef3e04cc 100644
--- a/c/src/lib/libbsp/mips/shared/irq/exception.S
+++ b/c/src/lib/libbsp/mips/shared/irq/exception.S
@@ -35,6 +35,7 @@
#include <bspopts.h>
#include <rtems/asm.h>
+#include <rtems/score/percpu.h>
#include <rtems/mips/iregdef.h>
#include <rtems/mips/idtcpu.h>
#if BSP_HAS_USC320
@@ -88,9 +89,7 @@
#endif
-EXTERN(_ISR_Nest_level, 4)
EXTERN(_Thread_Dispatch_disable_level,4)
-EXTERN(_Context_Switch_necessary,1)
EXTERN(_ISR_Signals_to_thread_executing,1)
.extern _Thread_Dispatch
.extern _ISR_Vector_table
@@ -236,10 +235,10 @@ _chk_int:
/*
* _ISR_Nest_level++;
*/
- lw t0,_ISR_Nest_level
+ lw t0,ISR_NEST_LEVEL
NOP
add t0,t0,1
- sw t0,_ISR_Nest_level
+ sw t0,ISR_NEST_LEVEL
/*
* _Thread_Dispatch_disable_level++;
*/
@@ -299,10 +298,10 @@ _ISR_Handler_cleanup:
/*
* --_ISR_Nest_level;
*/
- lw t2,_ISR_Nest_level
+ lw t2,ISR_NEST_LEVEL
NOP
add t2,t2,-1
- sw t2,_ISR_Nest_level
+ sw t2,ISR_NEST_LEVEL
/*
* --_Thread_Dispatch_disable_level;
*/
@@ -324,13 +323,12 @@ _ISR_Handler_cleanup:
* restore stack
* #endif
*
- * if ( !_Context_Switch_necessary && !_ISR_Signals_to_thread_executing )
+ * if ( !_Context_Switch_necessary )
* goto the label "exit interrupt (simple case)"
*/
- lb t0,_Context_Switch_necessary
- lb t1,_ISR_Signals_to_thread_executing
+ lb t0,DISPATCH_NEEDED
NOP
- or t0,t0,t1
+ or t0,t0,t0
beq t0,zero,_ISR_Handler_exit
NOP