[Xenomai-git] Philippe Gerum : blackfin: upgrade I-pipe support to 2.6.34-blackfin-1. 15-01, 2.6.35.7-blackfin-1.15-01

2010-10-07 Thread GIT version control
Module: xenomai-head
Branch: master
Commit: 7b7054e59e50d44bffc6e0aa52af6eb737ea7cc7
URL:
http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=7b7054e59e50d44bffc6e0aa52af6eb737ea7cc7

Author: Philippe Gerum 
Date:   Tue Oct  5 15:47:58 2010 +0200

blackfin: upgrade I-pipe support to 2.6.34-blackfin-1.15-01, 
2.6.35.7-blackfin-1.15-01

---

 ...h => adeos-ipipe-2.6.34-blackfin-1.15-01.patch} |  186 
 ...=> adeos-ipipe-2.6.35.7-blackfin-1.15-01.patch} |  464 
 2 files changed, 479 insertions(+), 171 deletions(-)

diff --git 
a/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch 
b/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.15-01.patch
similarity index 98%
rename from ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch
rename to ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.15-01.patch
index 1668422..0af5f58 100644
--- a/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch
+++ b/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.15-01.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..4530dfa 100644
+index d3b4044..70b409f 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..4530dfa 100644
 +#include 
  
 -#define IPIPE_ARCH_STRING "1.12-00"
-+#define IPIPE_ARCH_STRING "1.14-02"
++#define IPIPE_ARCH_STRING "1.15-01"
  #define IPIPE_MAJOR_NUMBER1
 -#define IPIPE_MINOR_NUMBER12
 -#define IPIPE_PATCH_NUMBER0
-+#define IPIPE_MINOR_NUMBER14
-+#define IPIPE_PATCH_NUMBER2
++#define IPIPE_MINOR_NUMBER15
++#define IPIPE_PATCH_NUMBER1
  
  #ifdef CONFIG_SMP
  #error "I-pipe/blackfin: SMP not implemented"
@@ -36,7 +36,7 @@ index d3b4044..4530dfa 100644
  
  #define __ipipe_sync_pipeline  ___ipipe_sync_pipeline
 -void ___ipipe_sync_pipeline(unsigned long syncmask);
-+void ___ipipe_sync_pipeline(int dovirt);
++void ___ipipe_sync_pipeline(void);
  
  void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs);
  
@@ -136,7 +136,7 @@ index 813a1af..325e532 100644
} while (0)
  
 diff --git a/arch/blackfin/kernel/ipipe.c b/arch/blackfin/kernel/ipipe.c
-index 1a496cd..d953572 100644
+index 1a496cd..aa96aa2 100644
 --- a/arch/blackfin/kernel/ipipe.c
 +++ b/arch/blackfin/kernel/ipipe.c
 @@ -154,7 +154,7 @@ void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs)
@@ -148,7 +148,7 @@ index 1a496cd..d953572 100644
goto out;
  
__ipipe_walk_pipeline(head);
-@@ -185,11 +185,13 @@ void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, 
unsigned irq)
+@@ -185,25 +185,21 @@ void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, 
unsigned irq)
  }
  EXPORT_SYMBOL(__ipipe_disable_irqdesc);
  
@@ -164,22 +164,27 @@ index 1a496cd..d953572 100644
 +  WARN_ON_ONCE(irqs_disabled_hw());
  
/*
-* We need to run the IRQ tail hook whenever we don't
-@@ -197,12 +199,9 @@ int __ipipe_syscall_root(struct pt_regs *regs)
-* important operations might be pending there (e.g. Xenomai
-* deferred rescheduling).
+-   * We need to run the IRQ tail hook whenever we don't
+-   * propagate a syscall to higher domains, because we know that
+-   * important operations might be pending there (e.g. Xenomai
+-   * deferred rescheduling).
++   * We need to run the IRQ tail hook each time we intercept a
++   * syscall, because we know that important operations might be
++   * pending there (e.g. Xenomai deferred rescheduling).
 */
 -
-   if (regs->orig_p0 < NR_syscalls) {
+-  if (regs->orig_p0 < NR_syscalls) {
 -  void (*hook)(void) = (void (*)(void))__ipipe_irq_tail_hook;
-+  hook = (__typeof__(hook))__ipipe_irq_tail_hook;
-   hook();
+-  hook();
 -  if ((current->flags & PF_EVNOTIFY) == 0)
 -  return 0;
-   }
+-  }
++  hook = (__typeof__(hook))__ipipe_irq_tail_hook;
++  hook();
  
