diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2007-06-17 15:11:10 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-06-18 12:48:41 -0400 |
commit | bd197234b0a616c8f04f6b682326a5a24b33ca92 (patch) | |
tree | 1c31f8934b0d5472c9038c042ff27d08b52ffdc6 /include/linux | |
parent | 188e1f81ba31af1b65a2f3611df4c670b092bbac (diff) |
Revert "futex_requeue_pi optimization"
This reverts commit d0aa7a70bf03b9de9e995ab272293be1f7937822.
It not only introduced user space visible changes to the futex syscall,
it is also non-functional and there is no way to fix it proper before
the 2.6.22 release.
The breakage report ( http://lkml.org/lkml/2007/5/12/17 ) went
unanswered, and unfortunately it turned out that the concept is not
feasible at all. It violates the rtmutex semantics badly by introducing
a virtual owner, which hacks around the coupling of the user-space
pi_futex and the kernel internal rt_mutex representation.
At the moment the only safe option is to remove it fully as it contains
user-space visible changes to broken kernel code, which we do not want
to expose in the 2.6.22 release.
The patch reverts the original patch mostly 1:1, but contains a couple
of trivial manual cleanups which were necessary due to patches, which
touched the same area of code later.
Verified against the glibc tests and my own PI futex tests.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Ingo Molnar <mingo@elte.hu>
Acked-by: Ulrich Drepper <drepper@redhat.com>
Cc: Pierre Peiffer <pierre.peiffer@bull.net>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/futex.h | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/include/linux/futex.h b/include/linux/futex.h index 899fc7f20edd..99650353adfa 100644 --- a/include/linux/futex.h +++ b/include/linux/futex.h | |||
@@ -17,7 +17,6 @@ union ktime; | |||
17 | #define FUTEX_LOCK_PI 6 | 17 | #define FUTEX_LOCK_PI 6 |
18 | #define FUTEX_UNLOCK_PI 7 | 18 | #define FUTEX_UNLOCK_PI 7 |
19 | #define FUTEX_TRYLOCK_PI 8 | 19 | #define FUTEX_TRYLOCK_PI 8 |
20 | #define FUTEX_CMP_REQUEUE_PI 9 | ||
21 | 20 | ||
22 | #define FUTEX_PRIVATE_FLAG 128 | 21 | #define FUTEX_PRIVATE_FLAG 128 |
23 | #define FUTEX_CMD_MASK ~FUTEX_PRIVATE_FLAG | 22 | #define FUTEX_CMD_MASK ~FUTEX_PRIVATE_FLAG |
@@ -98,14 +97,9 @@ struct robust_list_head { | |||
98 | #define FUTEX_OWNER_DIED 0x40000000 | 97 | #define FUTEX_OWNER_DIED 0x40000000 |
99 | 98 | ||
100 | /* | 99 | /* |
101 | * Some processes have been requeued on this PI-futex | ||
102 | */ | ||
103 | #define FUTEX_WAITER_REQUEUED 0x20000000 | ||
104 | |||
105 | /* | ||
106 | * The rest of the robust-futex field is for the TID: | 100 | * The rest of the robust-futex field is for the TID: |
107 | */ | 101 | */ |
108 | #define FUTEX_TID_MASK 0x0fffffff | 102 | #define FUTEX_TID_MASK 0x3fffffff |
109 | 103 | ||
110 | /* | 104 | /* |
111 | * This limit protects against a deliberately circular list. | 105 | * This limit protects against a deliberately circular list. |
@@ -139,7 +133,6 @@ handle_futex_death(u32 __user *uaddr, struct task_struct *curr, int pi); | |||
139 | #define FUT_OFF_MMSHARED 2 /* We set bit 1 if key has a reference on mm */ | 133 | #define FUT_OFF_MMSHARED 2 /* We set bit 1 if key has a reference on mm */ |
140 | 134 | ||
141 | union futex_key { | 135 | union futex_key { |
142 | u32 __user *uaddr; | ||
143 | struct { | 136 | struct { |
144 | unsigned long pgoff; | 137 | unsigned long pgoff; |
145 | struct inode *inode; | 138 | struct inode *inode; |