[PATCH v6 0/4] arm64: vdso: Implement __vdso_futex_robust_try_unlock()
From: André Almeida
Date: Mon Jul 20 2026 - 12:05:00 EST
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/
* 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@xxxxxxxxxxxxx/
[2] https://lore.kernel.org/lkml/20260529-tonyk-robust_arm-v3-3-a6f02684d4fe@xxxxxxxxxx/
[3] https://lore.kernel.org/lkml/20260602090536.045586688@xxxxxxxxxx/
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@xxxxxxxxxx
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@xxxxxxxxxx
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@xxxxxxxxxx
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@xxxxxxxxxx
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@xxxxxxxxxx
---
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 <andrealmeid@xxxxxxxxxx>