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/cortexm3/up_svcall.c | |
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/cortexm3/up_svcall.c')
-rw-r--r-- | nuttx/arch/arm/src/cortexm3/up_svcall.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/nuttx/arch/arm/src/cortexm3/up_svcall.c b/nuttx/arch/arm/src/cortexm3/up_svcall.c index ec67617a7..f7e55a98b 100644 --- a/nuttx/arch/arm/src/cortexm3/up_svcall.c +++ b/nuttx/arch/arm/src/cortexm3/up_svcall.c @@ -57,7 +57,20 @@ /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +/* Configuration ************************************************************/ + +#undef SYSCALL_INTERRUPTIBLE +#if defined(CONFIG_NUTTX_KERNEL) +# if CONFIG_ARCH_INTERRUPTSTACK > 3 +# warning "CONFIG_ARCH_INTERRUPTSTACK and CONFIG_NUTTX_KERNEL are incompatible" +# warning "options as currently implemented. Interrupts will have to be disabled" +# warning "during SYScall processing to avoid un-handled nested interrupts" +# else +# define SYSCALL_INTERRUPTIBLE 1 +# endif +#endif +/* Debug ********************************************************************/ /* Debug output from this file may interfere with context switching! To get * debug output you must enabled the following in your NuttX configuration: * @@ -116,6 +129,12 @@ static inline void dispatch_syscall(uint32_t *regs) int index = cmd - CONFIG_SYS_RESERVED; + /* Enable interrupts while the SYSCALL executes */ + +#ifdef SYSCALL_INTERRUPTIBLE + irqenable(); +#endif + /* Call the correct stub for each SYS call, based on the number of parameters */ svcdbg("Calling stub%d at %p\n", index, g_stubloopkup[index].stub0); @@ -177,6 +196,10 @@ static inline void dispatch_syscall(uint32_t *regs) cmd, g_stubnparms[index]); break; } + +#ifdef SYSCALL_INTERRUPTIBLE + irqdisable(); +#endif } /* Set up the return vaue. First, check if a context switch occurred. |