Philippe Gerum wrote:
 > On Fri, 2006-08-18 at 14:36 +0200, Philippe Gerum wrote:
 > > On Fri, 2006-08-18 at 13:16 +0200, Gilles Chanteperdrix wrote:
 > > > Philippe Gerum wrote:
 > > >  > I'd rather keep the number of obscure conditional macros as low as
 > > >  > possible; we should actually try to reduce them since we have a 
 > > > growing
 > > >  > number of real and pseudo-archs to support, and those macros tend to
 > > >  > obfuscate the generic code.
 > > >  > 
 > > >  > In the same vein, is there anything we could use in the compatible 
 > > > Adeos
 > > >  > patch that would unambiguously identify the presence of such support
 > > >  > without resorting to yet-another-macro like 
 > > > IPIPE_HAVE_SHARED_TIMER_IRQ?
 > > > 
 > > > We could decide that ipipe_timer_irq_p() must be implemented as a macro,
 > > > and use #ifdef ipipe_timer_irq_p but I thought that #ifdef
 > > > IPIPE_HAVE_SHARED_TIMER_IRQ was easier to understand.
 > > > 
 > > 
 > > It is, but the point is that we should not define a normalized
 > > interface; older ARM patches are obsoleted by the very existence of the
 > > new one adding a required feature for PXA.
 > 
 > AT91.
 > 
 > >  Therefore, at some point in
 > > time, we are going to deprecate them, removing the conditional from the
 > > Xenomai codebase. In other words, this code is aimed at transitioning
 > > internally between two Adeos patch series, not at providing a stable
 > > interface.

Here is a new version of the patch.

-- 


                                            Gilles Chanteperdrix.
Index: include/asm-generic/hal.h
===================================================================
--- include/asm-generic/hal.h   (revision 1451)
+++ include/asm-generic/hal.h   (working copy)
@@ -679,6 +679,15 @@
 
 #endif /* CONFIG_IPIPE_TRACE */
 
+#ifdef ipipe_timer_irq_p
+/* Timer IRQ is shared. */
+#define rthal_timer_irq_p()         ipipe_timer_irq_p()
+#define rthal_mark_root_timer_irq() ipipe_mark_root_timer_irq()
+#else /* !IPIPE_SHARED_TIMER_IRQ */
+#define rthal_timer_irq_p()         1
+#define rthal_mark_root_timer_irq() do { } while(0)
+#endif /* IPIPE_SHARED_TIMER_IRQ */
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
Index: include/asm-generic/system.h
===================================================================
--- include/asm-generic/system.h        (revision 1451)
+++ include/asm-generic/system.h        (working copy)
@@ -487,4 +487,6 @@
 #define xnarch_post_graph(obj,state)
 #define xnarch_post_graph_if(obj,state,cond)
 
+#define xnarch_timer_irq_p()         rthal_timer_irq_p()
+
 #endif /* !_XENO_ASM_GENERIC_SYSTEM_H */
Index: include/asm-arm/bits/intr.h
===================================================================
--- include/asm-arm/bits/intr.h (revision 1451)
+++ include/asm-arm/bits/intr.h (working copy)
@@ -27,6 +27,7 @@
 
 static inline void xnarch_relay_tick(void)
 {
+       rthal_mark_root_timer_irq();
        rthal_irq_host_pend(RTHAL_TIMER_IRQ);
 }
 
Index: ksrc/skins/vxworks/sysLib.c
===================================================================
--- ksrc/skins/vxworks/sysLib.c (revision 1451)
+++ ksrc/skins/vxworks/sysLib.c (working copy)
@@ -24,19 +24,20 @@
 
 static wind_tick_handler_t tick_handler;
 static long tick_handler_arg;
+static int tick_status [XNARCH_NR_CPUS];
 
 void tickAnnounce(void)
 {
        if (tick_handler != NULL)
                tick_handler(tick_handler_arg);
 
-       xnpod_announce_tick(&nkclock);
+       tick_status[xnarch_current_cpu()] = xnpod_announce_tick(&nkclock);
 }
 
 static int __tickAnnounce(xnintr_t *intr)
 {
        tickAnnounce();
-       return XN_ISR_HANDLED | XN_ISR_NOENABLE;
+       return tick_status[xnarch_current_cpu()];
 }
 
 int wind_sysclk_init(u_long init_rate)
Index: ksrc/nucleus/pod.c
===================================================================
--- ksrc/nucleus/pod.c  (revision 1451)
+++ ksrc/nucleus/pod.c  (working copy)
@@ -3249,6 +3249,9 @@
 {
        xnsched_t *sched;
 
+       if (!xnarch_timer_irq_p())
+               return XN_ISR_NONE | XN_ISR_NOENABLE | XN_ISR_PROPAGATE;
+       
        sched = xnpod_current_sched();
 
        xnlock_get(&nklock);
_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to