[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAHk-=wg1h4w_m=Op1U4JsyDjsvqG0Kw1EOVMQ+=5GX_XytdorQ@mail.gmail.com>
Date: Sun, 23 Jun 2024 11:42:18 -0400
From: Linus Torvalds <torvalds@...ux-foundation.org>
To: Uros Bizjak <ubizjak@...il.com>
Cc: kernel test robot <lkp@...el.com>, oe-kbuild-all@...ts.linux.dev,
linux-kernel@...r.kernel.org, Ingo Molnar <mingo@...nel.org>,
Borislav Petkov <bp@...en8.de>, Peter Zijlstra <peterz@...radead.org>
Subject: Re: arch/x86/include/asm/cmpxchg_32.h:149:9: error: inline assembly
requires more registers than available
On Sun, 23 Jun 2024 at 06:14, Uros Bizjak <ubizjak@...il.com> wrote:
>
> The referred patch actually mitigates the issue, as explained in
> details here [1].
Clearly not.
It might help things in theory, but in practice it clearly just makes
things worse, and causes problems for clang.
And the thing about practice is that it always trumps theory.
> So, without some interest from x86 maintainers, the issue will remain
> unfixed. If they want x86_32 arch to die then inline locking
> primitives involving cmpxchg8b are one of the nails in its coffin.
What? No.
That commit will get reverted. It caused problems, and now you are
blaming others.
You can't just go "I caused issues, but the x86 maintainers aren't
interested in this area, so it's their fault".
And no, "improved code generation with one compiler version" does not
then mean "other compilers don't matter".
Now, I do suspect that the issue is some very random thing that could
be fixed by massaging the inline asm a bit.
For example, why does that 32-bit __arch_try_cmpxchg64() do this:
if (unlikely(!ret)) \
*(_oldp) = o.full; \
when I think it would be simpler and more straightforward to just do
that *(_oldp) = o.full unconditionally? The "dereference" is purely
syntactic, the intent is that the compiler will just use a register
for this all (well, two registers on 32-bit), and making it
conditional makes things worse, because now that "oldp" register
cannot be the same as "o" itself.
I didn't look very closely into this, but maybe that would just fix
code generation. And maybe it wouldn't. If there's no other fix
somebody comes up with, we just have to revert.
Linus
Powered by blists - more mailing lists