/*
-@@ -214,23 +213,32 @@ int __ipipe_syscall_root(struct pt_regs *regs)
+* This routine either returns:
+@@ -214,23 +210,32 @@ int __ipipe_syscall_root(struct pt_regs *regs)
 * tail work has to be performed (for handling signals etc).
 */
  
@@ -214,7 +219,7 @@ index 1a496cd..d953572 100644
 +  else {
 +  p = ipipe_root_cpudom_ptr();
 +  if (__ipipe_ipending_p(p))
-+  __ipipe_sync_pipeline(IPIPE_IRQ_DOVIRT);
++  __ipipe_sync_pipeline();
 +  }
  
 -  local_irq_restore_hw(flags);
@@ -222,7 +227,7 @@ index 1a496cd..d953572 100644
  
return -ret;
  }
-@@ -289,6 +297,7 @@ int ipipe_trigger_irq(unsigned irq)
+@@ -289,6 +294,7 @@ int ipipe_trigger_irq(unsigned irq)
  asmlinkage void __ipipe_sync_root(void)
  {
   

[Xenomai-git] Philippe Gerum : blackfin: upgrade I-pipe support to 2.6.34-blackfin-1. 15-01, 2.6.35.7-blackfin-1.15-01

2010-10-06 Thread GIT version control
Module: xenomai-2.5
Branch: master
Commit: 7b7054e59e50d44bffc6e0aa52af6eb737ea7cc7
URL:
http://git.xenomai.org/?p=xenomai-2.5.git;a=commit;h=7b7054e59e50d44bffc6e0aa52af6eb737ea7cc7

Author: Philippe Gerum 
Date:   Tue Oct  5 15:47:58 2010 +0200

blackfin: upgrade I-pipe support to 2.6.34-blackfin-1.15-01, 
2.6.35.7-blackfin-1.15-01

---

 ...h => adeos-ipipe-2.6.34-blackfin-1.15-01.patch} |  186 
 ...=> adeos-ipipe-2.6.35.7-blackfin-1.15-01.patch} |  464 
 2 files changed, 479 insertions(+), 171 deletions(-)

diff --git 
a/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch 
b/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.15-01.patch
similarity index 98%
rename from ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch
rename to ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.15-01.patch
index 1668422..0af5f58 100644
--- a/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch
+++ b/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.15-01.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..4530dfa 100644
+index d3b4044..70b409f 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..4530dfa 100644
 +#include 
  
 -#define IPIPE_ARCH_STRING "1.12-00"
-+#define IPIPE_ARCH_STRING "1.14-02"
++#define IPIPE_ARCH_STRING "1.15-01"
  #define IPIPE_MAJOR_NUMBER1
 -#define IPIPE_MINOR_NUMBER12
 -#define IPIPE_PATCH_NUMBER0
-+#define IPIPE_MINOR_NUMBER14
-+#define IPIPE_PATCH_NUMBER2
++#define IPIPE_MINOR_NUMBER15
++#define IPIPE_PATCH_NUMBER1
  
  #ifdef CONFIG_SMP
  #error "I-pipe/blackfin: SMP not implemented"
@@ -36,7 +36,7 @@ index d3b4044..4530dfa 100644
  
  #define __ipipe_sync_pipeline  ___ipipe_sync_pipeline
 -void ___ipipe_sync_pipeline(unsigned long syncmask);
-+void ___ipipe_sync_pipeline(int dovirt);
++void ___ipipe_sync_pipeline(void);
  
  void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs);
  
@@ -136,7 +136,7 @@ index 813a1af..325e532 100644
} while (0)
  
 diff --git a/arch/blackfin/kernel/ipipe.c b/arch/blackfin/kernel/ipipe.c
-index 1a496cd..d953572 100644
+index 1a496cd..aa96aa2 100644
 --- a/arch/blackfin/kernel/ipipe.c
 +++ b/arch/blackfin/kernel/ipipe.c
 @@ -154,7 +154,7 @@ void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs)
@@ -148,7 +148,7 @@ index 1a496cd..d953572 100644
goto out;
  
__ipipe_walk_pipeline(head);
-@@ -185,11 +185,13 @@ void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, 
unsigned irq)
+@@ -185,25 +185,21 @@ void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, 
unsigned irq)
  }
  EXPORT_SYMBOL(__ipipe_disable_irqdesc);
  
@@ -164,22 +164,27 @@ index 1a496cd..d953572 100644
 +  WARN_ON_ONCE(irqs_disabled_hw());
  
