[PATCH v6 0/4] arm64: vdso: Implement __vdso_futex_robust_try_unlock()
From: André Almeida <andrealmeid@igalia.com>
Date: 2026-07-20 16:03:37
Also in:
linux-arch, lkml
Hi folks, This is my take on implementing the new vDSO for unlocking a robust futex in arm64. If you don't know what's that, Thomas wrote a good summary, including the motivation for this work and the x86 implementation: https://lore.kernel.org/lkml/878qb89g7b.ffs@tglx/ (local) * Testing There's one selftest proposed [1] that tests precisely if the task is interrupted during the critical section, if the kernel will clear op_pending pointer. I've adapted to arm64 [2] and it works as expected. This test is not being upstreamed right now because it depends on a better way to expose vdso.so.dbg [3]. I also used gdb to manually check if the address is cleared when the kernel interrupts the critical section. Thanks! André [1] https://lore.kernel.org/lkml/20260404093939.7XgeW_54@linutronix.de/ (local) [2] https://lore.kernel.org/lkml/20260529-tonyk-robust_arm-v3-3-a6f02684d4fe@igalia.com/ (local) [3] https://lore.kernel.org/lkml/20260602090536.045586688@kernel.org/ (local) Changes in v6: - Reorganized the patchset, better split for helpers functions vs aarch64 vs arm32 code - Use "full name" for labels instead of macros - Completely reworded "Implement __vdso_futex_robust_try_unlock()" to make it more obvious what's the bug and how does this fix it v5: https://patch.msgid.link/20260717-tonyk-robust_arm-v5-0-ffd1ad318d17@igalia.com Changes in v5: - Drop unneeded commit "arm64/entry: Unify user mode handling" - Replace "_success" with "_start" labels in vdso_futex_robust_unlock_update_ips - Added "cc" to the asm clobberlist v4: https://patch.msgid.link/20260705-tonyk-robust_arm-v4-0-e0fd0fa259d3@igalia.com Changes in v4: - Added commit "arm64/entry: Unify user mode handling" - Added missing ifdef FUTEX_ROBUST_UNLOCK guards - Fixed the position of _start and _success labels in the critical section - Instead of checking the zero flag, check the result register to decide if the op_pending needs to be cleared v3: https://patch.msgid.link/20260529-tonyk-robust_arm-v3-0-a6f02684d4fe@igalia.com Changes in v3: - Change asm to always use x2 to store *pop - Fix clang asm errors - Moved 32 bit entry point to vdso32/ and use littlearm asm - Adapted Sebastians test for arm v2: https://patch.msgid.link/20260424-tonyk-robust_arm-v2-0-db4e46f752cf@igalia.com Changes in v2: - s/CONFIG_COMPAT/CONFIG_COMPAT_VDSO (Thomas Weißschuh) - Fixed linker not finding the symbols (Thomas Weißschuh) v1: https://patch.msgid.link/20260417-tonyk-robust_arm-v1-0-03aa64e2ff1a@igalia.com --- André Almeida (4): arm64: vdso: Prepare for robust futex unlock support arm64: vdso: Implement __vdso_futex_robust_try_unlock() arm64: vdso32: Bring vdso32-offsets.h back arm64: vdso32: Implement __vdso_futex_robust_try_unlock() arch/arm64/Kconfig | 1 + arch/arm64/Makefile | 2 +- arch/arm64/include/asm/futex_robust.h | 19 ++++++++++++ arch/arm64/include/asm/vdso.h | 3 ++ arch/arm64/kernel/vdso.c | 54 ++++++++++++++++++++++++++++++++++- arch/arm64/kernel/vdso/Makefile | 10 +++++++ arch/arm64/kernel/vdso/vdso.lds.S | 9 ++++++ arch/arm64/kernel/vdso/vfutex.c | 35 +++++++++++++++++++++++ arch/arm64/kernel/vdso32/Makefile | 12 ++++++++ arch/arm64/kernel/vdso32/vdso.lds.S | 9 ++++++ arch/arm64/kernel/vdso32/vfutex.c | 34 ++++++++++++++++++++++ 11 files changed, 186 insertions(+), 2 deletions(-) --- base-commit: af5e34a41cd607c00ef752e00331736570992354 change-id: 20260416-tonyk-robust_arm-54ff77d2c4e4 Best regards, -- André Almeida [off-list ref]