On Sun, Oct 23, 2022 at 10:55 AM Maciej W. Rozycki <macro@xxxxxxxxxxx> wrote: > > Given the presence of generic atomics we can emulate CMPXCHG8B easily > LL/SC-style using a spinlock with XCHG even on SMP let alone UP. We already do that (admittedly badly - it's not SMP safe, but 486-class SMP machines have never been supported even if they technically did exist), see arch/x86/lib/cmpxchg8b_emu.S arch/x86/lib/atomic64_386_32.S for some pretty disgusting code. But it's all the other infrastructure to support this that is just an unnecessary weight. Grep for CONFIG_X86_CMPXCHG64 and X86_FEATURE_CX8. We already have increasingly bad coverage testing for x86-32 - and your example of MIPS really doesn't strengthen your argument all that much, because MIPS has never been very widely used in the first place, and doesn't affect any mainline development. The odd features and CPU selection really do not help. Honestly, I wouldn't mind upgrading the minimum requirements to at least M586TSC - leaving some of those early "fake Pentium" clones behind too. Because 'rdtsc' is probably an even worse issue than CMPXCHG8B. In fact, I don't understand how current kernels work on an i486 at all, since it looks like exit_to_user_mode_prepare -> arch_exit_to_user_mode_prepare ends up having an unconditional 'rdtsc' instruction in it. I'm guessing that you don't have RANDOMIZE_KSTACK_OFFSET enabled? In other words, our non-Pentium support is ACTIVELY BUGGY AND BROKEN right now. This is not some theoretical issue, but very much a "look, ma, this has never been tested, and cannot actually work" issue, that nobody has ever noticed because nobody really cares. It took me a couple of minutes of "let's go hunting" to find that thing, and it's just an example of how broken our current support is. That RANDOMIZE_KSTACK_OFFSET code *compiles* just fine. It just doesn't actually work. That's the kind of maintenance burden we simply shouldn't have - no developer actually cares (correctly), nobody really tests that situation (also correctly - it's old and irrelevant hardware), but it also means that code just randomly doesn't actually work. Linus