[PATCH 0/2] arm64: Make write_sysreg_s() select XZR reliably

From: Sascha Bischoff

Date: Fri Sep 04 2026 - 14:17:03 EST


Hi all,

Sashiko spotted the original tools-side CDEOI encoding issue while
reviewing the GICv5 KVM IRS series [1]. While updating the tools copy to
match the kernel header, I noticed that the existing kernel workaround
relies on constant propagation to recognise that its local value was
initialised with zero. With optimisation disabled, compilers instead
select an arbitrary general-purpose register.

Compiling the kernel or tools without optimisation is uncommon, but the
fix is small and removes this dependency entirely.

This matters for instructions such as GIC CDEOI, where Rt must select
XZR rather than a register containing zero. Patch 1 removes the
reliance on constant propagation and instead tests the macro argument
directly. Patch 2 mirrors the change in the tools copy, fixing the
GICv5 KVM selftest.

After these changes, both GCC and LLVM emit the correct encoding when
using -O0.

[1] https://lore.kernel.org/r/20260807173928.3F6731F000E9@xxxxxxxxxxxxxxx

Thanks,
Sascha

Sascha Bischoff (2):
arm64: sysreg: Make write_sysreg_s() select XZR without optimisation
arm64: tools: Fix GIC CDEOI instruction encoding

arch/arm64/include/asm/sysreg.h | 2 +-
tools/arch/arm64/include/asm/sysreg.h | 11 ++++++++++-
2 files changed, 11 insertions(+), 2 deletions(-)

--
2.34.1