/*
-* We need to run the IRQ tail hook whenever we don't
-@@ -197,12 +199,9 @@ int __ipipe_syscall_root(struct pt_regs *regs)
-* important operations might be pending there (e.g. Xenomai
-* deferred rescheduling).
+-   * We need to run the IRQ tail hook whenever we don't
+-   * propagate a syscall to higher domains, because we know that
+-   * important operations might be pending there (e.g. Xenomai
+-   * deferred rescheduling).
++   * We need to run the IRQ tail hook each time we intercept a
++   * syscall, because we know that important operations might be
++   * pending there (e.g. Xenomai deferred rescheduling).
 */
 -
-   if (regs->orig_p0 < NR_syscalls) {
+-  if (regs->orig_p0 < NR_syscalls) {
 -  void (*hook)(void) = (void (*)(void))__ipipe_irq_tail_hook;
-+  hook = (__typeof__(hook))__ipipe_irq_tail_hook;
-   hook();
+-  hook();
 -  if ((current->flags & PF_EVNOTIFY) == 0)
 -  return 0;
-   }
+-  }
++  hook = (__typeof__(hook))__ipipe_irq_tail_hook;
++  hook();
  
/*
-@@ -214,23 +213,32 @@ int __ipipe_syscall_root(struct pt_regs *regs)
+* This routine either returns:
+@@ -214,23 +210,32 @@ int __ipipe_syscall_root(struct pt_regs *regs)
 * tail work has to be performed (for handling signals etc).
 */
  
@@ -214,7 +219,7 @@ index 1a496cd..d953572 100644
 +  else {
 +  p = ipipe_root_cpudom_ptr();
 +  if (__ipipe_ipending_p(p))
-+  __ipipe_sync_pipeline(IPIPE_IRQ_DOVIRT);
++  __ipipe_sync_pipeline();
 +  }
  
 -  local_irq_restore_hw(flags);
@@ -222,7 +227,7 @@ index 1a496cd..d953572 100644
  
return -ret;
  }
-@@ -289,6 +297,7 @@ int ipipe_trigger_irq(unsigned irq)
+@@ -289,6 +294,7 @@ int ipipe_trigger_irq(unsigned irq)
  asmlinkage void __ipipe_sync_root(void)
  {
v

[Xenomai-git] Philippe Gerum : blackfin: upgrade I-pipe support to 2.6.34-blackfin-1. 15-01, 2.6.35.7-blackfin-1.15-01

2010-10-05 Thread GIT version control
Module: xenomai-rpm
Branch: for-upstream
Commit: 7b7054e59e50d44bffc6e0aa52af6eb737ea7cc7
URL:
http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=7b7054e59e50d44bffc6e0aa52af6eb737ea7cc7

Author: Philippe Gerum 
Date:   Tue Oct  5 15:47:58 2010 +0200

blackfin: upgrade I-pipe support to 2.6.34-blackfin-1.15-01, 
2.6.35.7-blackfin-1.15-01

---

 ...h => adeos-ipipe-2.6.34-blackfin-1.15-01.patch} |  186 
 ...=> adeos-ipipe-2.6.35.7-blackfin-1.15-01.patch} |  464 
 2 files changed, 479 insertions(+), 171 deletions(-)

diff --git 
a/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch 
b/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.15-01.patch
similarity index 98%
rename from ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch
rename to ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.15-01.patch
index 1668422..0af5f58 100644
--- a/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch
+++ b/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.15-01.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..4530dfa 100644
+index d3b4044..70b409f 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..4530dfa 100644
 +#include 
  
 -#define IPIPE_ARCH_STRING "1.12-00"
-+#define IPIPE_ARCH_STRING "1.14-02"
++#define IPIPE_ARCH_STRING "1.15-01"
  #define IPIPE_MAJOR_NUMBER1
 -#define IPIPE_MINOR_NUMBER12
 -#define IPIPE_PATCH_NUMBER0
-+#define IPIPE_MINOR_NUMBER14
-+#define IPIPE_PATCH_NUMBER2
++#define IPIPE_MINOR_NUMBER15
++#define IPIPE_PATCH_NUMBER1
  
  #ifdef CONFIG_SMP
  #error "I-pipe/blackfin: SMP not implemented"
@@ -36,7 +36,7 @@ index d3b4044..4530dfa 100644
  
  #define __ipipe_sync_pipeline  ___ipipe_sync_pipeline
 -void ___ipipe_sync_pipeline(unsigned long syncmask);
-+void ___ipipe_sync_pipeline(int dovirt);
++void ___ipipe_sync_pipeline(void);
  
  void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs);
  
