summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src/common/up_doirq.c
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2009-05-13 14:29:22 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2009-05-13 14:29:22 +0000
commit27bee603a196dd9049de194777cc3be0d7514075 (patch)
tree0ae450bf5ef0895ccc80cc3732f05a284c59a3de /nuttx/arch/arm/src/common/up_doirq.c
parent11afe6bb048bff910f4345f8f344c5172a9f4ee8 (diff)
downloadpx4-nuttx-27bee603a196dd9049de194777cc3be0d7514075.tar.gz
px4-nuttx-27bee603a196dd9049de194777cc3be0d7514075.tar.bz2
px4-nuttx-27bee603a196dd9049de194777cc3be0d7514075.zip
lm3s6918 update
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@1775 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/arch/arm/src/common/up_doirq.c')
-rw-r--r--nuttx/arch/arm/src/common/up_doirq.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/nuttx/arch/arm/src/common/up_doirq.c b/nuttx/arch/arm/src/common/up_doirq.c
index 293b9fdc4..b863ec0c5 100644
--- a/nuttx/arch/arm/src/common/up_doirq.c
+++ b/nuttx/arch/arm/src/common/up_doirq.c
@@ -1,7 +1,7 @@
/****************************************************************************
* arch/arm/src/common/up_doirq.c
*
- * Copyright (C) 2007, 2008 Gregory Nutt. All rights reserved.
+ * Copyright (C) 2007-2009 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr>
*
* Redistribution and use in source and binary forms, with or without
@@ -66,7 +66,7 @@
* Public Functions
****************************************************************************/
-void up_doirq(int irq, uint32* regs)
+uint32 *up_doirq(int irq, uint32* regs)
{
up_ledon(LED_INIRQ);
#ifdef CONFIG_SUPPRESS_INTERRUPTS
@@ -89,6 +89,13 @@ void up_doirq(int irq, uint32* regs)
irq_dispatch(irq, regs);
+ /* If a context switch occurred while processing the interrupt
+ * then current_regs may have value (depending upon the implementaton
+ * of context switching for te particular chip.
+ */
+
+ regs = current_regs;
+
/* Indicate that we are no long in an interrupt handler */
current_regs = NULL;
@@ -101,4 +108,5 @@ void up_doirq(int irq, uint32* regs)
}
up_ledoff(LED_INIRQ);
#endif
+ return regs;
}