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

Reply via email to