@ -200,8 +200,7 @@ static void drop_futex_key_refs(union futex_key *key)
* For other futexes , it points to & current - > mm - > mmap_sem and
* caller must have taken the reader lock . but NOT any spinlocks .
*/
static int get_futex_key ( u32 __user * uaddr , struct rw_semaphore * fshared ,
union futex_key * key )
static int get_futex_key ( u32 __user * uaddr , int fshared , union futex_key * key )
{
unsigned long address = ( unsigned long ) uaddr ;
struct mm_struct * mm = current - > mm ;
@ -268,7 +267,7 @@ again:
}
static inline
void put_futex_key ( struct rw_semaphore * fshared , union futex_key * key )
void put_futex_key ( int fshared , union futex_key * key )
{
drop_futex_key_refs ( key ) ;
}
@ -297,10 +296,8 @@ static int get_futex_value_locked(u32 *dest, u32 __user *from)
/*
* Fault handling .
* if fshared is non NULL , current - > mm - > mmap_sem is already held
*/
static int futex_handle_fault ( unsigned long address ,
struct rw_semaphore * fshared , int attempt )
static int futex_handle_fault ( unsigned long address , int attempt )
{
struct vm_area_struct * vma ;
struct mm_struct * mm = current - > mm ;
@ -687,8 +684,7 @@ double_lock_hb(struct futex_hash_bucket *hb1, struct futex_hash_bucket *hb2)
* Wake up all waiters hashed on the physical page that is mapped
* to this virtual address :
*/
static int futex_wake ( u32 __user * uaddr , struct rw_semaphore * fshared ,
int nr_wake , u32 bitset )
static int futex_wake ( u32 __user * uaddr , int fshared , int nr_wake , u32 bitset )
{
struct futex_hash_bucket * hb ;
struct futex_q * this , * next ;
@ -735,8 +731,7 @@ out:
* to this virtual address :
*/
static int
futex_wake_op ( u32 __user * uaddr1 , struct rw_semaphore * fshared ,
u32 __user * uaddr2 ,
futex_wake_op ( u32 __user * uaddr1 , int fshared , u32 __user * uaddr2 ,
int nr_wake , int nr_wake2 , int op )
{
union futex_key key1 = FUTEX_KEY_INIT , key2 = FUTEX_KEY_INIT ;
@ -790,7 +785,7 @@ retry:
*/
if ( attempt + + ) {
ret = futex_handle_fault ( ( unsigned long ) uaddr2 ,
fshared , attempt ) ;
attempt ) ;
if ( ret )
goto out ;
goto retry ;
@ -841,8 +836,7 @@ out:
* Requeue all waiters hashed on one physical page to another
* physical page .
*/
static int futex_requeue ( u32 __user * uaddr1 , struct rw_semaphore * fshared ,
u32 __user * uaddr2 ,
static int futex_requeue ( u32 __user * uaddr1 , int fshared , u32 __user * uaddr2 ,
int nr_wake , int nr_requeue , u32 * cmpval )
{
union futex_key key1 = FUTEX_KEY_INIT , key2 = FUTEX_KEY_INIT ;
@ -1048,8 +1042,7 @@ static void unqueue_me_pi(struct futex_q *q)
* private futexes .
*/
static int fixup_pi_state_owner ( u32 __user * uaddr , struct futex_q * q ,
struct task_struct * newowner ,
struct rw_semaphore * fshared )
struct task_struct * newowner , int fshared )
{
u32 newtid = task_pid_vnr ( newowner ) | FUTEX_WAITERS ;
struct futex_pi_state * pi_state = q - > pi_state ;
@ -1128,7 +1121,7 @@ retry:
handle_fault :
spin_unlock ( q - > lock_ptr ) ;
ret = futex_handle_fault ( ( unsigned long ) uaddr , fshared , attempt + + ) ;
ret = futex_handle_fault ( ( unsigned long ) uaddr , attempt + + ) ;
spin_lock ( q - > lock_ptr ) ;
@ -1152,7 +1145,7 @@ handle_fault:
static long futex_wait_restart ( struct restart_block * restart ) ;
static int futex_wait ( u32 __user * uaddr , struct rw_semaphore * fshared ,
static int futex_wait ( u32 __user * uaddr , int fshared ,
u32 val , ktime_t * abs_time , u32 bitset )
{
struct task_struct * curr = current ;
@ -1307,13 +1300,13 @@ static int futex_wait(u32 __user *uaddr, struct rw_semaphore *fshared,
static long futex_wait_restart ( struct restart_block * restart )
{
u32 __user * uaddr = ( u32 __user * ) restart - > futex . uaddr ;
struct rw_semaphore * fshared = NULL ;
int fshared = 0 ;
ktime_t t ;
t . tv64 = restart - > futex . time ;
restart - > fn = do_no_restart_syscall ;
if ( restart - > futex . flags & FLAGS_SHARED )
fshared = & current - > mm - > mmap_sem ;
fshared = 1 ;
return ( long ) futex_wait ( uaddr , fshared , restart - > futex . val , & t ,
restart - > futex . bitset ) ;
}
@ -1325,7 +1318,7 @@ static long futex_wait_restart(struct restart_block *restart)
* if there are waiters then it will block , it does PI , etc . ( Due to
* races the kernel might see a 0 value of the futex too . )
*/
static int futex_lock_pi ( u32 __user * uaddr , struct rw_semaphore * fshared ,
static int futex_lock_pi ( u32 __user * uaddr , int fshared ,
int detect , ktime_t * time , int trylock )
{
struct hrtimer_sleeper timeout , * to = NULL ;
@ -1571,8 +1564,7 @@ static int futex_lock_pi(u32 __user *uaddr, struct rw_semaphore *fshared,
queue_unlock ( & q , hb ) ;
if ( attempt + + ) {
ret = futex_handle_fault ( ( unsigned long ) uaddr , fshared ,
attempt ) ;
ret = futex_handle_fault ( ( unsigned long ) uaddr , attempt ) ;
if ( ret )
goto out_release_sem ;
goto retry_unlocked ;
@ -1592,7 +1584,7 @@ static int futex_lock_pi(u32 __user *uaddr, struct rw_semaphore *fshared,
* This is the in - kernel slowpath : we look up the PI state ( if any ) ,
* and do the rt - mutex unlock .
*/
static int futex_unlock_pi ( u32 __user * uaddr , struct rw_semaphore * fshared )
static int futex_unlock_pi ( u32 __user * uaddr , int fshared )
{
struct futex_hash_bucket * hb ;
struct futex_q * this , * next ;
@ -1683,8 +1675,7 @@ pi_faulted:
spin_unlock ( & hb - > lock ) ;
if ( attempt + + ) {
ret = futex_handle_fault ( ( unsigned long ) uaddr , fshared ,
attempt ) ;
ret = futex_handle_fault ( ( unsigned long ) uaddr , attempt ) ;
if ( ret )
goto out ;
uval = 0 ;
@ -1816,8 +1807,7 @@ retry:
* PI futexes happens in exit_pi_state ( ) :
*/
if ( ! pi & & ( uval & FUTEX_WAITERS ) )
futex_wake ( uaddr , & curr - > mm - > mmap_sem , 1 ,
FUTEX_BITSET_MATCH_ANY ) ;
futex_wake ( uaddr , 1 , 1 , FUTEX_BITSET_MATCH_ANY ) ;
}
return 0 ;
}
@ -1913,10 +1903,10 @@ long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,
{
int ret = - ENOSYS ;
int cmd = op & FUTEX_CMD_MASK ;
struct rw_semaphore * fshared = NULL ;
int fshared = 0 ;
if ( ! ( op & FUTEX_PRIVATE_FLAG ) )
fshared = & current - > mm - > mmap_sem ;
fshared = 1 ;
switch ( cmd ) {
case FUTEX_WAIT :