diff options
Diffstat (limited to 'kernel/futex.c')
-rw-r--r-- | kernel/futex.c | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/kernel/futex.c b/kernel/futex.c index 19eb089ca003..b26dcfc02c94 100644 --- a/kernel/futex.c +++ b/kernel/futex.c | |||
@@ -60,6 +60,7 @@ | |||
60 | #include <linux/pid.h> | 60 | #include <linux/pid.h> |
61 | #include <linux/nsproxy.h> | 61 | #include <linux/nsproxy.h> |
62 | #include <linux/ptrace.h> | 62 | #include <linux/ptrace.h> |
63 | #include <linux/sched/rt.h> | ||
63 | 64 | ||
64 | #include <asm/futex.h> | 65 | #include <asm/futex.h> |
65 | 66 | ||
@@ -222,10 +223,11 @@ static void drop_futex_key_refs(union futex_key *key) | |||
222 | * @rw: mapping needs to be read/write (values: VERIFY_READ, | 223 | * @rw: mapping needs to be read/write (values: VERIFY_READ, |
223 | * VERIFY_WRITE) | 224 | * VERIFY_WRITE) |
224 | * | 225 | * |
225 | * Returns a negative error code or 0 | 226 | * Return: a negative error code or 0 |
227 | * | ||
226 | * The key words are stored in *key on success. | 228 | * The key words are stored in *key on success. |
227 | * | 229 | * |
228 | * For shared mappings, it's (page->index, vma->vm_file->f_path.dentry->d_inode, | 230 | * For shared mappings, it's (page->index, file_inode(vma->vm_file), |
229 | * offset_within_page). For private mappings, it's (uaddr, current->mm). | 231 | * offset_within_page). For private mappings, it's (uaddr, current->mm). |
230 | * We can usually work out the index without swapping in the page. | 232 | * We can usually work out the index without swapping in the page. |
231 | * | 233 | * |
@@ -704,9 +706,9 @@ lookup_pi_state(u32 uval, struct futex_hash_bucket *hb, | |||
704 | * be "current" except in the case of requeue pi. | 706 | * be "current" except in the case of requeue pi. |
705 | * @set_waiters: force setting the FUTEX_WAITERS bit (1) or not (0) | 707 | * @set_waiters: force setting the FUTEX_WAITERS bit (1) or not (0) |
706 | * | 708 | * |
707 | * Returns: | 709 | * Return: |
708 | * 0 - ready to wait | 710 | * 0 - ready to wait; |
709 | * 1 - acquired the lock | 711 | * 1 - acquired the lock; |
710 | * <0 - error | 712 | * <0 - error |
711 | * | 713 | * |
712 | * The hb->lock and futex_key refs shall be held by the caller. | 714 | * The hb->lock and futex_key refs shall be held by the caller. |
@@ -1190,9 +1192,9 @@ void requeue_pi_wake_futex(struct futex_q *q, union futex_key *key, | |||
1190 | * then direct futex_lock_pi_atomic() to force setting the FUTEX_WAITERS bit. | 1192 | * then direct futex_lock_pi_atomic() to force setting the FUTEX_WAITERS bit. |
1191 | * hb1 and hb2 must be held by the caller. | 1193 | * hb1 and hb2 must be held by the caller. |
1192 | * | 1194 | * |
1193 | * Returns: | 1195 | * Return: |
1194 | * 0 - failed to acquire the lock atomicly | 1196 | * 0 - failed to acquire the lock atomically; |
1195 | * 1 - acquired the lock | 1197 | * 1 - acquired the lock; |
1196 | * <0 - error | 1198 | * <0 - error |
1197 | */ | 1199 | */ |
1198 | static int futex_proxy_trylock_atomic(u32 __user *pifutex, | 1200 | static int futex_proxy_trylock_atomic(u32 __user *pifutex, |
@@ -1253,8 +1255,8 @@ static int futex_proxy_trylock_atomic(u32 __user *pifutex, | |||
1253 | * Requeue waiters on uaddr1 to uaddr2. In the requeue_pi case, try to acquire | 1255 | * Requeue waiters on uaddr1 to uaddr2. In the requeue_pi case, try to acquire |
1254 | * uaddr2 atomically on behalf of the top waiter. | 1256 | * uaddr2 atomically on behalf of the top waiter. |
1255 | * | 1257 | * |
1256 | * Returns: | 1258 | * Return: |
1257 | * >=0 - on success, the number of tasks requeued or woken | 1259 | * >=0 - on success, the number of tasks requeued or woken; |
1258 | * <0 - on error | 1260 | * <0 - on error |
1259 | */ | 1261 | */ |
1260 | static int futex_requeue(u32 __user *uaddr1, unsigned int flags, | 1262 | static int futex_requeue(u32 __user *uaddr1, unsigned int flags, |
@@ -1535,8 +1537,8 @@ static inline void queue_me(struct futex_q *q, struct futex_hash_bucket *hb) | |||
1535 | * The q->lock_ptr must not be held by the caller. A call to unqueue_me() must | 1537 | * The q->lock_ptr must not be held by the caller. A call to unqueue_me() must |
1536 | * be paired with exactly one earlier call to queue_me(). | 1538 | * be paired with exactly one earlier call to queue_me(). |
1537 | * | 1539 | * |
1538 | * Returns: | 1540 | * Return: |
1539 | * 1 - if the futex_q was still queued (and we removed unqueued it) | 1541 | * 1 - if the futex_q was still queued (and we removed unqueued it); |
1540 | * 0 - if the futex_q was already removed by the waking thread | 1542 | * 0 - if the futex_q was already removed by the waking thread |
1541 | */ | 1543 | */ |
1542 | static int unqueue_me(struct futex_q *q) | 1544 | static int unqueue_me(struct futex_q *q) |
@@ -1706,9 +1708,9 @@ static long futex_wait_restart(struct restart_block *restart); | |||
1706 | * the pi_state owner as well as handle race conditions that may allow us to | 1708 | * the pi_state owner as well as handle race conditions that may allow us to |
1707 | * acquire the lock. Must be called with the hb lock held. | 1709 | * acquire the lock. Must be called with the hb lock held. |
1708 | * | 1710 | * |
1709 | * Returns: | 1711 | * Return: |
1710 | * 1 - success, lock taken | 1712 | * 1 - success, lock taken; |
1711 | * 0 - success, lock not taken | 1713 | * 0 - success, lock not taken; |
1712 | * <0 - on error (-EFAULT) | 1714 | * <0 - on error (-EFAULT) |
1713 | */ | 1715 | */ |
1714 | static int fixup_owner(u32 __user *uaddr, struct futex_q *q, int locked) | 1716 | static int fixup_owner(u32 __user *uaddr, struct futex_q *q, int locked) |
@@ -1823,8 +1825,8 @@ static void futex_wait_queue_me(struct futex_hash_bucket *hb, struct futex_q *q, | |||
1823 | * Return with the hb lock held and a q.key reference on success, and unlocked | 1825 | * Return with the hb lock held and a q.key reference on success, and unlocked |
1824 | * with no q.key reference on failure. | 1826 | * with no q.key reference on failure. |
1825 | * | 1827 | * |
1826 | * Returns: | 1828 | * Return: |
1827 | * 0 - uaddr contains val and hb has been locked | 1829 | * 0 - uaddr contains val and hb has been locked; |
1828 | * <1 - -EFAULT or -EWOULDBLOCK (uaddr does not contain val) and hb is unlocked | 1830 | * <1 - -EFAULT or -EWOULDBLOCK (uaddr does not contain val) and hb is unlocked |
1829 | */ | 1831 | */ |
1830 | static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags, | 1832 | static int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags, |
@@ -2202,9 +2204,9 @@ pi_faulted: | |||
2202 | * the wakeup and return the appropriate error code to the caller. Must be | 2204 | * the wakeup and return the appropriate error code to the caller. Must be |
2203 | * called with the hb lock held. | 2205 | * called with the hb lock held. |
2204 | * | 2206 | * |
2205 | * Returns | 2207 | * Return: |
2206 | * 0 - no early wakeup detected | 2208 | * 0 = no early wakeup detected; |
2207 | * <0 - -ETIMEDOUT or -ERESTARTNOINTR | 2209 | * <0 = -ETIMEDOUT or -ERESTARTNOINTR |
2208 | */ | 2210 | */ |
2209 | static inline | 2211 | static inline |
2210 | int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb, | 2212 | int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb, |
@@ -2246,7 +2248,6 @@ int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb, | |||
2246 | * @val: the expected value of uaddr | 2248 | * @val: the expected value of uaddr |
2247 | * @abs_time: absolute timeout | 2249 | * @abs_time: absolute timeout |
2248 | * @bitset: 32 bit wakeup bitset set by userspace, defaults to all | 2250 | * @bitset: 32 bit wakeup bitset set by userspace, defaults to all |
2249 | * @clockrt: whether to use CLOCK_REALTIME (1) or CLOCK_MONOTONIC (0) | ||
2250 | * @uaddr2: the pi futex we will take prior to returning to user-space | 2251 | * @uaddr2: the pi futex we will take prior to returning to user-space |
2251 | * | 2252 | * |
2252 | * The caller will wait on uaddr and will be requeued by futex_requeue() to | 2253 | * The caller will wait on uaddr and will be requeued by futex_requeue() to |
@@ -2257,7 +2258,7 @@ int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb, | |||
2257 | * there was a need to. | 2258 | * there was a need to. |
2258 | * | 2259 | * |
2259 | * We call schedule in futex_wait_queue_me() when we enqueue and return there | 2260 | * We call schedule in futex_wait_queue_me() when we enqueue and return there |
2260 | * via the following: | 2261 | * via the following-- |
2261 | * 1) wakeup on uaddr2 after an atomic lock acquisition by futex_requeue() | 2262 | * 1) wakeup on uaddr2 after an atomic lock acquisition by futex_requeue() |
2262 | * 2) wakeup on uaddr2 after a requeue | 2263 | * 2) wakeup on uaddr2 after a requeue |
2263 | * 3) signal | 2264 | * 3) signal |
@@ -2275,8 +2276,8 @@ int handle_early_requeue_pi_wakeup(struct futex_hash_bucket *hb, | |||
2275 | * | 2276 | * |
2276 | * If 4 or 7, we cleanup and return with -ETIMEDOUT. | 2277 | * If 4 or 7, we cleanup and return with -ETIMEDOUT. |
2277 | * | 2278 | * |
2278 | * Returns: | 2279 | * Return: |
2279 | * 0 - On success | 2280 | * 0 - On success; |
2280 | * <0 - On error | 2281 | * <0 - On error |
2281 | */ | 2282 | */ |
2282 | static int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags, | 2283 | static int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags, |
@@ -2471,8 +2472,6 @@ SYSCALL_DEFINE3(get_robust_list, int, pid, | |||
2471 | if (!futex_cmpxchg_enabled) | 2472 | if (!futex_cmpxchg_enabled) |
2472 | return -ENOSYS; | 2473 | return -ENOSYS; |
2473 | 2474 | ||
2474 | WARN_ONCE(1, "deprecated: get_robust_list will be deleted in 2013.\n"); | ||
2475 | |||
2476 | rcu_read_lock(); | 2475 | rcu_read_lock(); |
2477 | 2476 | ||
2478 | ret = -ESRCH; | 2477 | ret = -ESRCH; |