diff options
author | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2011-04-06 23:01:06 +0000 |
---|---|---|
committer | patacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3> | 2011-04-06 23:01:06 +0000 |
commit | 8285ffad2245a53de14c65913b00dab5568f0afc (patch) | |
tree | a4707d8f1e51d31b1fc2866c63260bfbf99b1f34 /nuttx/arch/arm/src/lpc313x | |
parent | dcea5f0360725d2c25b61eefe9db7b2474b26dd6 (diff) | |
download | px4-nuttx-8285ffad2245a53de14c65913b00dab5568f0afc.tar.gz px4-nuttx-8285ffad2245a53de14c65913b00dab5568f0afc.tar.bz2 px4-nuttx-8285ffad2245a53de14c65913b00dab5568f0afc.zip |
current_regs should be volatile; add support for nested interrupts; enable interrupts during syscall processing
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3475 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/arch/arm/src/lpc313x')
-rwxr-xr-x | nuttx/arch/arm/src/lpc313x/lpc313x_decodeirq.c | 10 | ||||
-rwxr-xr-x | nuttx/arch/arm/src/lpc313x/lpc313x_irq.c | 4 |
2 files changed, 10 insertions, 4 deletions
diff --git a/nuttx/arch/arm/src/lpc313x/lpc313x_decodeirq.c b/nuttx/arch/arm/src/lpc313x/lpc313x_decodeirq.c index 9abaff3c1..119e65c50 100755 --- a/nuttx/arch/arm/src/lpc313x/lpc313x_decodeirq.c +++ b/nuttx/arch/arm/src/lpc313x/lpc313x_decodeirq.c @@ -102,6 +102,8 @@ void up_decodeirq(uint32_t *regs) if ((unsigned)irq < NR_IRQS) { + uint32_t* savestate; + /* Mask and acknowledge the interrupt */ up_maskack_irq(irq); @@ -110,15 +112,19 @@ 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; /* Deliver the IRQ */ irq_dispatch(irq, regs); - /* 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; /* Unmask the last interrupt (global interrupts are still * disabled). diff --git a/nuttx/arch/arm/src/lpc313x/lpc313x_irq.c b/nuttx/arch/arm/src/lpc313x/lpc313x_irq.c index 35ef3e89e..9b7f10e12 100755 --- a/nuttx/arch/arm/src/lpc313x/lpc313x_irq.c +++ b/nuttx/arch/arm/src/lpc313x/lpc313x_irq.c @@ -2,7 +2,7 @@ * arch/arm/src/lpc313x/lpc313x_irq.c * arch/arm/src/chip/lpc313x_irq.c * - * Copyright (C) 2009-2010 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 @@ -64,7 +64,7 @@ * Public Data ****************************************************************************/ -uint32_t *current_regs; +volatile uint32_t *current_regs; /**************************************************************************** * Private Data |