diff options
author | Ingo Molnar <mingo@elte.hu> | 2006-06-27 05:54:58 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-06-27 20:32:47 -0400 |
commit | c87e2837be82df479a6bae9f155c43516d2feebc (patch) | |
tree | ad6ab35f0b78f71abaa7b05185e9e3f97809c6de /include/linux | |
parent | 0cdbee9920fb37eb2dc49b860c2b28862d647adc (diff) |
[PATCH] pi-futex: futex_lock_pi/futex_unlock_pi support
This adds the actual pi-futex implementation, based on rt-mutexes.
[dino@in.ibm.com: fix an oops-causing race]
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Dinakar Guniguntala <dino@in.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/futex.h | 7 | ||||
-rw-r--r-- | include/linux/sched.h | 3 |
2 files changed, 10 insertions, 0 deletions
diff --git a/include/linux/futex.h b/include/linux/futex.h index f05a3f469322..34c3a215f2cd 100644 --- a/include/linux/futex.h +++ b/include/linux/futex.h | |||
@@ -12,6 +12,9 @@ | |||
12 | #define FUTEX_REQUEUE 3 | 12 | #define FUTEX_REQUEUE 3 |
13 | #define FUTEX_CMP_REQUEUE 4 | 13 | #define FUTEX_CMP_REQUEUE 4 |
14 | #define FUTEX_WAKE_OP 5 | 14 | #define FUTEX_WAKE_OP 5 |
15 | #define FUTEX_LOCK_PI 6 | ||
16 | #define FUTEX_UNLOCK_PI 7 | ||
17 | #define FUTEX_TRYLOCK_PI 8 | ||
15 | 18 | ||
16 | /* | 19 | /* |
17 | * Support for robust futexes: the kernel cleans up held futexes at | 20 | * Support for robust futexes: the kernel cleans up held futexes at |
@@ -97,10 +100,14 @@ extern int handle_futex_death(u32 __user *uaddr, struct task_struct *curr); | |||
97 | 100 | ||
98 | #ifdef CONFIG_FUTEX | 101 | #ifdef CONFIG_FUTEX |
99 | extern void exit_robust_list(struct task_struct *curr); | 102 | extern void exit_robust_list(struct task_struct *curr); |
103 | extern void exit_pi_state_list(struct task_struct *curr); | ||
100 | #else | 104 | #else |
101 | static inline void exit_robust_list(struct task_struct *curr) | 105 | static inline void exit_robust_list(struct task_struct *curr) |
102 | { | 106 | { |
103 | } | 107 | } |
108 | static inline void exit_pi_state_list(struct task_struct *curr) | ||
109 | { | ||
110 | } | ||
104 | #endif | 111 | #endif |
105 | 112 | ||
106 | #define FUTEX_OP_SET 0 /* *(int *)UADDR2 = OPARG; */ | 113 | #define FUTEX_OP_SET 0 /* *(int *)UADDR2 = OPARG; */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index edadd13cf53f..b4e6be7de5ad 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -84,6 +84,7 @@ struct sched_param { | |||
84 | #include <asm/processor.h> | 84 | #include <asm/processor.h> |
85 | 85 | ||
86 | struct exec_domain; | 86 | struct exec_domain; |
87 | struct futex_pi_state; | ||
87 | 88 | ||
88 | /* | 89 | /* |
89 | * List of flags we want to share for kernel threads, | 90 | * List of flags we want to share for kernel threads, |
@@ -915,6 +916,8 @@ struct task_struct { | |||
915 | #ifdef CONFIG_COMPAT | 916 | #ifdef CONFIG_COMPAT |
916 | struct compat_robust_list_head __user *compat_robust_list; | 917 | struct compat_robust_list_head __user *compat_robust_list; |
917 | #endif | 918 | #endif |
919 | struct list_head pi_state_list; | ||
920 | struct futex_pi_state *pi_state_cache; | ||
918 | 921 | ||
919 | atomic_t fs_excl; /* holding fs exclusive resources */ | 922 | atomic_t fs_excl; /* holding fs exclusive resources */ |
920 | struct rcu_head rcu; | 923 | struct rcu_head rcu; |