All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-core] [PATCH] hal: Ensure atomicity of rthal_local_irq_disabled
@ 2009-11-09 23:35 Jan Kiszka
  2009-11-10  0:34 ` Gilles Chanteperdrix
  0 siblings, 1 reply; 10+ messages in thread
From: Jan Kiszka @ 2009-11-09 23:35 UTC (permalink / raw)
  To: Philippe Gerum; +Cc: xenomai-core

[-- Attachment #1: Type: text/plain, Size: 1468 bytes --]

[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.kiszka@domain.hid>
---
 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;							\
+})
 #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


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 257 bytes --]

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2009-11-10 13:31 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-09 23:35 [Xenomai-core] [PATCH] hal: Ensure atomicity of rthal_local_irq_disabled Jan Kiszka
2009-11-10  0:34 ` Gilles Chanteperdrix
2009-11-10  7:54   ` Jan Kiszka
2009-11-10 10:28   ` Philippe Gerum
2009-11-10 10:37     ` Philippe Gerum
2009-11-10 10:43     ` Jan Kiszka
2009-11-10 10:55       ` Philippe Gerum
2009-11-10 11:33         ` Jan Kiszka
2009-11-10 13:26           ` Philippe Gerum
2009-11-10 13:31             ` Jan Kiszka

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.