Re: [Xenomai-core] [PATCH] hal: Ensure atomicity of rthal_local_irq_disabled
On Tue, 2009-11-10 at 01:34 +0100, Gilles Chanteperdrix wrote: Jan Kiszka wrote: [Patch is now also available in 'for-upstream'] ipipe_test_pipeline_from is not atomic /wrt reading the current cpu number (or an offset for the per-cpu area) and actually reading the virtualized interrupt state. Work around this by disabling hard IRQs while accessing this service. This fixes false-positives of RTDM driver debug checks. Signed-off-by: Jan Kiszka jan.kis...@siemens.com --- include/asm-generic/hal.h |9 - 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/include/asm-generic/hal.h b/include/asm-generic/hal.h index 97c549e..3095b85 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(__flags); \ + __ret = ipipe_test_pipeline_from(rthal_domain);\ + local_irq_restore_hw(__flags); \ + __ret; \ +}) Maybe we can avoid that on UP systems? Yes, we should rather use local_irq_save/restore_hw_smp(). -- Philippe. ___ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core
Re: [Xenomai-core] [PATCH] hal: Ensure atomicity of rthal_local_irq_disabled
Philippe Gerum wrote: On Tue, 2009-11-10 at 01:34 +0100, Gilles Chanteperdrix wrote: Jan Kiszka wrote: [Patch is now also available in 'for-upstream'] ipipe_test_pipeline_from is not atomic /wrt reading the current cpu number (or an offset for the per-cpu area) and actually reading the virtualized interrupt state. Work around this by disabling hard IRQs while accessing this service. This fixes false-positives of RTDM driver debug checks. Signed-off-by: Jan Kiszka jan.kis...@siemens.com --- include/asm-generic/hal.h |9 - 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/include/asm-generic/hal.h b/include/asm-generic/hal.h index 97c549e..3095b85 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(__flags); \ + __ret = ipipe_test_pipeline_from(rthal_domain);\ + local_irq_restore_hw(__flags); \ + __ret; \ +}) Maybe we can avoid that on UP systems? Yes, we should rather use local_irq_save/restore_hw_smp(). Oh, *_hw_smp is new, isn't it? Do we need to wrap it for older I-pipes? Jan ___ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core
Re: [Xenomai-core] [PATCH] hal: Ensure atomicity of rthal_local_irq_disabled
On Tue, 2009-11-10 at 11:43 +0100, Jan Kiszka wrote: Philippe Gerum wrote: On Tue, 2009-11-10 at 01:34 +0100, Gilles Chanteperdrix wrote: Jan Kiszka wrote: [Patch is now also available in 'for-upstream'] ipipe_test_pipeline_from is not atomic /wrt reading the current cpu number (or an offset for the per-cpu area) and actually reading the virtualized interrupt state. Work around this by disabling hard IRQs while accessing this service. This fixes false-positives of RTDM driver debug checks. Signed-off-by: Jan Kiszka jan.kis...@siemens.com --- include/asm-generic/hal.h |9 - 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/include/asm-generic/hal.h b/include/asm-generic/hal.h index 97c549e..3095b85 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(__flags); \ + __ret = ipipe_test_pipeline_from(rthal_domain);\ + local_irq_restore_hw(__flags); \ + __ret; \ +}) Maybe we can avoid that on UP systems? Yes, we should rather use local_irq_save/restore_hw_smp(). 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. Jan -- Philippe. ___ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core
Re: [Xenomai-core] [PATCH] hal: Ensure atomicity of rthal_local_irq_disabled
Philippe Gerum wrote: 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. OK, pushed a corresponding version. Jan -- Siemens AG, Corporate Technology, CT SE 2 Corporate Competence Center Embedded Linux ___ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core
Re: [Xenomai-core] [PATCH] hal: Ensure atomicity of rthal_local_irq_disabled
Jan Kiszka wrote: [Patch is now also available in 'for-upstream'] ipipe_test_pipeline_from is not atomic /wrt reading the current cpu number (or an offset for the per-cpu area) and actually reading the virtualized interrupt state. Work around this by disabling hard IRQs while accessing this service. This fixes false-positives of RTDM driver debug checks. Signed-off-by: Jan Kiszka jan.kis...@siemens.com --- include/asm-generic/hal.h |9 - 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/include/asm-generic/hal.h b/include/asm-generic/hal.h index 97c549e..3095b85 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(__flags); \ + __ret = ipipe_test_pipeline_from(rthal_domain);\ + local_irq_restore_hw(__flags); \ + __ret; \ +}) Maybe we can avoid that on UP systems? -- Gilles. ___ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core
Re: [Xenomai-core] [PATCH] hal: Ensure atomicity of rthal_local_irq_disabled
Gilles Chanteperdrix wrote: Jan Kiszka wrote: [Patch is now also available in 'for-upstream'] ipipe_test_pipeline_from is not atomic /wrt reading the current cpu number (or an offset for the per-cpu area) and actually reading the virtualized interrupt state. Work around this by disabling hard IRQs while accessing this service. This fixes false-positives of RTDM driver debug checks. Signed-off-by: Jan Kiszka jan.kis...@siemens.com --- include/asm-generic/hal.h |9 - 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/include/asm-generic/hal.h b/include/asm-generic/hal.h index 97c549e..3095b85 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(__flags); \ +__ret = ipipe_test_pipeline_from(rthal_domain);\ +local_irq_restore_hw(__flags); \ +__ret; \ +}) Maybe we can avoid that on UP systems? Yep, update pushed. Jan --- [PATCH] hal: Ensure atomicity of rthal_local_irq_disabled ipipe_test_pipeline_from is not atomic /wrt reading the current cpu number (or an offset for the per-cpu area) and actually reading the virtualized interrupt state. Work around this by disabling hard IRQs while accessing this service. This fixes false-positives of RTDM driver debug checks. Signed-off-by: Jan Kiszka jan.kis...@siemens.com --- include/asm-generic/hal.h | 11 +++ 1 files changed, 11 insertions(+), 0 deletions(-) diff --git a/include/asm-generic/hal.h b/include/asm-generic/hal.h index 97c549e..9b5b058 100644 --- a/include/asm-generic/hal.h +++ b/include/asm-generic/hal.h @@ -117,7 +117,18 @@ 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) +#ifdef CONFIG_SMP +#define rthal_local_irq_disabled() \ +({ \ + unsigned long __flags, __ret; \ + local_irq_save_hw(__flags); \ + __ret = ipipe_test_pipeline_from(rthal_domain);\ + local_irq_restore_hw(__flags); \ + __ret; \ +}) +#else /* !CONFIG_SMP */ #define rthal_local_irq_disabled() ipipe_test_pipeline_from(rthal_domain) +#endif /* !CONFIG_SMP */ #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) -- 1.6.0.2 signature.asc Description: OpenPGP digital signature ___ Xenomai-core mailing list Xenomai-core@gna.org https://mail.gna.org/listinfo/xenomai-core