futex: Propagate flags into get_futex_key()
Instead of only passing FLAGS_SHARED as a boolean, pass down flags as a whole. No functional change intended. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/20230921105248.282857501@noisy.programming.kicks-ass.net
This commit is contained in:
parent
cb8c4312af
commit
3b63a55f49
@ -193,7 +193,7 @@ static u64 get_inode_sequence_number(struct inode *inode)
|
||||
/**
|
||||
* get_futex_key() - Get parameters which are the keys for a futex
|
||||
* @uaddr: virtual address of the futex
|
||||
* @fshared: false for a PROCESS_PRIVATE futex, true for PROCESS_SHARED
|
||||
* @flags: FLAGS_*
|
||||
* @key: address where result is stored.
|
||||
* @rw: mapping needs to be read/write (values: FUTEX_READ,
|
||||
* FUTEX_WRITE)
|
||||
@ -217,7 +217,7 @@ static u64 get_inode_sequence_number(struct inode *inode)
|
||||
*
|
||||
* lock_page() might sleep, the caller should not hold a spinlock.
|
||||
*/
|
||||
int get_futex_key(u32 __user *uaddr, bool fshared, union futex_key *key,
|
||||
int get_futex_key(u32 __user *uaddr, unsigned int flags, union futex_key *key,
|
||||
enum futex_access rw)
|
||||
{
|
||||
unsigned long address = (unsigned long)uaddr;
|
||||
@ -226,6 +226,9 @@ int get_futex_key(u32 __user *uaddr, bool fshared, union futex_key *key,
|
||||
struct folio *folio;
|
||||
struct address_space *mapping;
|
||||
int err, ro = 0;
|
||||
bool fshared;
|
||||
|
||||
fshared = flags & FLAGS_SHARED;
|
||||
|
||||
/*
|
||||
* The futex address must be "naturally" aligned.
|
||||
|
@ -184,7 +184,7 @@ enum futex_access {
|
||||
FUTEX_WRITE
|
||||
};
|
||||
|
||||
extern int get_futex_key(u32 __user *uaddr, bool fshared, union futex_key *key,
|
||||
extern int get_futex_key(u32 __user *uaddr, unsigned int flags, union futex_key *key,
|
||||
enum futex_access rw);
|
||||
|
||||
extern struct hrtimer_sleeper *
|
||||
|
@ -933,7 +933,7 @@ int futex_lock_pi(u32 __user *uaddr, unsigned int flags, ktime_t *time, int tryl
|
||||
to = futex_setup_timer(time, &timeout, flags, 0);
|
||||
|
||||
retry:
|
||||
ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &q.key, FUTEX_WRITE);
|
||||
ret = get_futex_key(uaddr, flags, &q.key, FUTEX_WRITE);
|
||||
if (unlikely(ret != 0))
|
||||
goto out;
|
||||
|
||||
@ -1129,7 +1129,7 @@ retry:
|
||||
if ((uval & FUTEX_TID_MASK) != vpid)
|
||||
return -EPERM;
|
||||
|
||||
ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &key, FUTEX_WRITE);
|
||||
ret = get_futex_key(uaddr, flags, &key, FUTEX_WRITE);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -424,10 +424,10 @@ int futex_requeue(u32 __user *uaddr1, unsigned int flags, u32 __user *uaddr2,
|
||||
}
|
||||
|
||||
retry:
|
||||
ret = get_futex_key(uaddr1, flags & FLAGS_SHARED, &key1, FUTEX_READ);
|
||||
ret = get_futex_key(uaddr1, flags, &key1, FUTEX_READ);
|
||||
if (unlikely(ret != 0))
|
||||
return ret;
|
||||
ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2,
|
||||
ret = get_futex_key(uaddr2, flags, &key2,
|
||||
requeue_pi ? FUTEX_WRITE : FUTEX_READ);
|
||||
if (unlikely(ret != 0))
|
||||
return ret;
|
||||
@ -789,7 +789,7 @@ int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags,
|
||||
*/
|
||||
rt_mutex_init_waiter(&rt_waiter);
|
||||
|
||||
ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2, FUTEX_WRITE);
|
||||
ret = get_futex_key(uaddr2, flags, &key2, FUTEX_WRITE);
|
||||
if (unlikely(ret != 0))
|
||||
goto out;
|
||||
|
||||
|
@ -145,13 +145,13 @@ int futex_wake(u32 __user *uaddr, unsigned int flags, int nr_wake, u32 bitset)
|
||||
struct futex_hash_bucket *hb;
|
||||
struct futex_q *this, *next;
|
||||
union futex_key key = FUTEX_KEY_INIT;
|
||||
int ret;
|
||||
DEFINE_WAKE_Q(wake_q);
|
||||
int ret;
|
||||
|
||||
if (!bitset)
|
||||
return -EINVAL;
|
||||
|
||||
ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &key, FUTEX_READ);
|
||||
ret = get_futex_key(uaddr, flags, &key, FUTEX_READ);
|
||||
if (unlikely(ret != 0))
|
||||
return ret;
|
||||
|
||||
@ -248,10 +248,10 @@ int futex_wake_op(u32 __user *uaddr1, unsigned int flags, u32 __user *uaddr2,
|
||||
DEFINE_WAKE_Q(wake_q);
|
||||
|
||||
retry:
|
||||
ret = get_futex_key(uaddr1, flags & FLAGS_SHARED, &key1, FUTEX_READ);
|
||||
ret = get_futex_key(uaddr1, flags, &key1, FUTEX_READ);
|
||||
if (unlikely(ret != 0))
|
||||
return ret;
|
||||
ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2, FUTEX_WRITE);
|
||||
ret = get_futex_key(uaddr2, flags, &key2, FUTEX_WRITE);
|
||||
if (unlikely(ret != 0))
|
||||
return ret;
|
||||
|
||||
@ -426,7 +426,7 @@ retry:
|
||||
continue;
|
||||
|
||||
ret = get_futex_key(u64_to_user_ptr(vs[i].w.uaddr),
|
||||
vs[i].w.flags & FLAGS_SHARED,
|
||||
vs[i].w.flags,
|
||||
&vs[i].q.key, FUTEX_READ);
|
||||
|
||||
if (unlikely(ret))
|
||||
@ -438,7 +438,7 @@ retry:
|
||||
for (i = 0; i < count; i++) {
|
||||
u32 __user *uaddr = (u32 __user *)(unsigned long)vs[i].w.uaddr;
|
||||
struct futex_q *q = &vs[i].q;
|
||||
u32 val = (u32)vs[i].w.val;
|
||||
u32 val = vs[i].w.val;
|
||||
|
||||
hb = futex_q_lock(q);
|
||||
ret = futex_get_value_locked(&uval, uaddr);
|
||||
@ -602,7 +602,7 @@ int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
|
||||
* while the syscall executes.
|
||||
*/
|
||||
retry:
|
||||
ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &q->key, FUTEX_READ);
|
||||
ret = get_futex_key(uaddr, flags, &q->key, FUTEX_READ);
|
||||
if (unlikely(ret != 0))
|
||||
return ret;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user