All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai-core] [PATCH] POSIX: Fix race when setting claimed bit
@ 2008-09-02 13:33 Jan Kiszka
  2008-09-02 13:36 ` Gilles Chanteperdrix
                   ` (2 more replies)
  0 siblings, 3 replies; 18+ messages in thread
From: Jan Kiszka @ 2008-09-02 13:33 UTC (permalink / raw)
  To: xenomai-core

Patch 2 of my fast lock series actually also contained an attempt to fix
a race I spotted in the code that atomically sets the claimed bit. I
forgot about this fact and even, worse, I only replace the original race
with another one.

So here comes a new attempt to fix the issue that the lock owner and/or
the claimed bit can change between trylock and the cmpxchg under nklock.
Please have a look and cross-check the logic.

The patch applies on top of vanilla SVN, so my series has to be rebased
and the fix has to be ported to native as well - where we just found it
in the field.

Jan

---
 ksrc/skins/posix/mutex.h |   11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

Index: b/ksrc/skins/posix/mutex.h
===================================================================
--- a/ksrc/skins/posix/mutex.h
+++ b/ksrc/skins/posix/mutex.h
@@ -134,17 +134,18 @@ static inline int pse51_mutex_timedlock_
 	/* Set bit 0, so that mutex_unlock will know that the mutex is claimed.
 	   Hold the nklock, for mutual exclusion with slow mutex_unlock. */
 	xnlock_get_irqsave(&nklock, s);
+	owner = xnarch_atomic_intptr_get(mutex->owner);
 	while(!test_claimed(owner)) {
-		old = xnarch_atomic_intptr_cmpxchg(mutex->owner,
-						   owner, set_claimed(owner, 1));
-		if (likely(old == owner))
-			break;
-		if (old == NULL) {
+		if (owner == NULL) {
 			/* Owner called fast mutex_unlock
 			   (on another cpu) */
 			xnlock_put_irqrestore(&nklock, s);
 			goto retry_lock;
 		}
+		old = xnarch_atomic_intptr_cmpxchg(mutex->owner,
+						   owner, set_claimed(owner, 1));
+		if (likely(old == owner))
+			break;
 		owner = old;
 	}
 


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

end of thread, other threads:[~2008-09-06 17:46 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-09-02 13:33 [Xenomai-core] [PATCH] POSIX: Fix race when setting claimed bit Jan Kiszka
2008-09-02 13:36 ` Gilles Chanteperdrix
2008-09-02 13:52   ` Jan Kiszka
2008-09-02 13:53 ` Gilles Chanteperdrix
2008-09-02 14:25   ` Jan Kiszka
2008-09-02 14:45     ` Gilles Chanteperdrix
2008-09-02 14:53       ` Gilles Chanteperdrix
2008-09-02 15:00       ` Jan Kiszka
2008-09-02 15:29         ` Jan Kiszka
2008-09-02 15:35           ` Gilles Chanteperdrix
2008-09-02 15:43             ` Jan Kiszka
2008-09-02 17:59               ` Gilles Chanteperdrix
2008-09-02 18:14                 ` Jan Kiszka
2008-09-02 18:26                   ` Gilles Chanteperdrix
2008-09-03  7:17                     ` Jan Kiszka
2008-09-03  8:59                       ` Gilles Chanteperdrix
2008-09-05  8:31 ` [Xenomai-core] [PATCH] POSIX: Fix race when setting claimed bit - v2 Jan Kiszka
2008-09-06 17:46   ` Gilles Chanteperdrix

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.