futex_wait_requeue_pi — Wait on uaddr and take uaddr2
| int futex_wait_requeue_pi ( | u32 __user * uaddr, | 
| unsigned int flags, | |
| u32 val, | |
| ktime_t * abs_time, | |
| u32 bitset, | |
| u32 __user * uaddr2 ); | 
uaddrthe futex we initially wait on (non-pi)
flagsfutex flags (FLAGS_SHARED, FLAGS_CLOCKRT, etc.), they must be the same type, no requeueing from private to shared, etc.
valthe expected value of uaddr
abs_timeabsolute timeout
bitset32 bit wakeup bitset set by userspace, defaults to all
uaddr2the pi futex we will take prior to returning to user-space
   The caller will wait on uaddr and will be requeued by futex_requeue to
   uaddr2 which must be PI aware and unique from uaddr.  Normal wakeup will wake
   on uaddr2 and complete the acquisition of the rt_mutex prior to returning to
   userspace.  This ensures the rt_mutex maintains an owner when it has waiters;
   without one, the pi logic would not know which task to boost/deboost, if
   there was a need to.
   
   We call schedule in futex_wait_queue_me when we enqueue and return there
   via the following--
   1) wakeup on uaddr2 after an atomic lock acquisition by futex_requeue
   2) wakeup on uaddr2 after a requeue
   3) signal
   4) timeout
   
If 3, cleanup and return -ERESTARTNOINTR.
If 2, we may then block on trying to take the rt_mutex and return via: 5) successful lock 6) signal 7) timeout 8) other lock acquisition failure
If 6, return -EWOULDBLOCK (restarting the syscall would do the same).
If 4 or 7, we cleanup and return with -ETIMEDOUT.