lkml.org 
[lkml]   [2005]   [Oct]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Subjectrobust futex patch for 2.6.14-rc3-rt13
From
Date

Ingo,
here's a patch for the robust futex changes that match the
glibc/nptl changes
for robust futexes. The kernel and glibc now both have robustness and
priority inheritance independent.

This patch is based off 2.6.14-rc3-rt13.

The changes remove some duplicate defines from futex.c and glibc and
put all the defines into futex.h. The defines have also been changed
a bit
to make the assembler in glibc simpler.

There is also one fix to futex.c where the first waiter on a futex
waits instead of returning -EAGAIN.

The glibc patches can be found at http://source.mvista.com/~dsingleton


glibc-bull-nptl-robustmutexes.patch
glibc-mvl-nptl-priority-inheritance-rf2.patch

David--- futex/linux-2.6.13.3/include/linux/futex.h 2005-10-08 11:38:24.000000000 -0700
+++ new/linux-2.6.13.3/include/linux/futex.h 2005-10-08 11:37:56.000000000 -0700
@@ -18,10 +18,16 @@

#define FUTEX_ATTR_PRIORITY_QUEUING 0x10000000
#define FUTEX_ATTR_PRIORITY_INHERITANCE 0x20000000
-#define FUTEX_ATTR_ROBUST 0x40000000
-#define FUTEX_ATTR_PRIORITY_PROTECT 0x80000000
+#define FUTEX_ATTR_PRIORITY_PROTECT 0x40000000
+#define FUTEX_ATTR_ROBUST 0x80000000
#define FUTEX_ATTR_SHARED 0x01000000
-#define FUTEX_ATTR_MASK 0xf1000000
+#define FUTEX_ATTR_MASK 0xff000000
+
+#define FUTEX_WAITERS 0x80000000
+#define FUTEX_OWNER_DIED 0x40000000
+#define FUTEX_NOT_RECOVERABLE 0x20000000
+#define FUTEX_FLAGS (FUTEX_WAITERS | FUTEX_OWNER_DIED | FUTEX_NOT_RECOVERABLE)
+#define FUTEX_PID ~(FUTEX_FLAGS)

#ifdef __KERNEL__

--- futex/linux-2.6.13.3/kernel/futex.c 2005-10-08 14:37:58.000000000 -0700
+++ new/linux-2.6.13.3/kernel/futex.c 2005-10-08 14:38:53.000000000 -0700
@@ -853,11 +853,6 @@
* the futex is not locked.
*/

-#define FUTEX_WAITERS 0x80000000
-#define FUTEX_OWNER_DIED 0x40000000
-#define FUTEX_NOT_RECOVERABLE 0x20000000
-#define FUTEX_PID 0x1fffffff
-
/*
* Used to track registered robust futexes. Attached to linked list in inodes.
*/
@@ -1179,16 +1174,6 @@
goto out_release_sem;
}

- /*
- * user mode called us because futex had owner and waitflag was
- * set. That's not true now, so let user mode try again
- */
- if ((curval & FUTEX_PID) && !(curval & FUTEX_WAITERS)) {
- ret = -EAGAIN;
- queue_unlock(&q, bh);
- goto out_release_sem;
- }
-
/* if owner has died, we don't want to wait */
if ((curval & FUTEX_OWNER_DIED)) {
ret = -EOWNERDEAD;
\
 
 \ /
  Last update: 2005-10-08 23:51    [W:0.149 / U:0.104 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site