mirror of
https://github.com/systemd/systemd.git
synced 2026-08-12 22:17:19 +00:00
Commit881e4717c7("test: pin stress-ng --vm-method to a portable scalar method in TEST-55-OOMD") pinned --vm-method=zero-one with the rationale that it is "a long-standing scalar method". That rationale is wrong: stress_vm_zero_one() in stress-ng's stress-vm.c is declared static size_t TARGET_CLONES stress_vm_zero_one(...) i.e. it carries the exact same TARGET_CLONES attribute as 33 of the 35 other vm methods. On x86_64 with GCC >=5, TARGET_CLONES expands (see core-target-clones.h in stress-ng) to a target_clones attribute including "arch=skylake-avx512", "arch=cooperlake", "arch=tigerlake", "arch=sapphirerapids", and several other AVX-512-bearing arch variants, plus "default". GCC generates AVX-512 clones of stress_vm_zero_one() and the IFUNC resolver picks them on any CPU that advertises AVX-512. The only vm methods in stress-ng's registry whose function definitions omit TARGET_CLONES entirely (and are therefore guaranteed not to dispatch to an AVX-512 clone) are lfsr32 (portable, always registered) and write64ds (x86_64-only, gated on HAVE_ASM_X86_MOVDIRI, i.e. Intel Tremont / Tiger Lake+ MOVDIRI instruction). Switch the four stress-ng --vm invocations in TEST-55-OOMD to --vm-method=lfsr32 so the AVX-512 SIGILL on CPUs without AVX-512 (e.g. AMD Zen 1-3) can no longer occur regardless of compiler version, optimization level, or stress-ng package build. Follow-up for881e4717c7Co-developed-by: Claude Opus 4.7 <noreply@anthropic.com>