diff options
author | patacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679> | 2011-04-06 23:01:06 +0000 |
---|---|---|
committer | patacongo <patacongo@7fd9a85b-ad96-42d3-883c-3090e2eb8679> | 2011-04-06 23:01:06 +0000 |
commit | d8ab80ccef6b4f340bdc54e90f38b7ac98219a6e (patch) | |
tree | a4707d8f1e51d31b1fc2866c63260bfbf99b1f34 /nuttx/arch/arm/src/imx | |
parent | 0b6e9f33f5e5e03930da93c254d596857b3c58b8 (diff) |
current_regs should be volatile; add support for nested interrupts; enable interrupts during syscall processing
git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@3475 7fd9a85b-ad96-42d3-883c-3090e2eb8679
Diffstat (limited to 'nuttx/arch/arm/src/imx')
-rw-r--r-- | nuttx/arch/arm/src/imx/imx_decodeirq.c | 11 | ||||
-rw-r--r-- | nuttx/arch/arm/src/imx/imx_irq.c | 4 |
2 files changed, 10 insertions, 5 deletions
diff --git a/nuttx/arch/arm/src/imx/imx_decodeirq.c b/nuttx/arch/arm/src/imx/imx_decodeirq.c index 96a40fd4a7..55c72ed76f 100644 --- a/nuttx/arch/arm/src/imx/imx_decodeirq.c +++ b/nuttx/arch/arm/src/imx/imx_decodeirq.c @@ -2,7 +2,7 @@ * arch/arm/src/imx/imx_decodeirq.c * arch/arm/src/chip/imx_decodeirq.c * - * Copyright (C) 2009 Gregory Nutt. All rights reserved. + * Copyright (C) 2009, 2011 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without @@ -78,6 +78,7 @@ void up_decodeirq(uint32_t* regs) current_regs = regs; PANIC(OSERR_ERREXCEPTION); #else + uint32_t* savestate; uint32_t regval; int irq; @@ -85,6 +86,7 @@ void up_decodeirq(uint32_t* regs) * current_regs is also used to manage interrupt level context switches. */ + savestate = (uint32_t*)current_regs; current_regs = regs; /* Loop while there are pending interrupts to be processed */ @@ -124,8 +126,11 @@ void up_decodeirq(uint32_t* regs) } while (irq < NR_IRQS); - /* Indicate that we are no longer in an interrupt handler */ + /* Restore the previous value of current_regs. NULL would indicate that + * we are no longer in an interrupt handler. It will be non-NULL if we + * are returning from a nested interrupt. + */ - current_regs = NULL; + current_regs = savestate; #endif } diff --git a/nuttx/arch/arm/src/imx/imx_irq.c b/nuttx/arch/arm/src/imx/imx_irq.c index b346064c54..934a60f0b5 100644 --- a/nuttx/arch/arm/src/imx/imx_irq.c +++ b/nuttx/arch/arm/src/imx/imx_irq.c @@ -2,7 +2,7 @@ * arch/arm/src/imc/imx_irq.c * arch/arm/src/chip/imx_irq.c * - * Copyright (C) 2009 Gregory Nutt. All rights reserved. + * Copyright (C) 2009, 2011 Gregory Nutt. All rights reserved. * Author: Gregory Nutt <spudmonkey@racsa.co.cr> * * Redistribution and use in source and binary forms, with or without @@ -56,7 +56,7 @@ * Public Data ****************************************************************************/ -uint32_t *current_regs; +volatile uint32_t *current_regs; /**************************************************************************** * Private Data |