Skip to content

Commit 3b63a55

Browse files
author
peterz@infradead.org
committed
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
1 parent cb8c431 commit 3b63a55

File tree

5 files changed

+18
-15
lines changed

5 files changed

+18
-15
lines changed

kernel/futex/core.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ static u64 get_inode_sequence_number(struct inode *inode)
193193
/**
194194
* get_futex_key() - Get parameters which are the keys for a futex
195195
* @uaddr: virtual address of the futex
196-
* @fshared: false for a PROCESS_PRIVATE futex, true for PROCESS_SHARED
196+
* @flags: FLAGS_*
197197
* @key: address where result is stored.
198198
* @rw: mapping needs to be read/write (values: FUTEX_READ,
199199
* FUTEX_WRITE)
@@ -217,7 +217,7 @@ static u64 get_inode_sequence_number(struct inode *inode)
217217
*
218218
* lock_page() might sleep, the caller should not hold a spinlock.
219219
*/
220-
int get_futex_key(u32 __user *uaddr, bool fshared, union futex_key *key,
220+
int get_futex_key(u32 __user *uaddr, unsigned int flags, union futex_key *key,
221221
enum futex_access rw)
222222
{
223223
unsigned long address = (unsigned long)uaddr;
@@ -226,6 +226,9 @@ int get_futex_key(u32 __user *uaddr, bool fshared, union futex_key *key,
226226
struct folio *folio;
227227
struct address_space *mapping;
228228
int err, ro = 0;
229+
bool fshared;
230+
231+
fshared = flags & FLAGS_SHARED;
229232

230233
/*
231234
* The futex address must be "naturally" aligned.

kernel/futex/futex.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ enum futex_access {
184184
FUTEX_WRITE
185185
};
186186

187-
extern int get_futex_key(u32 __user *uaddr, bool fshared, union futex_key *key,
187+
extern int get_futex_key(u32 __user *uaddr, unsigned int flags, union futex_key *key,
188188
enum futex_access rw);
189189

190190
extern struct hrtimer_sleeper *

kernel/futex/pi.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -933,7 +933,7 @@ int futex_lock_pi(u32 __user *uaddr, unsigned int flags, ktime_t *time, int tryl
933933
to = futex_setup_timer(time, &timeout, flags, 0);
934934

935935
retry:
936-
ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &q.key, FUTEX_WRITE);
936+
ret = get_futex_key(uaddr, flags, &q.key, FUTEX_WRITE);
937937
if (unlikely(ret != 0))
938938
goto out;
939939

@@ -1129,7 +1129,7 @@ int futex_unlock_pi(u32 __user *uaddr, unsigned int flags)
11291129
if ((uval & FUTEX_TID_MASK) != vpid)
11301130
return -EPERM;
11311131

1132-
ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &key, FUTEX_WRITE);
1132+
ret = get_futex_key(uaddr, flags, &key, FUTEX_WRITE);
11331133
if (ret)
11341134
return ret;
11351135

kernel/futex/requeue.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -424,10 +424,10 @@ int futex_requeue(u32 __user *uaddr1, unsigned int flags, u32 __user *uaddr2,
424424
}
425425

426426
retry:
427-
ret = get_futex_key(uaddr1, flags & FLAGS_SHARED, &key1, FUTEX_READ);
427+
ret = get_futex_key(uaddr1, flags, &key1, FUTEX_READ);
428428
if (unlikely(ret != 0))
429429
return ret;
430-
ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2,
430+
ret = get_futex_key(uaddr2, flags, &key2,
431431
requeue_pi ? FUTEX_WRITE : FUTEX_READ);
432432
if (unlikely(ret != 0))
433433
return ret;
@@ -789,7 +789,7 @@ int futex_wait_requeue_pi(u32 __user *uaddr, unsigned int flags,
789789
*/
790790
rt_mutex_init_waiter(&rt_waiter);
791791

792-
ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2, FUTEX_WRITE);
792+
ret = get_futex_key(uaddr2, flags, &key2, FUTEX_WRITE);
793793
if (unlikely(ret != 0))
794794
goto out;
795795

kernel/futex/waitwake.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -145,13 +145,13 @@ int futex_wake(u32 __user *uaddr, unsigned int flags, int nr_wake, u32 bitset)
145145
struct futex_hash_bucket *hb;
146146
struct futex_q *this, *next;
147147
union futex_key key = FUTEX_KEY_INIT;
148-
int ret;
149148
DEFINE_WAKE_Q(wake_q);
149+
int ret;
150150

151151
if (!bitset)
152152
return -EINVAL;
153153

154-
ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &key, FUTEX_READ);
154+
ret = get_futex_key(uaddr, flags, &key, FUTEX_READ);
155155
if (unlikely(ret != 0))
156156
return ret;
157157

@@ -248,10 +248,10 @@ int futex_wake_op(u32 __user *uaddr1, unsigned int flags, u32 __user *uaddr2,
248248
DEFINE_WAKE_Q(wake_q);
249249

250250
retry:
251-
ret = get_futex_key(uaddr1, flags & FLAGS_SHARED, &key1, FUTEX_READ);
251+
ret = get_futex_key(uaddr1, flags, &key1, FUTEX_READ);
252252
if (unlikely(ret != 0))
253253
return ret;
254-
ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2, FUTEX_WRITE);
254+
ret = get_futex_key(uaddr2, flags, &key2, FUTEX_WRITE);
255255
if (unlikely(ret != 0))
256256
return ret;
257257

@@ -426,7 +426,7 @@ static int futex_wait_multiple_setup(struct futex_vector *vs, int count, int *wo
426426
continue;
427427

428428
ret = get_futex_key(u64_to_user_ptr(vs[i].w.uaddr),
429-
vs[i].w.flags & FLAGS_SHARED,
429+
vs[i].w.flags,
430430
&vs[i].q.key, FUTEX_READ);
431431

432432
if (unlikely(ret))
@@ -438,7 +438,7 @@ static int futex_wait_multiple_setup(struct futex_vector *vs, int count, int *wo
438438
for (i = 0; i < count; i++) {
439439
u32 __user *uaddr = (u32 __user *)(unsigned long)vs[i].w.uaddr;
440440
struct futex_q *q = &vs[i].q;
441-
u32 val = (u32)vs[i].w.val;
441+
u32 val = vs[i].w.val;
442442

443443
hb = futex_q_lock(q);
444444
ret = futex_get_value_locked(&uval, uaddr);
@@ -602,7 +602,7 @@ int futex_wait_setup(u32 __user *uaddr, u32 val, unsigned int flags,
602602
* while the syscall executes.
603603
*/
604604
retry:
605-
ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &q->key, FUTEX_READ);
605+
ret = get_futex_key(uaddr, flags, &q->key, FUTEX_READ);
606606
if (unlikely(ret != 0))
607607
return ret;
608608

0 commit comments

Comments
 (0)