@@ -136,7 +136,7 @@ index 813a1af..325e532 100644
} while (0)
  
 diff --git a/arch/blackfin/kernel/ipipe.c b/arch/blackfin/kernel/ipipe.c
-index 1a496cd..d953572 100644
+index 1a496cd..aa96aa2 100644
 --- a/arch/blackfin/kernel/ipipe.c
 +++ b/arch/blackfin/kernel/ipipe.c
 @@ -154,7 +154,7 @@ void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs)
@@ -148,7 +148,7 @@ index 1a496cd..d953572 100644
goto out;
  
__ipipe_walk_pipeline(head);
-@@ -185,11 +185,13 @@ void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, 
unsigned irq)
+@@ -185,25 +185,21 @@ void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, 
unsigned irq)
  }
  EXPORT_SYMBOL(__ipipe_disable_irqdesc);
  
@@ -164,22 +164,27 @@ index 1a496cd..d953572 100644
 +  WARN_ON_ONCE(irqs_disabled_hw());
  
/*
-* We need to run the IRQ tail hook whenever we don't
-@@ -197,12 +199,9 @@ int __ipipe_syscall_root(struct pt_regs *regs)
-* important operations might be pending there (e.g. Xenomai
-* deferred rescheduling).
+-   * We need to run the IRQ tail hook whenever we don't
+-   * propagate a syscall to higher domains, because we know that
+-   * important operations might be pending there (e.g. Xenomai
+-   * deferred rescheduling).
++   * We need to run the IRQ tail hook each time we intercept a
++   * syscall, because we know that important operations might be
++   * pending there (e.g. Xenomai deferred rescheduling).
 */
 -
-   if (regs->orig_p0 < NR_syscalls) {
+-  if (regs->orig_p0 < NR_syscalls) {
 -  void (*hook)(void) = (void (*)(void))__ipipe_irq_tail_hook;
-+  hook = (__typeof__(hook))__ipipe_irq_tail_hook;
-   hook();
+-  hook();
 -  if ((current->flags & PF_EVNOTIFY) == 0)
 -  return 0;
-   }
+-  }
++  hook = (__typeof__(hook))__ipipe_irq_tail_hook;
++  hook();
  
/*
-@@ -214,23 +213,32 @@ int __ipipe_syscall_root(struct pt_regs *regs)
+* This routine either returns:
+@@ -214,23 +210,32 @@ int __ipipe_syscall_root(struct pt_regs *regs)
 * tail work has to be performed (for handling signals etc).
 */
  
@@ -214,7 +219,7 @@ index 1a496cd..d953572 100644
 +  else {
 +  p = ipipe_root_cpudom_ptr();
 +  if (__ipipe_ipending_p(p))
-+  __ipipe_sync_pipeline(IPIPE_IRQ_DOVIRT);
++  __ipipe_sync_pipeline();
 +  }
  
 -  local_irq_restore_hw(flags);
@@ -222,7 +227,7 @@ index 1a496cd..d953572 100644
  
return -ret;
  }
-@@ -289,6 +297,7 @@ int ipipe_trigger_irq(unsigned irq)
+@@ -289,6 +294,7 @@ int ipipe_trigger_irq(unsigned irq)
  asmlinkage void __ipipe_sync_root(void)
  {
   

[Xenomai-git] Philippe Gerum : blackfin: upgrade I-pipe support to 2.6.34-blackfin-1. 15-01, 2.6.35.7-blackfin-1.15-01

2010-10-05 Thread GIT version control
Module: xenomai-rpm
Branch: for-upstream
Commit: cfe09a7e8182f2ac6d5800a34b991b068384d880
URL:
http://git.xenomai.org/?p=xenomai-rpm.git;a=commit;h=cfe09a7e8182f2ac6d5800a34b991b068384d880

Author: Philippe Gerum 
Date:   Tue Oct  5 15:47:58 2010 +0200

blackfin: upgrade I-pipe support to 2.6.34-blackfin-1.15-01, 
2.6.35.7-blackfin-1.15-01

---

 ...h => adeos-ipipe-2.6.34-blackfin-1.15-01.patch} |  186 
 ...=> adeos-ipipe-2.6.35.7-blackfin-1.15-01.patch} |  464 
 2 files changed, 479 insertions(+), 171 deletions(-)

diff --git 
a/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch 
b/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.15-01.patch
similarity index 98%
rename from ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch
rename to ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.15-01.patch
index 1668422..0af5f58 100644
--- a/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.14-02.patch
+++ b/ksrc/arch/blackfin/patches/adeos-ipipe-2.6.34-blackfin-1.15-01.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..4530dfa 100644
+index d3b4044..70b409f 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..4530dfa 100644
 +#include 
  
 -#define IPIPE_ARCH_STRING "1.12-00"
