Module: xenomai-rpm Branch: for-upstream Commit: 31ad353ca245afcfa3ff2b34bffb30c5172a79f1 URL: http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=31ad353ca245afcfa3ff2b34bffb30c5172a79f1
Author: Philippe Gerum <r...@xenomai.org> Date: Thu Jun 17 23:56:54 2010 +0200 blackfin: upgrade I-pipe support to 2.6.34-blackfin-1.14-02 --- ...h => adeos-ipipe-2.6.34-blackfin-1.14-02.patch} | 24 ++++++++++++------- 1 files changed, 15 insertions(+), 9 deletions(-) diff --git a/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-01.patch b/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch similarity index 99% rename from ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-01.patch rename to ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch index d62e225..1668422 100644 --- a/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-01.patch +++ b/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch @@ -12,7 +12,7 @@ index c078849..799b1c0 100644 choice diff --git a/arch/blackfin/include/asm/ipipe.h b/arch/blackfin/include/asm/ipipe.h -index d3b4044..331ef0b 100644 +index d3b4044..4530dfa 100644 --- a/arch/blackfin/include/asm/ipipe.h +++ b/arch/blackfin/include/asm/ipipe.h @@ -34,11 +34,12 @@ @@ -22,12 +22,12 @@ index d3b4044..331ef0b 100644 +#include <asm/bitsperlong.h> -#define IPIPE_ARCH_STRING "1.12-00" -+#define IPIPE_ARCH_STRING "1.14-01" ++#define IPIPE_ARCH_STRING "1.14-02" #define IPIPE_MAJOR_NUMBER 1 -#define IPIPE_MINOR_NUMBER 12 -#define IPIPE_PATCH_NUMBER 0 +#define IPIPE_MINOR_NUMBER 14 -+#define IPIPE_PATCH_NUMBER 1 ++#define IPIPE_PATCH_NUMBER 2 #ifdef CONFIG_SMP #error "I-pipe/blackfin: SMP not implemented" @@ -256,7 +256,7 @@ index 1a496cd..d953572 100644 void __ipipe_disable_root_irqs_hw(void) diff --git a/arch/blackfin/mach-common/ints-priority.c b/arch/blackfin/mach-common/ints-priority.c -index 7ad8878..33f1253 100644 +index 7ad8878..8400131 100644 --- a/arch/blackfin/mach-common/ints-priority.c +++ b/arch/blackfin/mach-common/ints-priority.c @@ -15,6 +15,7 @@ @@ -294,17 +294,23 @@ index 7ad8878..33f1253 100644 if (likely(vec == EVT_IVTMR_P)) irq = IRQ_CORETMR; -@@ -1436,6 +1436,18 @@ asmlinkage int __ipipe_grab_irq(int vec, struct pt_regs *regs) +@@ -1436,6 +1436,24 @@ asmlinkage int __ipipe_grab_irq(int vec, struct pt_regs *regs) __ipipe_handle_irq(irq, regs); ipipe_trace_irq_exit(irq); + if (user_mode(regs) && ++ !ipipe_test_foreign_stack() && + (current->ipipe_flags & PF_EVTRET) != 0) { + /* -+ * Testing for user_regs() eliminates foreign stack -+ * contexts, including from careless domains which did -+ * not set the foreign stack bit (foreign stacks are -+ * always kernel-based). ++ * Testing for user_regs() does NOT fully eliminate ++ * foreign stack contexts, because of the forged ++ * interrupt returns we do through ++ * __ipipe_call_irqtail. In that case, we might have ++ * preempted a foreign stack context in a high ++ * priority domain, with a single interrupt level now ++ * pending after the irqtail unwinding is done. In ++ * which case user_mode() is now true, and the event ++ * gets dispatched spuriously. + */ + current->ipipe_flags &= ~PF_EVTRET; + __ipipe_dispatch_event(IPIPE_EVENT_RETURN, regs); _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git