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

Reply via email to