-+#define IPIPE_ARCH_STRING "1.14-02"
++#define IPIPE_ARCH_STRING "1.15-01"
  #define IPIPE_MAJOR_NUMBER1
 -#define IPIPE_MINOR_NUMBER12
 -#define IPIPE_PATCH_NUMBER0
-+#define IPIPE_MINOR_NUMBER14
-+#define IPIPE_PATCH_NUMBER2
++#define IPIPE_MINOR_NUMBER15
++#define IPIPE_PATCH_NUMBER1
  
  #ifdef CONFIG_SMP
  #error "I-pipe/blackfin: SMP not implemented"
@@ -36,7 +36,7 @@ index d3b4044..4530dfa 100644
  
  #define __ipipe_sync_pipeline  ___ipipe_sync_pipeline
 -void ___ipipe_sync_pipeline(unsigned long syncmask);
-+void ___ipipe_sync_pipeline(int dovirt);
++void ___ipipe_sync_pipeline(void);
  
  void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs);
  
@@ -136,7 +136,7 @@ index 813a1af..325e532 100644
} while (0)
  
 diff --git a/arch/blackfin/kernel/ipipe.c b/arch/blackfin/kernel/ipipe.c
-index 1a496cd..d953572 100644
+index 1a496cd..aa96aa2 100644
 --- a/arch/blackfin/kernel/ipipe.c
 +++ b/arch/blackfin/kernel/ipipe.c
 @@ -154,7 +154,7 @@ void __ipipe_handle_irq(unsigned irq, struct pt_regs *regs)
@@ -148,7 +148,7 @@ index 1a496cd..d953572 100644
goto out;
  
__ipipe_walk_pipeline(head);
-@@ -185,11 +185,13 @@ void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, 
unsigned irq)
+@@ -185,25 +185,21 @@ void __ipipe_disable_irqdesc(struct ipipe_domain *ipd, 
unsigned irq)
  }
  EXPORT_SYMBOL(__ipipe_disable_irqdesc);
  
@@ -164,22 +164,27 @@ index 1a496cd..d953572 100644
 +  WARN_ON_ONCE(irqs_disabled_hw());
  
/*
-* We need to run the IRQ tail hook whenever we don't
-@@ -197,12 +199,9 @@ int __ipipe_syscall_root(struct pt_regs *regs)
-* important operations might be pending there (e.g. Xenomai
-* deferred rescheduling).
+-   * We need to run the IRQ tail hook whenever we don't
+-   * propagate a syscall to higher domains, because we know that
+-   * important operations might be pending there (e.g. Xenomai
+-   * deferred rescheduling).
++   * We need to run the IRQ tail hook each time we intercept a
++   * syscall, because we know that important operations might be
++   * pending there (e.g. Xenomai deferred rescheduling).
 */
 -
-   if (regs->orig_p0 < NR_syscalls) {
+-  if (regs->orig_p0 < NR_syscalls) {
 -  void (*hook)(void) = (void (*)(void))__ipipe_irq_tail_hook;
-+  hook = (__typeof__(hook))__ipipe_irq_tail_hook;
-   hook();
+-  hook();
 -  if ((current->flags & PF_EVNOTIFY) == 0)
 -  return 0;
-   }
+-  }
++  hook = (__typeof__(hook))__ipipe_irq_tail_hook;
++  hook();
  
/*
-@@ -214,23 +213,32 @@ int __ipipe_syscall_root(struct pt_regs *regs)
+* This routine either returns:
+@@ -214,23 +210,32 @@ int __ipipe_syscall_root(struct pt_regs *regs)
 * tail work has to be performed (for handling signals etc).
 */
  
@@ -214,7 +219,7 @@ index 1a496cd..d953572 100644
 +  else {
 +  p = ipipe_root_cpudom_ptr();
 +  if (__ipipe_ipending_p(p))
-+  __ipipe_sync_pipeline(IPIPE_IRQ_DOVIRT);
++  __ipipe_sync_pipeline();
 +  }
  
 -  local_irq_restore_hw(flags);
@@ -222,7 +227,7 @@ index 1a496cd..d953572 100644
  
return -ret;
  }
-@@ -289,6 +297,7 @@ int ipipe_trigger_irq(unsigned irq)
+@@ -289,6 +294,7 @@ int ipipe_trigger_irq(unsigned irq)
  asmlinkage void __ipipe_sync_root(void)
  {