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

Reply via email to