On Tue, 2009-11-10 at 12:33 +0100, Jan Kiszka wrote: > Philippe Gerum wrote: > > On Tue, 2009-11-10 at 11:43 +0100, Jan Kiszka wrote: > [...] > >> Oh, *_hw_smp is new, isn't it? Do we need to wrap it for older I-pipes? > > > > Yes, it was introduced to solve the SMP migration issue actually, so we > > need a wrapper. The advantage of having that wrapper instead of going > > for inlined #ifdef CONFIG_SMP is that I could simply get rid of that > > wrapper in 3.x, since all legacy pipeline patches would be deprecated > > there anyway. > > Something like this, or where to put the wrapper? >
Better move it to asm-generic/hal.h like other i-pipe related conditionals. > Jan > > --- > > diff --git a/include/asm-generic/hal.h b/include/asm-generic/hal.h > index 97c549e..a8bc5ec 100644 > --- a/include/asm-generic/hal.h > +++ b/include/asm-generic/hal.h > @@ -117,7 +117,14 @@ typedef spinlock_t rthal_spinlock_t; > #endif /* !CONFIG_XENO_OPT_PIPELINE_HEAD */ > #define rthal_local_irq_flags(x) ((x) = > ipipe_test_pipeline_from(&rthal_domain) & 1) > #define rthal_local_irq_test() > ipipe_test_pipeline_from(&rthal_domain) > -#define rthal_local_irq_disabled() ipipe_test_pipeline_from(&rthal_domain) > +#define rthal_local_irq_disabled() \ > +({ \ > + unsigned long __flags, __ret; \ > + local_irq_save_hw_smp(__flags); \ > + __ret = ipipe_test_pipeline_from(&rthal_domain); \ > + local_irq_restore_hw_smp(__flags); \ > + __ret; \ > +}) > #define rthal_stage_irq_enable(dom) ipipe_unstall_pipeline_from(dom) > #define rthal_local_irq_save_hw(x) local_irq_save_hw(x) > #define rthal_local_irq_restore_hw(x) local_irq_restore_hw(x) > diff --git a/include/asm-generic/wrappers.h b/include/asm-generic/wrappers.h > index 1cfd60c..c175ea4 100644 > --- a/include/asm-generic/wrappers.h > +++ b/include/asm-generic/wrappers.h > @@ -555,4 +555,16 @@ static inline void wrap_proc_dir_entry_owner(struct > proc_dir_entry *entry) > #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) */ > #endif /* CONFIG_PROC_FS */ > > +#include <linux/ipipe.h> > + > +#ifndef local_irq_save_hw_smp > +#ifdef CONFIG_SMP > +#define local_irq_save_hw_smp(flags) local_irq_save_hw(flags) > +#define local_irq_restore_hw_smp(flags) local_irq_restore_hw(flags) > +#else /* !CONFIG_SMP */ > +#define local_irq_save_hw_smp(flags) do { (void)(flags); } while (0) > +#define local_irq_restore_hw_smp(flags) do { } while (0) > +#endif /* !CONFIG_SMP */ > +#endif /* !local_irq_save_hw_smp */ > + > #endif /* _XENO_ASM_GENERIC_WRAPPERS_H */ > -- Philippe. _______________________________________________ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core