Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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

+18 -15
+5 -2
kernel/futex/core.c
··· 193 193 /** 194 194 * get_futex_key() - Get parameters which are the keys for a futex 195 195 * @uaddr: virtual address of the futex 196 - * @fshared: false for a PROCESS_PRIVATE futex, true for PROCESS_SHARED 196 + * @flags: FLAGS_* 197 197 * @key: address where result is stored. 198 198 * @rw: mapping needs to be read/write (values: FUTEX_READ, 199 199 * FUTEX_WRITE) ··· 217 217 * 218 218 * lock_page() might sleep, the caller should not hold a spinlock. 219 219 */ 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, 221 221 enum futex_access rw) 222 222 { 223 223 unsigned long address = (unsigned long)uaddr; ··· 226 226 struct folio *folio; 227 227 struct address_space *mapping; 228 228 int err, ro = 0; 229 + bool fshared; 230 + 231 + fshared = flags & FLAGS_SHARED; 229 232 230 233 /* 231 234 * The futex address must be "naturally" aligned.
+1 -1
kernel/futex/futex.h
··· 184 184 FUTEX_WRITE 185 185 }; 186 186 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, 188 188 enum futex_access rw); 189 189 190 190 extern struct hrtimer_sleeper *
+2 -2
kernel/futex/pi.c
··· 933 933 to = futex_setup_timer(time, &timeout, flags, 0); 934 934 935 935 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); 937 937 if (unlikely(ret != 0)) 938 938 goto out; 939 939 ··· 1129 1129 if ((uval & FUTEX_TID_MASK) != vpid) 1130 1130 return -EPERM; 1131 1131 1132 - ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &key, FUTEX_WRITE); 1132 + ret = get_futex_key(uaddr, flags, &key, FUTEX_WRITE); 1133 1133 if (ret) 1134 1134 return ret; 1135 1135
+3 -3
kernel/futex/requeue.c
··· 424 424 } 425 425 426 426 retry: 427 - ret = get_futex_key(uaddr1, flags & FLAGS_SHARED, &key1, FUTEX_READ); 427 + ret = get_futex_key(uaddr1, flags, &key1, FUTEX_READ); 428 428 if (unlikely(ret != 0)) 429 429 return ret; 430 - ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2, 430 + ret = get_futex_key(uaddr2, flags, &key2, 431 431 requeue_pi ? FUTEX_WRITE : FUTEX_READ); 432 432 if (unlikely(ret != 0)) 433 433 return ret; ··· 789 789 */ 790 790 rt_mutex_init_waiter(&rt_waiter); 791 791 792 - ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2, FUTEX_WRITE); 792 + ret = get_futex_key(uaddr2, flags, &key2, FUTEX_WRITE); 793 793 if (unlikely(ret != 0)) 794 794 goto out; 795 795
+7 -7
kernel/futex/waitwake.c
··· 145 145 struct futex_hash_bucket *hb; 146 146 struct futex_q *this, *next; 147 147 union futex_key key = FUTEX_KEY_INIT; 148 - int ret; 149 148 DEFINE_WAKE_Q(wake_q); 149 + int ret; 150 150 151 151 if (!bitset) 152 152 return -EINVAL; 153 153 154 - ret = get_futex_key(uaddr, flags & FLAGS_SHARED, &key, FUTEX_READ); 154 + ret = get_futex_key(uaddr, flags, &key, FUTEX_READ); 155 155 if (unlikely(ret != 0)) 156 156 return ret; 157 157 ··· 248 248 DEFINE_WAKE_Q(wake_q); 249 249 250 250 retry: 251 - ret = get_futex_key(uaddr1, flags & FLAGS_SHARED, &key1, FUTEX_READ); 251 + ret = get_futex_key(uaddr1, flags, &key1, FUTEX_READ); 252 252 if (unlikely(ret != 0)) 253 253 return ret; 254 - ret = get_futex_key(uaddr2, flags & FLAGS_SHARED, &key2, FUTEX_WRITE); 254 + ret = get_futex_key(uaddr2, flags, &key2, FUTEX_WRITE); 255 255 if (unlikely(ret != 0)) 256 256 return ret; 257 257 ··· 426 426 continue; 427 427 428 428 ret = get_futex_key(u64_to_user_ptr(vs[i].w.uaddr), 429 - vs[i].w.flags & FLAGS_SHARED, 429 + vs[i].w.flags, 430 430 &vs[i].q.key, FUTEX_READ); 431 431 432 432 if (unlikely(ret)) ··· 438 438 for (i = 0; i < count; i++) { 439 439 u32 __user *uaddr = (u32 __user *)(unsigned long)vs[i].w.uaddr; 440 440 struct futex_q *q = &vs[i].q; 441 - u32 val = (u32)vs[i].w.val; 441 + u32 val = vs[i].w.val; 442 442 443 443 hb = futex_q_lock(q); 444 444 ret = futex_get_value_locked(&uval, uaddr); ··· 602 602 * while the syscall executes. 603 603 */ 604 604 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); 606 606 if (unlikely(ret != 0)) 607 607 return ret; 608 608