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: Add sys_futex_wake()

To complement sys_futex_waitv() add sys_futex_wake(). This syscall
implements what was previously known as FUTEX_WAKE_BITSET except it
uses 'unsigned long' for the bitmask and takes FUTEX2 flags.

The 'unsigned long' allows FUTEX2_SIZE_U64 on 64bit platforms.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
Link: https://lore.kernel.org/r/20230921105247.936205525@noisy.programming.kicks-ass.net

+56 -2
+1
arch/alpha/kernel/syscalls/syscall.tbl
··· 492 492 560 common set_mempolicy_home_node sys_ni_syscall 493 493 561 common cachestat sys_cachestat 494 494 562 common fchmodat2 sys_fchmodat2 495 + 563 common futex_wake sys_futex_wake
+1
arch/arm/tools/syscall.tbl
··· 466 466 450 common set_mempolicy_home_node sys_set_mempolicy_home_node 467 467 451 common cachestat sys_cachestat 468 468 452 common fchmodat2 sys_fchmodat2 469 + 454 common futex_wake sys_futex_wake
+1 -1
arch/arm64/include/asm/unistd.h
··· 39 39 #define __ARM_NR_compat_set_tls (__ARM_NR_COMPAT_BASE + 5) 40 40 #define __ARM_NR_COMPAT_END (__ARM_NR_COMPAT_BASE + 0x800) 41 41 42 - #define __NR_compat_syscalls 453 42 + #define __NR_compat_syscalls 455 43 43 #endif 44 44 45 45 #define __ARCH_WANT_SYS_CLONE
+2
arch/arm64/include/asm/unistd32.h
··· 911 911 __SYSCALL(__NR_cachestat, sys_cachestat) 912 912 #define __NR_fchmodat2 452 913 913 __SYSCALL(__NR_fchmodat2, sys_fchmodat2) 914 + #define __NR_futex_wake 454 915 + __SYSCALL(__NR_futex_wake, sys_futex_wake) 914 916 915 917 /* 916 918 * Please add new compat syscalls above this comment and update
+1
arch/ia64/kernel/syscalls/syscall.tbl
··· 373 373 450 common set_mempolicy_home_node sys_set_mempolicy_home_node 374 374 451 common cachestat sys_cachestat 375 375 452 common fchmodat2 sys_fchmodat2 376 + 454 common futex_wake sys_futex_wake
+1
arch/m68k/kernel/syscalls/syscall.tbl
··· 452 452 450 common set_mempolicy_home_node sys_set_mempolicy_home_node 453 453 451 common cachestat sys_cachestat 454 454 452 common fchmodat2 sys_fchmodat2 455 + 454 common futex_wake sys_futex_wake
+1
arch/microblaze/kernel/syscalls/syscall.tbl
··· 458 458 450 common set_mempolicy_home_node sys_set_mempolicy_home_node 459 459 451 common cachestat sys_cachestat 460 460 452 common fchmodat2 sys_fchmodat2 461 + 454 common futex_wake sys_futex_wake
+1
arch/mips/kernel/syscalls/syscall_n32.tbl
··· 391 391 450 n32 set_mempolicy_home_node sys_set_mempolicy_home_node 392 392 451 n32 cachestat sys_cachestat 393 393 452 n32 fchmodat2 sys_fchmodat2 394 + 454 n32 futex_wake sys_futex_wake
+1
arch/mips/kernel/syscalls/syscall_n64.tbl
··· 367 367 450 common set_mempolicy_home_node sys_set_mempolicy_home_node 368 368 451 n64 cachestat sys_cachestat 369 369 452 n64 fchmodat2 sys_fchmodat2 370 + 454 n64 futex_wake sys_futex_wake
+1
arch/mips/kernel/syscalls/syscall_o32.tbl
··· 440 440 450 o32 set_mempolicy_home_node sys_set_mempolicy_home_node 441 441 451 o32 cachestat sys_cachestat 442 442 452 o32 fchmodat2 sys_fchmodat2 443 + 454 o32 futex_wake sys_futex_wake
+1
arch/parisc/kernel/syscalls/syscall.tbl
··· 451 451 450 common set_mempolicy_home_node sys_set_mempolicy_home_node 452 452 451 common cachestat sys_cachestat 453 453 452 common fchmodat2 sys_fchmodat2 454 + 454 common futex_wake sys_futex_wake
+1
arch/powerpc/kernel/syscalls/syscall.tbl
··· 539 539 450 nospu set_mempolicy_home_node sys_set_mempolicy_home_node 540 540 451 common cachestat sys_cachestat 541 541 452 common fchmodat2 sys_fchmodat2 542 + 454 common futex_wake sys_futex_wake
+1
arch/s390/kernel/syscalls/syscall.tbl
··· 455 455 450 common set_mempolicy_home_node sys_set_mempolicy_home_node sys_set_mempolicy_home_node 456 456 451 common cachestat sys_cachestat sys_cachestat 457 457 452 common fchmodat2 sys_fchmodat2 sys_fchmodat2 458 + 454 common futex_wake sys_futex_wake sys_futex_wake
+1
arch/sh/kernel/syscalls/syscall.tbl
··· 455 455 450 common set_mempolicy_home_node sys_set_mempolicy_home_node 456 456 451 common cachestat sys_cachestat 457 457 452 common fchmodat2 sys_fchmodat2 458 + 454 common futex_wake sys_futex_wake
+1
arch/sparc/kernel/syscalls/syscall.tbl
··· 498 498 450 common set_mempolicy_home_node sys_set_mempolicy_home_node 499 499 451 common cachestat sys_cachestat 500 500 452 common fchmodat2 sys_fchmodat2 501 + 454 common futex_wake sys_futex_wake
+1
arch/x86/entry/syscalls/syscall_32.tbl
··· 457 457 450 i386 set_mempolicy_home_node sys_set_mempolicy_home_node 458 458 451 i386 cachestat sys_cachestat 459 459 452 i386 fchmodat2 sys_fchmodat2 460 + 454 i386 futex_wake sys_futex_wake
+1
arch/x86/entry/syscalls/syscall_64.tbl
··· 375 375 451 common cachestat sys_cachestat 376 376 452 common fchmodat2 sys_fchmodat2 377 377 453 64 map_shadow_stack sys_map_shadow_stack 378 + 454 common futex_wake sys_futex_wake 378 379 379 380 # 380 381 # Due to a historical design error, certain syscalls are numbered differently
+1
arch/xtensa/kernel/syscalls/syscall.tbl
··· 423 423 450 common set_mempolicy_home_node sys_set_mempolicy_home_node 424 424 451 common cachestat sys_cachestat 425 425 452 common fchmodat2 sys_fchmodat2 426 + 454 common futex_wake sys_futex_wake
+3
include/linux/syscalls.h
··· 549 549 asmlinkage long sys_futex_waitv(struct futex_waitv *waiters, 550 550 unsigned int nr_futexes, unsigned int flags, 551 551 struct __kernel_timespec __user *timeout, clockid_t clockid); 552 + 553 + asmlinkage long sys_futex_wake(void __user *uaddr, unsigned long mask, int nr, unsigned int flags); 554 + 552 555 asmlinkage long sys_nanosleep(struct __kernel_timespec __user *rqtp, 553 556 struct __kernel_timespec __user *rmtp); 554 557 asmlinkage long sys_nanosleep_time32(struct old_timespec32 __user *rqtp,
+3 -1
include/uapi/asm-generic/unistd.h
··· 822 822 823 823 #define __NR_fchmodat2 452 824 824 __SYSCALL(__NR_fchmodat2, sys_fchmodat2) 825 + #define __NR_futex_wake 454 826 + __SYSCALL(__NR_futex_wake, sys_futex_wake) 825 827 826 828 #undef __NR_syscalls 827 - #define __NR_syscalls 453 829 + #define __NR_syscalls 455 828 830 829 831 /* 830 832 * 32 bit systems traditionally used different
+30
kernel/futex/syscalls.c
··· 306 306 return ret; 307 307 } 308 308 309 + /* 310 + * sys_futex_wake - Wake a number of futexes 311 + * @uaddr: Address of the futex(es) to wake 312 + * @mask: bitmask 313 + * @nr: Number of the futexes to wake 314 + * @flags: FUTEX2 flags 315 + * 316 + * Identical to the traditional FUTEX_WAKE_BITSET op, except it is part of the 317 + * futex2 family of calls. 318 + */ 319 + 320 + SYSCALL_DEFINE4(futex_wake, 321 + void __user *, uaddr, 322 + unsigned long, mask, 323 + int, nr, 324 + unsigned int, flags) 325 + { 326 + if (flags & ~FUTEX2_VALID_MASK) 327 + return -EINVAL; 328 + 329 + flags = futex2_to_flags(flags); 330 + if (!futex_flags_valid(flags)) 331 + return -EINVAL; 332 + 333 + if (!futex_validate_input(flags, mask)) 334 + return -EINVAL; 335 + 336 + return futex_wake(uaddr, flags, nr, mask); 337 + } 338 + 309 339 #ifdef CONFIG_COMPAT 310 340 COMPAT_SYSCALL_DEFINE2(set_robust_list, 311 341 struct compat_robust_list_head __user *, head,
+1
kernel/sys_ni.c
··· 87 87 COND_SYSCALL(get_robust_list); 88 88 COND_SYSCALL_COMPAT(get_robust_list); 89 89 COND_SYSCALL(futex_waitv); 90 + COND_SYSCALL(futex_wake); 90 91 COND_SYSCALL(kexec_load); 91 92 COND_SYSCALL_COMPAT(kexec_load); 92 93 COND_SYSCALL(init_module);