Uninline find_task_by_xxx set of functions
[safe/jmp/linux-2.6] / kernel / futex.c
1 /*
2  *  Fast Userspace Mutexes (which I call "Futexes!").
3  *  (C) Rusty Russell, IBM 2002
4  *
5  *  Generalized futexes, futex requeueing, misc fixes by Ingo Molnar
6  *  (C) Copyright 2003 Red Hat Inc, All Rights Reserved
7  *
8  *  Removed page pinning, fix privately mapped COW pages and other cleanups
9  *  (C) Copyright 2003, 2004 Jamie Lokier
10  *
11  *  Robust futex support started by Ingo Molnar
12  *  (C) Copyright 2006 Red Hat Inc, All Rights Reserved
13  *  Thanks to Thomas Gleixner for suggestions, analysis and fixes.
14  *
15  *  PI-futex support started by Ingo Molnar and Thomas Gleixner
16  *  Copyright (C) 2006 Red Hat, Inc., Ingo Molnar <mingo@redhat.com>
17  *  Copyright (C) 2006 Timesys Corp., Thomas Gleixner <tglx@timesys.com>
18  *
19  *  PRIVATE futexes by Eric Dumazet
20  *  Copyright (C) 2007 Eric Dumazet <dada1@cosmosbay.com>
21  *
22  *  Thanks to Ben LaHaise for yelling "hashed waitqueues" loudly
23  *  enough at me, Linus for the original (flawed) idea, Matthew
24  *  Kirkwood for proof-of-concept implementation.
25  *
26  *  "The futexes are also cursed."
27  *  "But they come in a choice of three flavours!"
28  *
29  *  This program is free software; you can redistribute it and/or modify
30  *  it under the terms of the GNU General Public License as published by
31  *  the Free Software Foundation; either version 2 of the License, or
32  *  (at your option) any later version.
33  *
34  *  This program is distributed in the hope that it will be useful,
35  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
36  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
37  *  GNU General Public License for more details.
38  *
39  *  You should have received a copy of the GNU General Public License
40  *  along with this program; if not, write to the Free Software
41  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
42  */
43 #include <linux/slab.h>
44 #include <linux/poll.h>
45 #include <linux/fs.h>
46 #include <linux/file.h>
47 #include <linux/jhash.h>
48 #include <linux/init.h>
49 #include <linux/futex.h>
50 #include <linux/mount.h>
51 #include <linux/pagemap.h>
52 #include <linux/syscalls.h>
53 #include <linux/signal.h>
54 #include <linux/module.h>
55 #include <linux/magic.h>
56 #include <linux/pid.h>
57 #include <linux/nsproxy.h>
58
59 #include <asm/futex.h>
60
61 #include "rtmutex_common.h"
62
63 #define FUTEX_HASHBITS (CONFIG_BASE_SMALL ? 4 : 8)
64
65 /*
66  * Priority Inheritance state:
67  */
68 struct futex_pi_state {
69         /*
70          * list of 'owned' pi_state instances - these have to be
71          * cleaned up in do_exit() if the task exits prematurely:
72          */
73         struct list_head list;
74
75         /*
76          * The PI object:
77          */
78         struct rt_mutex pi_mutex;
79
80         struct task_struct *owner;
81         atomic_t refcount;
82
83         union futex_key key;
84 };
85
86 /*
87  * We use this hashed waitqueue instead of a normal wait_queue_t, so
88  * we can wake only the relevant ones (hashed queues may be shared).
89  *
90  * A futex_q has a woken state, just like tasks have TASK_RUNNING.
91  * It is considered woken when plist_node_empty(&q->list) || q->lock_ptr == 0.
92  * The order of wakup is always to make the first condition true, then
93  * wake up q->waiters, then make the second condition true.
94  */
95 struct futex_q {
96         struct plist_node list;
97         wait_queue_head_t waiters;
98
99         /* Which hash list lock to use: */
100         spinlock_t *lock_ptr;
101
102         /* Key which the futex is hashed on: */
103         union futex_key key;
104
105         /* For fd, sigio sent using these: */
106         int fd;
107         struct file *filp;
108
109         /* Optional priority inheritance state: */
110         struct futex_pi_state *pi_state;
111         struct task_struct *task;
112 };
113
114 /*
115  * Split the global futex_lock into every hash list lock.
116  */
117 struct futex_hash_bucket {
118         spinlock_t lock;
119         struct plist_head chain;
120 };
121
122 static struct futex_hash_bucket futex_queues[1<<FUTEX_HASHBITS];
123
124 /* Futex-fs vfsmount entry: */
125 static struct vfsmount *futex_mnt;
126
127 /*
128  * Take mm->mmap_sem, when futex is shared
129  */
130 static inline void futex_lock_mm(struct rw_semaphore *fshared)
131 {
132         if (fshared)
133                 down_read(fshared);
134 }
135
136 /*
137  * Release mm->mmap_sem, when the futex is shared
138  */
139 static inline void futex_unlock_mm(struct rw_semaphore *fshared)
140 {
141         if (fshared)
142                 up_read(fshared);
143 }
144
145 /*
146  * We hash on the keys returned from get_futex_key (see below).
147  */
148 static struct futex_hash_bucket *hash_futex(union futex_key *key)
149 {
150         u32 hash = jhash2((u32*)&key->both.word,
151                           (sizeof(key->both.word)+sizeof(key->both.ptr))/4,
152                           key->both.offset);
153         return &futex_queues[hash & ((1 << FUTEX_HASHBITS)-1)];
154 }
155
156 /*
157  * Return 1 if two futex_keys are equal, 0 otherwise.
158  */
159 static inline int match_futex(union futex_key *key1, union futex_key *key2)
160 {
161         return (key1->both.word == key2->both.word
162                 && key1->both.ptr == key2->both.ptr
163                 && key1->both.offset == key2->both.offset);
164 }
165
166 /**
167  * get_futex_key - Get parameters which are the keys for a futex.
168  * @uaddr: virtual address of the futex
169  * @shared: NULL for a PROCESS_PRIVATE futex,
170  *      &current->mm->mmap_sem for a PROCESS_SHARED futex
171  * @key: address where result is stored.
172  *
173  * Returns a negative error code or 0
174  * The key words are stored in *key on success.
175  *
176  * For shared mappings, it's (page->index, vma->vm_file->f_path.dentry->d_inode,
177  * offset_within_page).  For private mappings, it's (uaddr, current->mm).
178  * We can usually work out the index without swapping in the page.
179  *
180  * fshared is NULL for PROCESS_PRIVATE futexes
181  * For other futexes, it points to &current->mm->mmap_sem and
182  * caller must have taken the reader lock. but NOT any spinlocks.
183  */
184 int get_futex_key(u32 __user *uaddr, struct rw_semaphore *fshared,
185                   union futex_key *key)
186 {
187         unsigned long address = (unsigned long)uaddr;
188         struct mm_struct *mm = current->mm;
189         struct vm_area_struct *vma;
190         struct page *page;
191         int err;
192
193         /*
194          * The futex address must be "naturally" aligned.
195          */
196         key->both.offset = address % PAGE_SIZE;
197         if (unlikely((address % sizeof(u32)) != 0))
198                 return -EINVAL;
199         address -= key->both.offset;
200
201         /*
202          * PROCESS_PRIVATE futexes are fast.
203          * As the mm cannot disappear under us and the 'key' only needs
204          * virtual address, we dont even have to find the underlying vma.
205          * Note : We do have to check 'uaddr' is a valid user address,
206          *        but access_ok() should be faster than find_vma()
207          */
208         if (!fshared) {
209                 if (unlikely(!access_ok(VERIFY_WRITE, uaddr, sizeof(u32))))
210                         return -EFAULT;
211                 key->private.mm = mm;
212                 key->private.address = address;
213                 return 0;
214         }
215         /*
216          * The futex is hashed differently depending on whether
217          * it's in a shared or private mapping.  So check vma first.
218          */
219         vma = find_extend_vma(mm, address);
220         if (unlikely(!vma))
221                 return -EFAULT;
222
223         /*
224          * Permissions.
225          */
226         if (unlikely((vma->vm_flags & (VM_IO|VM_READ)) != VM_READ))
227                 return (vma->vm_flags & VM_IO) ? -EPERM : -EACCES;
228
229         /*
230          * Private mappings are handled in a simple way.
231          *
232          * NOTE: When userspace waits on a MAP_SHARED mapping, even if
233          * it's a read-only handle, it's expected that futexes attach to
234          * the object not the particular process.  Therefore we use
235          * VM_MAYSHARE here, not VM_SHARED which is restricted to shared
236          * mappings of _writable_ handles.
237          */
238         if (likely(!(vma->vm_flags & VM_MAYSHARE))) {
239                 key->both.offset |= FUT_OFF_MMSHARED; /* reference taken on mm */
240                 key->private.mm = mm;
241                 key->private.address = address;
242                 return 0;
243         }
244
245         /*
246          * Linear file mappings are also simple.
247          */
248         key->shared.inode = vma->vm_file->f_path.dentry->d_inode;
249         key->both.offset |= FUT_OFF_INODE; /* inode-based key. */
250         if (likely(!(vma->vm_flags & VM_NONLINEAR))) {
251                 key->shared.pgoff = (((address - vma->vm_start) >> PAGE_SHIFT)
252                                      + vma->vm_pgoff);
253                 return 0;
254         }
255
256         /*
257          * We could walk the page table to read the non-linear
258          * pte, and get the page index without fetching the page
259          * from swap.  But that's a lot of code to duplicate here
260          * for a rare case, so we simply fetch the page.
261          */
262         err = get_user_pages(current, mm, address, 1, 0, 0, &page, NULL);
263         if (err >= 0) {
264                 key->shared.pgoff =
265                         page->index << (PAGE_CACHE_SHIFT - PAGE_SHIFT);
266                 put_page(page);
267                 return 0;
268         }
269         return err;
270 }
271 EXPORT_SYMBOL_GPL(get_futex_key);
272
273 /*
274  * Take a reference to the resource addressed by a key.
275  * Can be called while holding spinlocks.
276  *
277  */
278 inline void get_futex_key_refs(union futex_key *key)
279 {
280         if (key->both.ptr == 0)
281                 return;
282         switch (key->both.offset & (FUT_OFF_INODE|FUT_OFF_MMSHARED)) {
283                 case FUT_OFF_INODE:
284                         atomic_inc(&key->shared.inode->i_count);
285                         break;
286                 case FUT_OFF_MMSHARED:
287                         atomic_inc(&key->private.mm->mm_count);
288                         break;
289         }
290 }
291 EXPORT_SYMBOL_GPL(get_futex_key_refs);
292
293 /*
294  * Drop a reference to the resource addressed by a key.
295  * The hash bucket spinlock must not be held.
296  */
297 void drop_futex_key_refs(union futex_key *key)
298 {
299         if (!key->both.ptr)
300                 return;
301         switch (key->both.offset & (FUT_OFF_INODE|FUT_OFF_MMSHARED)) {
302                 case FUT_OFF_INODE:
303                         iput(key->shared.inode);
304                         break;
305                 case FUT_OFF_MMSHARED:
306                         mmdrop(key->private.mm);
307                         break;
308         }
309 }
310 EXPORT_SYMBOL_GPL(drop_futex_key_refs);
311
312 static u32 cmpxchg_futex_value_locked(u32 __user *uaddr, u32 uval, u32 newval)
313 {
314         u32 curval;
315
316         pagefault_disable();
317         curval = futex_atomic_cmpxchg_inatomic(uaddr, uval, newval);
318         pagefault_enable();
319
320         return curval;
321 }
322
323 static int get_futex_value_locked(u32 *dest, u32 __user *from)
324 {
325         int ret;
326
327         pagefault_disable();
328         ret = __copy_from_user_inatomic(dest, from, sizeof(u32));
329         pagefault_enable();
330
331         return ret ? -EFAULT : 0;
332 }
333
334 /*
335  * Fault handling.
336  * if fshared is non NULL, current->mm->mmap_sem is already held
337  */
338 static int futex_handle_fault(unsigned long address,
339                               struct rw_semaphore *fshared, int attempt)
340 {
341         struct vm_area_struct * vma;
342         struct mm_struct *mm = current->mm;
343         int ret = -EFAULT;
344
345         if (attempt > 2)
346                 return ret;
347
348         if (!fshared)
349                 down_read(&mm->mmap_sem);
350         vma = find_vma(mm, address);
351         if (vma && address >= vma->vm_start &&
352             (vma->vm_flags & VM_WRITE)) {
353                 int fault;
354                 fault = handle_mm_fault(mm, vma, address, 1);
355                 if (unlikely((fault & VM_FAULT_ERROR))) {
356 #if 0
357                         /* XXX: let's do this when we verify it is OK */
358                         if (ret & VM_FAULT_OOM)
359                                 ret = -ENOMEM;
360 #endif
361                 } else {
362                         ret = 0;
363                         if (fault & VM_FAULT_MAJOR)
364                                 current->maj_flt++;
365                         else
366                                 current->min_flt++;
367                 }
368         }
369         if (!fshared)
370                 up_read(&mm->mmap_sem);
371         return ret;
372 }
373
374 /*
375  * PI code:
376  */
377 static int refill_pi_state_cache(void)
378 {
379         struct futex_pi_state *pi_state;
380
381         if (likely(current->pi_state_cache))
382                 return 0;
383
384         pi_state = kzalloc(sizeof(*pi_state), GFP_KERNEL);
385
386         if (!pi_state)
387                 return -ENOMEM;
388
389         INIT_LIST_HEAD(&pi_state->list);
390         /* pi_mutex gets initialized later */
391         pi_state->owner = NULL;
392         atomic_set(&pi_state->refcount, 1);
393
394         current->pi_state_cache = pi_state;
395
396         return 0;
397 }
398
399 static struct futex_pi_state * alloc_pi_state(void)
400 {
401         struct futex_pi_state *pi_state = current->pi_state_cache;
402
403         WARN_ON(!pi_state);
404         current->pi_state_cache = NULL;
405
406         return pi_state;
407 }
408
409 static void free_pi_state(struct futex_pi_state *pi_state)
410 {
411         if (!atomic_dec_and_test(&pi_state->refcount))
412                 return;
413
414         /*
415          * If pi_state->owner is NULL, the owner is most probably dying
416          * and has cleaned up the pi_state already
417          */
418         if (pi_state->owner) {
419                 spin_lock_irq(&pi_state->owner->pi_lock);
420                 list_del_init(&pi_state->list);
421                 spin_unlock_irq(&pi_state->owner->pi_lock);
422
423                 rt_mutex_proxy_unlock(&pi_state->pi_mutex, pi_state->owner);
424         }
425
426         if (current->pi_state_cache)
427                 kfree(pi_state);
428         else {
429                 /*
430                  * pi_state->list is already empty.
431                  * clear pi_state->owner.
432                  * refcount is at 0 - put it back to 1.
433                  */
434                 pi_state->owner = NULL;
435                 atomic_set(&pi_state->refcount, 1);
436                 current->pi_state_cache = pi_state;
437         }
438 }
439
440 /*
441  * Look up the task based on what TID userspace gave us.
442  * We dont trust it.
443  */
444 static struct task_struct * futex_find_get_task(pid_t pid)
445 {
446         struct task_struct *p;
447
448         rcu_read_lock();
449         p = find_task_by_vpid(pid);
450         if (!p || ((current->euid != p->euid) && (current->euid != p->uid)))
451                 p = ERR_PTR(-ESRCH);
452         else
453                 get_task_struct(p);
454
455         rcu_read_unlock();
456
457         return p;
458 }
459
460 /*
461  * This task is holding PI mutexes at exit time => bad.
462  * Kernel cleans up PI-state, but userspace is likely hosed.
463  * (Robust-futex cleanup is separate and might save the day for userspace.)
464  */
465 void exit_pi_state_list(struct task_struct *curr)
466 {
467         struct list_head *next, *head = &curr->pi_state_list;
468         struct futex_pi_state *pi_state;
469         struct futex_hash_bucket *hb;
470         union futex_key key;
471
472         /*
473          * We are a ZOMBIE and nobody can enqueue itself on
474          * pi_state_list anymore, but we have to be careful
475          * versus waiters unqueueing themselves:
476          */
477         spin_lock_irq(&curr->pi_lock);
478         while (!list_empty(head)) {
479
480                 next = head->next;
481                 pi_state = list_entry(next, struct futex_pi_state, list);
482                 key = pi_state->key;
483                 hb = hash_futex(&key);
484                 spin_unlock_irq(&curr->pi_lock);
485
486                 spin_lock(&hb->lock);
487
488                 spin_lock_irq(&curr->pi_lock);
489                 /*
490                  * We dropped the pi-lock, so re-check whether this
491                  * task still owns the PI-state:
492                  */
493                 if (head->next != next) {
494                         spin_unlock(&hb->lock);
495                         continue;
496                 }
497
498                 WARN_ON(pi_state->owner != curr);
499                 WARN_ON(list_empty(&pi_state->list));
500                 list_del_init(&pi_state->list);
501                 pi_state->owner = NULL;
502                 spin_unlock_irq(&curr->pi_lock);
503
504                 rt_mutex_unlock(&pi_state->pi_mutex);
505
506                 spin_unlock(&hb->lock);
507
508                 spin_lock_irq(&curr->pi_lock);
509         }
510         spin_unlock_irq(&curr->pi_lock);
511 }
512
513 static int
514 lookup_pi_state(u32 uval, struct futex_hash_bucket *hb,
515                 union futex_key *key, struct futex_pi_state **ps)
516 {
517         struct futex_pi_state *pi_state = NULL;
518         struct futex_q *this, *next;
519         struct plist_head *head;
520         struct task_struct *p;
521         pid_t pid = uval & FUTEX_TID_MASK;
522
523         head = &hb->chain;
524
525         plist_for_each_entry_safe(this, next, head, list) {
526                 if (match_futex(&this->key, key)) {
527                         /*
528                          * Another waiter already exists - bump up
529                          * the refcount and return its pi_state:
530                          */
531                         pi_state = this->pi_state;
532                         /*
533                          * Userspace might have messed up non PI and PI futexes
534                          */
535                         if (unlikely(!pi_state))
536                                 return -EINVAL;
537
538                         WARN_ON(!atomic_read(&pi_state->refcount));
539                         WARN_ON(pid && pi_state->owner &&
540                                 pi_state->owner->pid != pid);
541
542                         atomic_inc(&pi_state->refcount);
543                         *ps = pi_state;
544
545                         return 0;
546                 }
547         }
548
549         /*
550          * We are the first waiter - try to look up the real owner and attach
551          * the new pi_state to it, but bail out when TID = 0
552          */
553         if (!pid)
554                 return -ESRCH;
555         p = futex_find_get_task(pid);
556         if (IS_ERR(p))
557                 return PTR_ERR(p);
558
559         /*
560          * We need to look at the task state flags to figure out,
561          * whether the task is exiting. To protect against the do_exit
562          * change of the task flags, we do this protected by
563          * p->pi_lock:
564          */
565         spin_lock_irq(&p->pi_lock);
566         if (unlikely(p->flags & PF_EXITING)) {
567                 /*
568                  * The task is on the way out. When PF_EXITPIDONE is
569                  * set, we know that the task has finished the
570                  * cleanup:
571                  */
572                 int ret = (p->flags & PF_EXITPIDONE) ? -ESRCH : -EAGAIN;
573
574                 spin_unlock_irq(&p->pi_lock);
575                 put_task_struct(p);
576                 return ret;
577         }
578
579         pi_state = alloc_pi_state();
580
581         /*
582          * Initialize the pi_mutex in locked state and make 'p'
583          * the owner of it:
584          */
585         rt_mutex_init_proxy_locked(&pi_state->pi_mutex, p);
586
587         /* Store the key for possible exit cleanups: */
588         pi_state->key = *key;
589
590         WARN_ON(!list_empty(&pi_state->list));
591         list_add(&pi_state->list, &p->pi_state_list);
592         pi_state->owner = p;
593         spin_unlock_irq(&p->pi_lock);
594
595         put_task_struct(p);
596
597         *ps = pi_state;
598
599         return 0;
600 }
601
602 /*
603  * The hash bucket lock must be held when this is called.
604  * Afterwards, the futex_q must not be accessed.
605  */
606 static void wake_futex(struct futex_q *q)
607 {
608         plist_del(&q->list, &q->list.plist);
609         if (q->filp)
610                 send_sigio(&q->filp->f_owner, q->fd, POLL_IN);
611         /*
612          * The lock in wake_up_all() is a crucial memory barrier after the
613          * plist_del() and also before assigning to q->lock_ptr.
614          */
615         wake_up_all(&q->waiters);
616         /*
617          * The waiting task can free the futex_q as soon as this is written,
618          * without taking any locks.  This must come last.
619          *
620          * A memory barrier is required here to prevent the following store
621          * to lock_ptr from getting ahead of the wakeup. Clearing the lock
622          * at the end of wake_up_all() does not prevent this store from
623          * moving.
624          */
625         smp_wmb();
626         q->lock_ptr = NULL;
627 }
628
629 static int wake_futex_pi(u32 __user *uaddr, u32 uval, struct futex_q *this)
630 {
631         struct task_struct *new_owner;
632         struct futex_pi_state *pi_state = this->pi_state;
633         u32 curval, newval;
634
635         if (!pi_state)
636                 return -EINVAL;
637
638         spin_lock(&pi_state->pi_mutex.wait_lock);
639         new_owner = rt_mutex_next_owner(&pi_state->pi_mutex);
640
641         /*
642          * This happens when we have stolen the lock and the original
643          * pending owner did not enqueue itself back on the rt_mutex.
644          * Thats not a tragedy. We know that way, that a lock waiter
645          * is on the fly. We make the futex_q waiter the pending owner.
646          */
647         if (!new_owner)
648                 new_owner = this->task;
649
650         /*
651          * We pass it to the next owner. (The WAITERS bit is always
652          * kept enabled while there is PI state around. We must also
653          * preserve the owner died bit.)
654          */
655         if (!(uval & FUTEX_OWNER_DIED)) {
656                 int ret = 0;
657
658                 newval = FUTEX_WAITERS | task_pid_vnr(new_owner);
659
660                 curval = cmpxchg_futex_value_locked(uaddr, uval, newval);
661
662                 if (curval == -EFAULT)
663                         ret = -EFAULT;
664                 if (curval != uval)
665                         ret = -EINVAL;
666                 if (ret) {
667                         spin_unlock(&pi_state->pi_mutex.wait_lock);
668                         return ret;
669                 }
670         }
671
672         spin_lock_irq(&pi_state->owner->pi_lock);
673         WARN_ON(list_empty(&pi_state->list));
674         list_del_init(&pi_state->list);
675         spin_unlock_irq(&pi_state->owner->pi_lock);
676
677         spin_lock_irq(&new_owner->pi_lock);
678         WARN_ON(!list_empty(&pi_state->list));
679         list_add(&pi_state->list, &new_owner->pi_state_list);
680         pi_state->owner = new_owner;
681         spin_unlock_irq(&new_owner->pi_lock);
682
683         spin_unlock(&pi_state->pi_mutex.wait_lock);
684         rt_mutex_unlock(&pi_state->pi_mutex);
685
686         return 0;
687 }
688
689 static int unlock_futex_pi(u32 __user *uaddr, u32 uval)
690 {
691         u32 oldval;
692
693         /*
694          * There is no waiter, so we unlock the futex. The owner died
695          * bit has not to be preserved here. We are the owner:
696          */
697         oldval = cmpxchg_futex_value_locked(uaddr, uval, 0);
698
699         if (oldval == -EFAULT)
700                 return oldval;
701         if (oldval != uval)
702                 return -EAGAIN;
703
704         return 0;
705 }
706
707 /*
708  * Express the locking dependencies for lockdep:
709  */
710 static inline void
711 double_lock_hb(struct futex_hash_bucket *hb1, struct futex_hash_bucket *hb2)
712 {
713         if (hb1 <= hb2) {
714                 spin_lock(&hb1->lock);
715                 if (hb1 < hb2)
716                         spin_lock_nested(&hb2->lock, SINGLE_DEPTH_NESTING);
717         } else { /* hb1 > hb2 */
718                 spin_lock(&hb2->lock);
719                 spin_lock_nested(&hb1->lock, SINGLE_DEPTH_NESTING);
720         }
721 }
722
723 /*
724  * Wake up all waiters hashed on the physical page that is mapped
725  * to this virtual address:
726  */
727 static int futex_wake(u32 __user *uaddr, struct rw_semaphore *fshared,
728                       int nr_wake)
729 {
730         struct futex_hash_bucket *hb;
731         struct futex_q *this, *next;
732         struct plist_head *head;
733         union futex_key key;
734         int ret;
735
736         futex_lock_mm(fshared);
737
738         ret = get_futex_key(uaddr, fshared, &key);
739         if (unlikely(ret != 0))
740                 goto out;
741
742         hb = hash_futex(&key);
743         spin_lock(&hb->lock);
744         head = &hb->chain;
745
746         plist_for_each_entry_safe(this, next, head, list) {
747                 if (match_futex (&this->key, &key)) {
748                         if (this->pi_state) {
749                                 ret = -EINVAL;
750                                 break;
751                         }
752                         wake_futex(this);
753                         if (++ret >= nr_wake)
754                                 break;
755                 }
756         }
757
758         spin_unlock(&hb->lock);
759 out:
760         futex_unlock_mm(fshared);
761         return ret;
762 }
763
764 /*
765  * Wake up all waiters hashed on the physical page that is mapped
766  * to this virtual address:
767  */
768 static int
769 futex_wake_op(u32 __user *uaddr1, struct rw_semaphore *fshared,
770               u32 __user *uaddr2,
771               int nr_wake, int nr_wake2, int op)
772 {
773         union futex_key key1, key2;
774         struct futex_hash_bucket *hb1, *hb2;
775         struct plist_head *head;
776         struct futex_q *this, *next;
777         int ret, op_ret, attempt = 0;
778
779 retryfull:
780         futex_lock_mm(fshared);
781
782         ret = get_futex_key(uaddr1, fshared, &key1);
783         if (unlikely(ret != 0))
784                 goto out;
785         ret = get_futex_key(uaddr2, fshared, &key2);
786         if (unlikely(ret != 0))
787                 goto out;
788
789         hb1 = hash_futex(&key1);
790         hb2 = hash_futex(&key2);
791
792 retry:
793         double_lock_hb(hb1, hb2);
794
795         op_ret = futex_atomic_op_inuser(op, uaddr2);
796         if (unlikely(op_ret < 0)) {
797                 u32 dummy;
798
799                 spin_unlock(&hb1->lock);
800                 if (hb1 != hb2)
801                         spin_unlock(&hb2->lock);
802
803 #ifndef CONFIG_MMU
804                 /*
805                  * we don't get EFAULT from MMU faults if we don't have an MMU,
806                  * but we might get them from range checking
807                  */
808                 ret = op_ret;
809                 goto out;
810 #endif
811
812                 if (unlikely(op_ret != -EFAULT)) {
813                         ret = op_ret;
814                         goto out;
815                 }
816
817                 /*
818                  * futex_atomic_op_inuser needs to both read and write
819                  * *(int __user *)uaddr2, but we can't modify it
820                  * non-atomically.  Therefore, if get_user below is not
821                  * enough, we need to handle the fault ourselves, while
822                  * still holding the mmap_sem.
823                  */
824                 if (attempt++) {
825                         ret = futex_handle_fault((unsigned long)uaddr2,
826                                                  fshared, attempt);
827                         if (ret)
828                                 goto out;
829                         goto retry;
830                 }
831
832                 /*
833                  * If we would have faulted, release mmap_sem,
834                  * fault it in and start all over again.
835                  */
836                 futex_unlock_mm(fshared);
837
838                 ret = get_user(dummy, uaddr2);
839                 if (ret)
840                         return ret;
841
842                 goto retryfull;
843         }
844
845         head = &hb1->chain;
846
847         plist_for_each_entry_safe(this, next, head, list) {
848                 if (match_futex (&this->key, &key1)) {
849                         wake_futex(this);
850                         if (++ret >= nr_wake)
851                                 break;
852                 }
853         }
854
855         if (op_ret > 0) {
856                 head = &hb2->chain;
857
858                 op_ret = 0;
859                 plist_for_each_entry_safe(this, next, head, list) {
860                         if (match_futex (&this->key, &key2)) {
861                                 wake_futex(this);
862                                 if (++op_ret >= nr_wake2)
863                                         break;
864                         }
865                 }
866                 ret += op_ret;
867         }
868
869         spin_unlock(&hb1->lock);
870         if (hb1 != hb2)
871                 spin_unlock(&hb2->lock);
872 out:
873         futex_unlock_mm(fshared);
874
875         return ret;
876 }
877
878 /*
879  * Requeue all waiters hashed on one physical page to another
880  * physical page.
881  */
882 static int futex_requeue(u32 __user *uaddr1, struct rw_semaphore *fshared,
883                          u32 __user *uaddr2,
884                          int nr_wake, int nr_requeue, u32 *cmpval)
885 {
886         union futex_key key1, key2;
887         struct futex_hash_bucket *hb1, *hb2;
888         struct plist_head *head1;
889         struct futex_q *this, *next;
890         int ret, drop_count = 0;
891
892  retry:
893         futex_lock_mm(fshared);
894
895         ret = get_futex_key(uaddr1, fshared, &key1);
896         if (unlikely(ret != 0))
897                 goto out;
898         ret = get_futex_key(uaddr2, fshared, &key2);
899         if (unlikely(ret != 0))
900                 goto out;
901
902         hb1 = hash_futex(&key1);
903         hb2 = hash_futex(&key2);
904
905         double_lock_hb(hb1, hb2);
906
907         if (likely(cmpval != NULL)) {
908                 u32 curval;
909
910                 ret = get_futex_value_locked(&curval, uaddr1);
911
912                 if (unlikely(ret)) {
913                         spin_unlock(&hb1->lock);
914                         if (hb1 != hb2)
915                                 spin_unlock(&hb2->lock);
916
917                         /*
918                          * If we would have faulted, release mmap_sem, fault
919                          * it in and start all over again.
920                          */
921                         futex_unlock_mm(fshared);
922
923                         ret = get_user(curval, uaddr1);
924
925                         if (!ret)
926                                 goto retry;
927
928                         return ret;
929                 }
930                 if (curval != *cmpval) {
931                         ret = -EAGAIN;
932                         goto out_unlock;
933                 }
934         }
935
936         head1 = &hb1->chain;
937         plist_for_each_entry_safe(this, next, head1, list) {
938                 if (!match_futex (&this->key, &key1))
939                         continue;
940                 if (++ret <= nr_wake) {
941                         wake_futex(this);
942                 } else {
943                         /*
944                          * If key1 and key2 hash to the same bucket, no need to
945                          * requeue.
946                          */
947                         if (likely(head1 != &hb2->chain)) {
948                                 plist_del(&this->list, &hb1->chain);
949                                 plist_add(&this->list, &hb2->chain);
950                                 this->lock_ptr = &hb2->lock;
951 #ifdef CONFIG_DEBUG_PI_LIST
952                                 this->list.plist.lock = &hb2->lock;
953 #endif
954                         }
955                         this->key = key2;
956                         get_futex_key_refs(&key2);
957                         drop_count++;
958
959                         if (ret - nr_wake >= nr_requeue)
960                                 break;
961                 }
962         }
963
964 out_unlock:
965         spin_unlock(&hb1->lock);
966         if (hb1 != hb2)
967                 spin_unlock(&hb2->lock);
968
969         /* drop_futex_key_refs() must be called outside the spinlocks. */
970         while (--drop_count >= 0)
971                 drop_futex_key_refs(&key1);
972
973 out:
974         futex_unlock_mm(fshared);
975         return ret;
976 }
977
978 /* The key must be already stored in q->key. */
979 static inline struct futex_hash_bucket *
980 queue_lock(struct futex_q *q, int fd, struct file *filp)
981 {
982         struct futex_hash_bucket *hb;
983
984         q->fd = fd;
985         q->filp = filp;
986
987         init_waitqueue_head(&q->waiters);
988
989         get_futex_key_refs(&q->key);
990         hb = hash_futex(&q->key);
991         q->lock_ptr = &hb->lock;
992
993         spin_lock(&hb->lock);
994         return hb;
995 }
996
997 static inline void __queue_me(struct futex_q *q, struct futex_hash_bucket *hb)
998 {
999         int prio;
1000
1001         /*
1002          * The priority used to register this element is
1003          * - either the real thread-priority for the real-time threads
1004          * (i.e. threads with a priority lower than MAX_RT_PRIO)
1005          * - or MAX_RT_PRIO for non-RT threads.
1006          * Thus, all RT-threads are woken first in priority order, and
1007          * the others are woken last, in FIFO order.
1008          */
1009         prio = min(current->normal_prio, MAX_RT_PRIO);
1010
1011         plist_node_init(&q->list, prio);
1012 #ifdef CONFIG_DEBUG_PI_LIST
1013         q->list.plist.lock = &hb->lock;
1014 #endif
1015         plist_add(&q->list, &hb->chain);
1016         q->task = current;
1017         spin_unlock(&hb->lock);
1018 }
1019
1020 static inline void
1021 queue_unlock(struct futex_q *q, struct futex_hash_bucket *hb)
1022 {
1023         spin_unlock(&hb->lock);
1024         drop_futex_key_refs(&q->key);
1025 }
1026
1027 /*
1028  * queue_me and unqueue_me must be called as a pair, each
1029  * exactly once.  They are called with the hashed spinlock held.
1030  */
1031
1032 /* The key must be already stored in q->key. */
1033 static void queue_me(struct futex_q *q, int fd, struct file *filp)
1034 {
1035         struct futex_hash_bucket *hb;
1036
1037         hb = queue_lock(q, fd, filp);
1038         __queue_me(q, hb);
1039 }
1040
1041 /* Return 1 if we were still queued (ie. 0 means we were woken) */
1042 static int unqueue_me(struct futex_q *q)
1043 {
1044         spinlock_t *lock_ptr;
1045         int ret = 0;
1046
1047         /* In the common case we don't take the spinlock, which is nice. */
1048  retry:
1049         lock_ptr = q->lock_ptr;
1050         barrier();
1051         if (lock_ptr != NULL) {
1052                 spin_lock(lock_ptr);
1053                 /*
1054                  * q->lock_ptr can change between reading it and
1055                  * spin_lock(), causing us to take the wrong lock.  This
1056                  * corrects the race condition.
1057                  *
1058                  * Reasoning goes like this: if we have the wrong lock,
1059                  * q->lock_ptr must have changed (maybe several times)
1060                  * between reading it and the spin_lock().  It can
1061                  * change again after the spin_lock() but only if it was
1062                  * already changed before the spin_lock().  It cannot,
1063                  * however, change back to the original value.  Therefore
1064                  * we can detect whether we acquired the correct lock.
1065                  */
1066                 if (unlikely(lock_ptr != q->lock_ptr)) {
1067                         spin_unlock(lock_ptr);
1068                         goto retry;
1069                 }
1070                 WARN_ON(plist_node_empty(&q->list));
1071                 plist_del(&q->list, &q->list.plist);
1072
1073                 BUG_ON(q->pi_state);
1074
1075                 spin_unlock(lock_ptr);
1076                 ret = 1;
1077         }
1078
1079         drop_futex_key_refs(&q->key);
1080         return ret;
1081 }
1082
1083 /*
1084  * PI futexes can not be requeued and must remove themself from the
1085  * hash bucket. The hash bucket lock (i.e. lock_ptr) is held on entry
1086  * and dropped here.
1087  */
1088 static void unqueue_me_pi(struct futex_q *q)
1089 {
1090         WARN_ON(plist_node_empty(&q->list));
1091         plist_del(&q->list, &q->list.plist);
1092
1093         BUG_ON(!q->pi_state);
1094         free_pi_state(q->pi_state);
1095         q->pi_state = NULL;
1096
1097         spin_unlock(q->lock_ptr);
1098
1099         drop_futex_key_refs(&q->key);
1100 }
1101
1102 /*
1103  * Fixup the pi_state owner with current.
1104  *
1105  * Must be called with hash bucket lock held and mm->sem held for non
1106  * private futexes.
1107  */
1108 static int fixup_pi_state_owner(u32 __user *uaddr, struct futex_q *q,
1109                                 struct task_struct *curr)
1110 {
1111         u32 newtid = task_pid_vnr(curr) | FUTEX_WAITERS;
1112         struct futex_pi_state *pi_state = q->pi_state;
1113         u32 uval, curval, newval;
1114         int ret;
1115
1116         /* Owner died? */
1117         if (pi_state->owner != NULL) {
1118                 spin_lock_irq(&pi_state->owner->pi_lock);
1119                 WARN_ON(list_empty(&pi_state->list));
1120                 list_del_init(&pi_state->list);
1121                 spin_unlock_irq(&pi_state->owner->pi_lock);
1122         } else
1123                 newtid |= FUTEX_OWNER_DIED;
1124
1125         pi_state->owner = curr;
1126
1127         spin_lock_irq(&curr->pi_lock);
1128         WARN_ON(!list_empty(&pi_state->list));
1129         list_add(&pi_state->list, &curr->pi_state_list);
1130         spin_unlock_irq(&curr->pi_lock);
1131
1132         /*
1133          * We own it, so we have to replace the pending owner
1134          * TID. This must be atomic as we have preserve the
1135          * owner died bit here.
1136          */
1137         ret = get_futex_value_locked(&uval, uaddr);
1138
1139         while (!ret) {
1140                 newval = (uval & FUTEX_OWNER_DIED) | newtid;
1141
1142                 curval = cmpxchg_futex_value_locked(uaddr, uval, newval);
1143
1144                 if (curval == -EFAULT)
1145                         ret = -EFAULT;
1146                 if (curval == uval)
1147                         break;
1148                 uval = curval;
1149         }
1150         return ret;
1151 }
1152
1153 /*
1154  * In case we must use restart_block to restart a futex_wait,
1155  * we encode in the 'arg3' shared capability
1156  */
1157 #define ARG3_SHARED  1
1158
1159 static long futex_wait_restart(struct restart_block *restart);
1160
1161 static int futex_wait(u32 __user *uaddr, struct rw_semaphore *fshared,
1162                       u32 val, ktime_t *abs_time)
1163 {
1164         struct task_struct *curr = current;
1165         DECLARE_WAITQUEUE(wait, curr);
1166         struct futex_hash_bucket *hb;
1167         struct futex_q q;
1168         u32 uval;
1169         int ret;
1170         struct hrtimer_sleeper t;
1171         int rem = 0;
1172
1173         q.pi_state = NULL;
1174  retry:
1175         futex_lock_mm(fshared);
1176
1177         ret = get_futex_key(uaddr, fshared, &q.key);
1178         if (unlikely(ret != 0))
1179                 goto out_release_sem;
1180
1181         hb = queue_lock(&q, -1, NULL);
1182
1183         /*
1184          * Access the page AFTER the futex is queued.
1185          * Order is important:
1186          *
1187          *   Userspace waiter: val = var; if (cond(val)) futex_wait(&var, val);
1188          *   Userspace waker:  if (cond(var)) { var = new; futex_wake(&var); }
1189          *
1190          * The basic logical guarantee of a futex is that it blocks ONLY
1191          * if cond(var) is known to be true at the time of blocking, for
1192          * any cond.  If we queued after testing *uaddr, that would open
1193          * a race condition where we could block indefinitely with
1194          * cond(var) false, which would violate the guarantee.
1195          *
1196          * A consequence is that futex_wait() can return zero and absorb
1197          * a wakeup when *uaddr != val on entry to the syscall.  This is
1198          * rare, but normal.
1199          *
1200          * for shared futexes, we hold the mmap semaphore, so the mapping
1201          * cannot have changed since we looked it up in get_futex_key.
1202          */
1203         ret = get_futex_value_locked(&uval, uaddr);
1204
1205         if (unlikely(ret)) {
1206                 queue_unlock(&q, hb);
1207
1208                 /*
1209                  * If we would have faulted, release mmap_sem, fault it in and
1210                  * start all over again.
1211                  */
1212                 futex_unlock_mm(fshared);
1213
1214                 ret = get_user(uval, uaddr);
1215
1216                 if (!ret)
1217                         goto retry;
1218                 return ret;
1219         }
1220         ret = -EWOULDBLOCK;
1221         if (uval != val)
1222                 goto out_unlock_release_sem;
1223
1224         /* Only actually queue if *uaddr contained val.  */
1225         __queue_me(&q, hb);
1226
1227         /*
1228          * Now the futex is queued and we have checked the data, we
1229          * don't want to hold mmap_sem while we sleep.
1230          */
1231         futex_unlock_mm(fshared);
1232
1233         /*
1234          * There might have been scheduling since the queue_me(), as we
1235          * cannot hold a spinlock across the get_user() in case it
1236          * faults, and we cannot just set TASK_INTERRUPTIBLE state when
1237          * queueing ourselves into the futex hash.  This code thus has to
1238          * rely on the futex_wake() code removing us from hash when it
1239          * wakes us up.
1240          */
1241
1242         /* add_wait_queue is the barrier after __set_current_state. */
1243         __set_current_state(TASK_INTERRUPTIBLE);
1244         add_wait_queue(&q.waiters, &wait);
1245         /*
1246          * !plist_node_empty() is safe here without any lock.
1247          * q.lock_ptr != 0 is not safe, because of ordering against wakeup.
1248          */
1249         if (likely(!plist_node_empty(&q.list))) {
1250                 if (!abs_time)
1251                         schedule();
1252                 else {
1253                         hrtimer_init(&t.timer, CLOCK_MONOTONIC, HRTIMER_MODE_ABS);
1254                         hrtimer_init_sleeper(&t, current);
1255                         t.timer.expires = *abs_time;
1256
1257                         hrtimer_start(&t.timer, t.timer.expires, HRTIMER_MODE_ABS);
1258
1259                         /*
1260                          * the timer could have already expired, in which
1261                          * case current would be flagged for rescheduling.
1262                          * Don't bother calling schedule.
1263                          */
1264                         if (likely(t.task))
1265                                 schedule();
1266
1267                         hrtimer_cancel(&t.timer);
1268
1269                         /* Flag if a timeout occured */
1270                         rem = (t.task == NULL);
1271                 }
1272         }
1273         __set_current_state(TASK_RUNNING);
1274
1275         /*
1276          * NOTE: we don't remove ourselves from the waitqueue because
1277          * we are the only user of it.
1278          */
1279
1280         /* If we were woken (and unqueued), we succeeded, whatever. */
1281         if (!unqueue_me(&q))
1282                 return 0;
1283         if (rem)
1284                 return -ETIMEDOUT;
1285
1286         /*
1287          * We expect signal_pending(current), but another thread may
1288          * have handled it for us already.
1289          */
1290         if (!abs_time)
1291                 return -ERESTARTSYS;
1292         else {
1293                 struct restart_block *restart;
1294                 restart = &current_thread_info()->restart_block;
1295                 restart->fn = futex_wait_restart;
1296                 restart->arg0 = (unsigned long)uaddr;
1297                 restart->arg1 = (unsigned long)val;
1298                 restart->arg2 = (unsigned long)abs_time;
1299                 restart->arg3 = 0;
1300                 if (fshared)
1301                         restart->arg3 |= ARG3_SHARED;
1302                 return -ERESTART_RESTARTBLOCK;
1303         }
1304
1305  out_unlock_release_sem:
1306         queue_unlock(&q, hb);
1307
1308  out_release_sem:
1309         futex_unlock_mm(fshared);
1310         return ret;
1311 }
1312
1313
1314 static long futex_wait_restart(struct restart_block *restart)
1315 {
1316         u32 __user *uaddr = (u32 __user *)restart->arg0;
1317         u32 val = (u32)restart->arg1;
1318         ktime_t *abs_time = (ktime_t *)restart->arg2;
1319         struct rw_semaphore *fshared = NULL;
1320
1321         restart->fn = do_no_restart_syscall;
1322         if (restart->arg3 & ARG3_SHARED)
1323                 fshared = &current->mm->mmap_sem;
1324         return (long)futex_wait(uaddr, fshared, val, abs_time);
1325 }
1326
1327
1328 /*
1329  * Userspace tried a 0 -> TID atomic transition of the futex value
1330  * and failed. The kernel side here does the whole locking operation:
1331  * if there are waiters then it will block, it does PI, etc. (Due to
1332  * races the kernel might see a 0 value of the futex too.)
1333  */
1334 static int futex_lock_pi(u32 __user *uaddr, struct rw_semaphore *fshared,
1335                          int detect, ktime_t *time, int trylock)
1336 {
1337         struct hrtimer_sleeper timeout, *to = NULL;
1338         struct task_struct *curr = current;
1339         struct futex_hash_bucket *hb;
1340         u32 uval, newval, curval;
1341         struct futex_q q;
1342         int ret, lock_taken, ownerdied = 0, attempt = 0;
1343
1344         if (refill_pi_state_cache())
1345                 return -ENOMEM;
1346
1347         if (time) {
1348                 to = &timeout;
1349                 hrtimer_init(&to->timer, CLOCK_REALTIME, HRTIMER_MODE_ABS);
1350                 hrtimer_init_sleeper(to, current);
1351                 to->timer.expires = *time;
1352         }
1353
1354         q.pi_state = NULL;
1355  retry:
1356         futex_lock_mm(fshared);
1357
1358         ret = get_futex_key(uaddr, fshared, &q.key);
1359         if (unlikely(ret != 0))
1360                 goto out_release_sem;
1361
1362  retry_unlocked:
1363         hb = queue_lock(&q, -1, NULL);
1364
1365  retry_locked:
1366         ret = lock_taken = 0;
1367
1368         /*
1369          * To avoid races, we attempt to take the lock here again
1370          * (by doing a 0 -> TID atomic cmpxchg), while holding all
1371          * the locks. It will most likely not succeed.
1372          */
1373         newval = task_pid_vnr(current);
1374
1375         curval = cmpxchg_futex_value_locked(uaddr, 0, newval);
1376
1377         if (unlikely(curval == -EFAULT))
1378                 goto uaddr_faulted;
1379
1380         /*
1381          * Detect deadlocks. In case of REQUEUE_PI this is a valid
1382          * situation and we return success to user space.
1383          */
1384         if (unlikely((curval & FUTEX_TID_MASK) == task_pid_vnr(current))) {
1385                 ret = -EDEADLK;
1386                 goto out_unlock_release_sem;
1387         }
1388
1389         /*
1390          * Surprise - we got the lock. Just return to userspace:
1391          */
1392         if (unlikely(!curval))
1393                 goto out_unlock_release_sem;
1394
1395         uval = curval;
1396
1397         /*
1398          * Set the WAITERS flag, so the owner will know it has someone
1399          * to wake at next unlock
1400          */
1401         newval = curval | FUTEX_WAITERS;
1402
1403         /*
1404          * There are two cases, where a futex might have no owner (the
1405          * owner TID is 0): OWNER_DIED. We take over the futex in this
1406          * case. We also do an unconditional take over, when the owner
1407          * of the futex died.
1408          *
1409          * This is safe as we are protected by the hash bucket lock !
1410          */
1411         if (unlikely(ownerdied || !(curval & FUTEX_TID_MASK))) {
1412                 /* Keep the OWNER_DIED bit */
1413                 newval = (curval & ~FUTEX_TID_MASK) | task_pid_vnr(current);
1414                 ownerdied = 0;
1415                 lock_taken = 1;
1416         }
1417
1418         curval = cmpxchg_futex_value_locked(uaddr, uval, newval);
1419
1420         if (unlikely(curval == -EFAULT))
1421                 goto uaddr_faulted;
1422         if (unlikely(curval != uval))
1423                 goto retry_locked;
1424
1425         /*
1426          * We took the lock due to owner died take over.
1427          */
1428         if (unlikely(lock_taken))
1429                 goto out_unlock_release_sem;
1430
1431         /*
1432          * We dont have the lock. Look up the PI state (or create it if
1433          * we are the first waiter):
1434          */
1435         ret = lookup_pi_state(uval, hb, &q.key, &q.pi_state);
1436
1437         if (unlikely(ret)) {
1438                 switch (ret) {
1439
1440                 case -EAGAIN:
1441                         /*
1442                          * Task is exiting and we just wait for the
1443                          * exit to complete.
1444                          */
1445                         queue_unlock(&q, hb);
1446                         futex_unlock_mm(fshared);
1447                         cond_resched();
1448                         goto retry;
1449
1450                 case -ESRCH:
1451                         /*
1452                          * No owner found for this futex. Check if the
1453                          * OWNER_DIED bit is set to figure out whether
1454                          * this is a robust futex or not.
1455                          */
1456                         if (get_futex_value_locked(&curval, uaddr))
1457                                 goto uaddr_faulted;
1458
1459                         /*
1460                          * We simply start over in case of a robust
1461                          * futex. The code above will take the futex
1462                          * and return happy.
1463                          */
1464                         if (curval & FUTEX_OWNER_DIED) {
1465                                 ownerdied = 1;
1466                                 goto retry_locked;
1467                         }
1468                 default:
1469                         goto out_unlock_release_sem;
1470                 }
1471         }
1472
1473         /*
1474          * Only actually queue now that the atomic ops are done:
1475          */
1476         __queue_me(&q, hb);
1477
1478         /*
1479          * Now the futex is queued and we have checked the data, we
1480          * don't want to hold mmap_sem while we sleep.
1481          */
1482         futex_unlock_mm(fshared);
1483
1484         WARN_ON(!q.pi_state);
1485         /*
1486          * Block on the PI mutex:
1487          */
1488         if (!trylock)
1489                 ret = rt_mutex_timed_lock(&q.pi_state->pi_mutex, to, 1);
1490         else {
1491                 ret = rt_mutex_trylock(&q.pi_state->pi_mutex);
1492                 /* Fixup the trylock return value: */
1493                 ret = ret ? 0 : -EWOULDBLOCK;
1494         }
1495
1496         futex_lock_mm(fshared);
1497         spin_lock(q.lock_ptr);
1498
1499         if (!ret) {
1500                 /*
1501                  * Got the lock. We might not be the anticipated owner
1502                  * if we did a lock-steal - fix up the PI-state in
1503                  * that case:
1504                  */
1505                 if (q.pi_state->owner != curr)
1506                         ret = fixup_pi_state_owner(uaddr, &q, curr);
1507         } else {
1508                 /*
1509                  * Catch the rare case, where the lock was released
1510                  * when we were on the way back before we locked the
1511                  * hash bucket.
1512                  */
1513                 if (q.pi_state->owner == curr &&
1514                     rt_mutex_trylock(&q.pi_state->pi_mutex)) {
1515                         ret = 0;
1516                 } else {
1517                         /*
1518                          * Paranoia check. If we did not take the lock
1519                          * in the trylock above, then we should not be
1520                          * the owner of the rtmutex, neither the real
1521                          * nor the pending one:
1522                          */
1523                         if (rt_mutex_owner(&q.pi_state->pi_mutex) == curr)
1524                                 printk(KERN_ERR "futex_lock_pi: ret = %d "
1525                                        "pi-mutex: %p pi-state %p\n", ret,
1526                                        q.pi_state->pi_mutex.owner,
1527                                        q.pi_state->owner);
1528                 }
1529         }
1530
1531         /* Unqueue and drop the lock */
1532         unqueue_me_pi(&q);
1533         futex_unlock_mm(fshared);
1534
1535         return ret != -EINTR ? ret : -ERESTARTNOINTR;
1536
1537  out_unlock_release_sem:
1538         queue_unlock(&q, hb);
1539
1540  out_release_sem:
1541         futex_unlock_mm(fshared);
1542         return ret;
1543
1544  uaddr_faulted:
1545         /*
1546          * We have to r/w  *(int __user *)uaddr, but we can't modify it
1547          * non-atomically.  Therefore, if get_user below is not
1548          * enough, we need to handle the fault ourselves, while
1549          * still holding the mmap_sem.
1550          *
1551          * ... and hb->lock. :-) --ANK
1552          */
1553         queue_unlock(&q, hb);
1554
1555         if (attempt++) {
1556                 ret = futex_handle_fault((unsigned long)uaddr, fshared,
1557                                          attempt);
1558                 if (ret)
1559                         goto out_release_sem;
1560                 goto retry_unlocked;
1561         }
1562
1563         futex_unlock_mm(fshared);
1564
1565         ret = get_user(uval, uaddr);
1566         if (!ret && (uval != -EFAULT))
1567                 goto retry;
1568
1569         return ret;
1570 }
1571
1572 /*
1573  * Userspace attempted a TID -> 0 atomic transition, and failed.
1574  * This is the in-kernel slowpath: we look up the PI state (if any),
1575  * and do the rt-mutex unlock.
1576  */
1577 static int futex_unlock_pi(u32 __user *uaddr, struct rw_semaphore *fshared)
1578 {
1579         struct futex_hash_bucket *hb;
1580         struct futex_q *this, *next;
1581         u32 uval;
1582         struct plist_head *head;
1583         union futex_key key;
1584         int ret, attempt = 0;
1585
1586 retry:
1587         if (get_user(uval, uaddr))
1588                 return -EFAULT;
1589         /*
1590          * We release only a lock we actually own:
1591          */
1592         if ((uval & FUTEX_TID_MASK) != task_pid_vnr(current))
1593                 return -EPERM;
1594         /*
1595          * First take all the futex related locks:
1596          */
1597         futex_lock_mm(fshared);
1598
1599         ret = get_futex_key(uaddr, fshared, &key);
1600         if (unlikely(ret != 0))
1601                 goto out;
1602
1603         hb = hash_futex(&key);
1604 retry_unlocked:
1605         spin_lock(&hb->lock);
1606
1607         /*
1608          * To avoid races, try to do the TID -> 0 atomic transition
1609          * again. If it succeeds then we can return without waking
1610          * anyone else up:
1611          */
1612         if (!(uval & FUTEX_OWNER_DIED))
1613                 uval = cmpxchg_futex_value_locked(uaddr, task_pid_vnr(current), 0);
1614
1615
1616         if (unlikely(uval == -EFAULT))
1617                 goto pi_faulted;
1618         /*
1619          * Rare case: we managed to release the lock atomically,
1620          * no need to wake anyone else up:
1621          */
1622         if (unlikely(uval == task_pid_vnr(current)))
1623                 goto out_unlock;
1624
1625         /*
1626          * Ok, other tasks may need to be woken up - check waiters
1627          * and do the wakeup if necessary:
1628          */
1629         head = &hb->chain;
1630
1631         plist_for_each_entry_safe(this, next, head, list) {
1632                 if (!match_futex (&this->key, &key))
1633                         continue;
1634                 ret = wake_futex_pi(uaddr, uval, this);
1635                 /*
1636                  * The atomic access to the futex value
1637                  * generated a pagefault, so retry the
1638                  * user-access and the wakeup:
1639                  */
1640                 if (ret == -EFAULT)
1641                         goto pi_faulted;
1642                 goto out_unlock;
1643         }
1644         /*
1645          * No waiters - kernel unlocks the futex:
1646          */
1647         if (!(uval & FUTEX_OWNER_DIED)) {
1648                 ret = unlock_futex_pi(uaddr, uval);
1649                 if (ret == -EFAULT)
1650                         goto pi_faulted;
1651         }
1652
1653 out_unlock:
1654         spin_unlock(&hb->lock);
1655 out:
1656         futex_unlock_mm(fshared);
1657
1658         return ret;
1659
1660 pi_faulted:
1661         /*
1662          * We have to r/w  *(int __user *)uaddr, but we can't modify it
1663          * non-atomically.  Therefore, if get_user below is not
1664          * enough, we need to handle the fault ourselves, while
1665          * still holding the mmap_sem.
1666          *
1667          * ... and hb->lock. --ANK
1668          */
1669         spin_unlock(&hb->lock);
1670
1671         if (attempt++) {
1672                 ret = futex_handle_fault((unsigned long)uaddr, fshared,
1673                                          attempt);
1674                 if (ret)
1675                         goto out;
1676                 uval = 0;
1677                 goto retry_unlocked;
1678         }
1679
1680         futex_unlock_mm(fshared);
1681
1682         ret = get_user(uval, uaddr);
1683         if (!ret && (uval != -EFAULT))
1684                 goto retry;
1685
1686         return ret;
1687 }
1688
1689 static int futex_close(struct inode *inode, struct file *filp)
1690 {
1691         struct futex_q *q = filp->private_data;
1692
1693         unqueue_me(q);
1694         kfree(q);
1695
1696         return 0;
1697 }
1698
1699 /* This is one-shot: once it's gone off you need a new fd */
1700 static unsigned int futex_poll(struct file *filp,
1701                                struct poll_table_struct *wait)
1702 {
1703         struct futex_q *q = filp->private_data;
1704         int ret = 0;
1705
1706         poll_wait(filp, &q->waiters, wait);
1707
1708         /*
1709          * plist_node_empty() is safe here without any lock.
1710          * q->lock_ptr != 0 is not safe, because of ordering against wakeup.
1711          */
1712         if (plist_node_empty(&q->list))
1713                 ret = POLLIN | POLLRDNORM;
1714
1715         return ret;
1716 }
1717
1718 static const struct file_operations futex_fops = {
1719         .release        = futex_close,
1720         .poll           = futex_poll,
1721 };
1722
1723 /*
1724  * Signal allows caller to avoid the race which would occur if they
1725  * set the sigio stuff up afterwards.
1726  */
1727 static int futex_fd(u32 __user *uaddr, int signal)
1728 {
1729         struct futex_q *q;
1730         struct file *filp;
1731         int ret, err;
1732         struct rw_semaphore *fshared;
1733         static unsigned long printk_interval;
1734
1735         if (printk_timed_ratelimit(&printk_interval, 60 * 60 * 1000)) {
1736                 printk(KERN_WARNING "Process `%s' used FUTEX_FD, which "
1737                        "will be removed from the kernel in June 2007\n",
1738                        current->comm);
1739         }
1740
1741         ret = -EINVAL;
1742         if (!valid_signal(signal))
1743                 goto out;
1744
1745         ret = get_unused_fd();
1746         if (ret < 0)
1747                 goto out;
1748         filp = get_empty_filp();
1749         if (!filp) {
1750                 put_unused_fd(ret);
1751                 ret = -ENFILE;
1752                 goto out;
1753         }
1754         filp->f_op = &futex_fops;
1755         filp->f_path.mnt = mntget(futex_mnt);
1756         filp->f_path.dentry = dget(futex_mnt->mnt_root);
1757         filp->f_mapping = filp->f_path.dentry->d_inode->i_mapping;
1758
1759         if (signal) {
1760                 err = __f_setown(filp, task_pid(current), PIDTYPE_PID, 1);
1761                 if (err < 0) {
1762                         goto error;
1763                 }
1764                 filp->f_owner.signum = signal;
1765         }
1766
1767         q = kmalloc(sizeof(*q), GFP_KERNEL);
1768         if (!q) {
1769                 err = -ENOMEM;
1770                 goto error;
1771         }
1772         q->pi_state = NULL;
1773
1774         fshared = &current->mm->mmap_sem;
1775         down_read(fshared);
1776         err = get_futex_key(uaddr, fshared, &q->key);
1777
1778         if (unlikely(err != 0)) {
1779                 up_read(fshared);
1780                 kfree(q);
1781                 goto error;
1782         }
1783
1784         /*
1785          * queue_me() must be called before releasing mmap_sem, because
1786          * key->shared.inode needs to be referenced while holding it.
1787          */
1788         filp->private_data = q;
1789
1790         queue_me(q, ret, filp);
1791         up_read(fshared);
1792
1793         /* Now we map fd to filp, so userspace can access it */
1794         fd_install(ret, filp);
1795 out:
1796         return ret;
1797 error:
1798         put_unused_fd(ret);
1799         put_filp(filp);
1800         ret = err;
1801         goto out;
1802 }
1803
1804 /*
1805  * Support for robust futexes: the kernel cleans up held futexes at
1806  * thread exit time.
1807  *
1808  * Implementation: user-space maintains a per-thread list of locks it
1809  * is holding. Upon do_exit(), the kernel carefully walks this list,
1810  * and marks all locks that are owned by this thread with the
1811  * FUTEX_OWNER_DIED bit, and wakes up a waiter (if any). The list is
1812  * always manipulated with the lock held, so the list is private and
1813  * per-thread. Userspace also maintains a per-thread 'list_op_pending'
1814  * field, to allow the kernel to clean up if the thread dies after
1815  * acquiring the lock, but just before it could have added itself to
1816  * the list. There can only be one such pending lock.
1817  */
1818
1819 /**
1820  * sys_set_robust_list - set the robust-futex list head of a task
1821  * @head: pointer to the list-head
1822  * @len: length of the list-head, as userspace expects
1823  */
1824 asmlinkage long
1825 sys_set_robust_list(struct robust_list_head __user *head,
1826                     size_t len)
1827 {
1828         /*
1829          * The kernel knows only one size for now:
1830          */
1831         if (unlikely(len != sizeof(*head)))
1832                 return -EINVAL;
1833
1834         current->robust_list = head;
1835
1836         return 0;
1837 }
1838
1839 /**
1840  * sys_get_robust_list - get the robust-futex list head of a task
1841  * @pid: pid of the process [zero for current task]
1842  * @head_ptr: pointer to a list-head pointer, the kernel fills it in
1843  * @len_ptr: pointer to a length field, the kernel fills in the header size
1844  */
1845 asmlinkage long
1846 sys_get_robust_list(int pid, struct robust_list_head __user * __user *head_ptr,
1847                     size_t __user *len_ptr)
1848 {
1849         struct robust_list_head __user *head;
1850         unsigned long ret;
1851
1852         if (!pid)
1853                 head = current->robust_list;
1854         else {
1855                 struct task_struct *p;
1856
1857                 ret = -ESRCH;
1858                 rcu_read_lock();
1859                 p = find_task_by_vpid(pid);
1860                 if (!p)
1861                         goto err_unlock;
1862                 ret = -EPERM;
1863                 if ((current->euid != p->euid) && (current->euid != p->uid) &&
1864                                 !capable(CAP_SYS_PTRACE))
1865                         goto err_unlock;
1866                 head = p->robust_list;
1867                 rcu_read_unlock();
1868         }
1869
1870         if (put_user(sizeof(*head), len_ptr))
1871                 return -EFAULT;
1872         return put_user(head, head_ptr);
1873
1874 err_unlock:
1875         rcu_read_unlock();
1876
1877         return ret;
1878 }
1879
1880 /*
1881  * Process a futex-list entry, check whether it's owned by the
1882  * dying task, and do notification if so:
1883  */
1884 int handle_futex_death(u32 __user *uaddr, struct task_struct *curr, int pi)
1885 {
1886         u32 uval, nval, mval;
1887
1888 retry:
1889         if (get_user(uval, uaddr))
1890                 return -1;
1891
1892         if ((uval & FUTEX_TID_MASK) == task_pid_vnr(curr)) {
1893                 /*
1894                  * Ok, this dying thread is truly holding a futex
1895                  * of interest. Set the OWNER_DIED bit atomically
1896                  * via cmpxchg, and if the value had FUTEX_WAITERS
1897                  * set, wake up a waiter (if any). (We have to do a
1898                  * futex_wake() even if OWNER_DIED is already set -
1899                  * to handle the rare but possible case of recursive
1900                  * thread-death.) The rest of the cleanup is done in
1901                  * userspace.
1902                  */
1903                 mval = (uval & FUTEX_WAITERS) | FUTEX_OWNER_DIED;
1904                 nval = futex_atomic_cmpxchg_inatomic(uaddr, uval, mval);
1905
1906                 if (nval == -EFAULT)
1907                         return -1;
1908
1909                 if (nval != uval)
1910                         goto retry;
1911
1912                 /*
1913                  * Wake robust non-PI futexes here. The wakeup of
1914                  * PI futexes happens in exit_pi_state():
1915                  */
1916                 if (!pi && (uval & FUTEX_WAITERS))
1917                                 futex_wake(uaddr, &curr->mm->mmap_sem, 1);
1918         }
1919         return 0;
1920 }
1921
1922 /*
1923  * Fetch a robust-list pointer. Bit 0 signals PI futexes:
1924  */
1925 static inline int fetch_robust_entry(struct robust_list __user **entry,
1926                                      struct robust_list __user * __user *head,
1927                                      int *pi)
1928 {
1929         unsigned long uentry;
1930
1931         if (get_user(uentry, (unsigned long __user *)head))
1932                 return -EFAULT;
1933
1934         *entry = (void __user *)(uentry & ~1UL);
1935         *pi = uentry & 1;
1936
1937         return 0;
1938 }
1939
1940 /*
1941  * Walk curr->robust_list (very carefully, it's a userspace list!)
1942  * and mark any locks found there dead, and notify any waiters.
1943  *
1944  * We silently return on any sign of list-walking problem.
1945  */
1946 void exit_robust_list(struct task_struct *curr)
1947 {
1948         struct robust_list_head __user *head = curr->robust_list;
1949         struct robust_list __user *entry, *next_entry, *pending;
1950         unsigned int limit = ROBUST_LIST_LIMIT, pi, next_pi, pip;
1951         unsigned long futex_offset;
1952         int rc;
1953
1954         /*
1955          * Fetch the list head (which was registered earlier, via
1956          * sys_set_robust_list()):
1957          */
1958         if (fetch_robust_entry(&entry, &head->list.next, &pi))
1959                 return;
1960         /*
1961          * Fetch the relative futex offset:
1962          */
1963         if (get_user(futex_offset, &head->futex_offset))
1964                 return;
1965         /*
1966          * Fetch any possibly pending lock-add first, and handle it
1967          * if it exists:
1968          */
1969         if (fetch_robust_entry(&pending, &head->list_op_pending, &pip))
1970                 return;
1971
1972         next_entry = NULL;      /* avoid warning with gcc */
1973         while (entry != &head->list) {
1974                 /*
1975                  * Fetch the next entry in the list before calling
1976                  * handle_futex_death:
1977                  */
1978                 rc = fetch_robust_entry(&next_entry, &entry->next, &next_pi);
1979                 /*
1980                  * A pending lock might already be on the list, so
1981                  * don't process it twice:
1982                  */
1983                 if (entry != pending)
1984                         if (handle_futex_death((void __user *)entry + futex_offset,
1985                                                 curr, pi))
1986                                 return;
1987                 if (rc)
1988                         return;
1989                 entry = next_entry;
1990                 pi = next_pi;
1991                 /*
1992                  * Avoid excessively long or circular lists:
1993                  */
1994                 if (!--limit)
1995                         break;
1996
1997                 cond_resched();
1998         }
1999
2000         if (pending)
2001                 handle_futex_death((void __user *)pending + futex_offset,
2002                                    curr, pip);
2003 }
2004
2005 long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,
2006                 u32 __user *uaddr2, u32 val2, u32 val3)
2007 {
2008         int ret;
2009         int cmd = op & FUTEX_CMD_MASK;
2010         struct rw_semaphore *fshared = NULL;
2011
2012         if (!(op & FUTEX_PRIVATE_FLAG))
2013                 fshared = &current->mm->mmap_sem;
2014
2015         switch (cmd) {
2016         case FUTEX_WAIT:
2017                 ret = futex_wait(uaddr, fshared, val, timeout);
2018                 break;
2019         case FUTEX_WAKE:
2020                 ret = futex_wake(uaddr, fshared, val);
2021                 break;
2022         case FUTEX_FD:
2023                 /* non-zero val means F_SETOWN(getpid()) & F_SETSIG(val) */
2024                 ret = futex_fd(uaddr, val);
2025                 break;
2026         case FUTEX_REQUEUE:
2027                 ret = futex_requeue(uaddr, fshared, uaddr2, val, val2, NULL);
2028                 break;
2029         case FUTEX_CMP_REQUEUE:
2030                 ret = futex_requeue(uaddr, fshared, uaddr2, val, val2, &val3);
2031                 break;
2032         case FUTEX_WAKE_OP:
2033                 ret = futex_wake_op(uaddr, fshared, uaddr2, val, val2, val3);
2034                 break;
2035         case FUTEX_LOCK_PI:
2036                 ret = futex_lock_pi(uaddr, fshared, val, timeout, 0);
2037                 break;
2038         case FUTEX_UNLOCK_PI:
2039                 ret = futex_unlock_pi(uaddr, fshared);
2040                 break;
2041         case FUTEX_TRYLOCK_PI:
2042                 ret = futex_lock_pi(uaddr, fshared, 0, timeout, 1);
2043                 break;
2044         default:
2045                 ret = -ENOSYS;
2046         }
2047         return ret;
2048 }
2049
2050
2051 asmlinkage long sys_futex(u32 __user *uaddr, int op, u32 val,
2052                           struct timespec __user *utime, u32 __user *uaddr2,
2053                           u32 val3)
2054 {
2055         struct timespec ts;
2056         ktime_t t, *tp = NULL;
2057         u32 val2 = 0;
2058         int cmd = op & FUTEX_CMD_MASK;
2059
2060         if (utime && (cmd == FUTEX_WAIT || cmd == FUTEX_LOCK_PI)) {
2061                 if (copy_from_user(&ts, utime, sizeof(ts)) != 0)
2062                         return -EFAULT;
2063                 if (!timespec_valid(&ts))
2064                         return -EINVAL;
2065
2066                 t = timespec_to_ktime(ts);
2067                 if (cmd == FUTEX_WAIT)
2068                         t = ktime_add(ktime_get(), t);
2069                 tp = &t;
2070         }
2071         /*
2072          * requeue parameter in 'utime' if cmd == FUTEX_REQUEUE.
2073          * number of waiters to wake in 'utime' if cmd == FUTEX_WAKE_OP.
2074          */
2075         if (cmd == FUTEX_REQUEUE || cmd == FUTEX_CMP_REQUEUE ||
2076             cmd == FUTEX_WAKE_OP)
2077                 val2 = (u32) (unsigned long) utime;
2078
2079         return do_futex(uaddr, op, val, tp, uaddr2, val2, val3);
2080 }
2081
2082 static int futexfs_get_sb(struct file_system_type *fs_type,
2083                           int flags, const char *dev_name, void *data,
2084                           struct vfsmount *mnt)
2085 {
2086         return get_sb_pseudo(fs_type, "futex", NULL, FUTEXFS_SUPER_MAGIC, mnt);
2087 }
2088
2089 static struct file_system_type futex_fs_type = {
2090         .name           = "futexfs",
2091         .get_sb         = futexfs_get_sb,
2092         .kill_sb        = kill_anon_super,
2093 };
2094
2095 static int __init init(void)
2096 {
2097         int i = register_filesystem(&futex_fs_type);
2098
2099         if (i)
2100                 return i;
2101
2102         futex_mnt = kern_mount(&futex_fs_type);
2103         if (IS_ERR(futex_mnt)) {
2104                 unregister_filesystem(&futex_fs_type);
2105                 return PTR_ERR(futex_mnt);
2106         }
2107
2108         for (i = 0; i < ARRAY_SIZE(futex_queues); i++) {
2109                 plist_head_init(&futex_queues[i].chain, &futex_queues[i].lock);
2110                 spin_lock_init(&futex_queues[i].lock);
2111         }
2112         return 0;
2113 }
2114 __initcall(init);