Re: [Xenomai-core] [PATCH] hal: Ensure atomicity of rthal_local_irq_disabled

2009-11-10 Thread Philippe Gerum
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

2009-11-10 Thread Jan Kiszka
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

2009-11-10 Thread Philippe Gerum
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

2009-11-10 Thread Jan Kiszka
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

2009-11-09 Thread Gilles Chanteperdrix
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

2009-11-09 Thread Jan Kiszka
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