Hi,

 This is v2 of the series updated according to the outcome from testing 
with a BWX system.  Only test cases have been updated and no changes have 
been made to actual code and obviously only the patches still outstanding 
have been included.

 Additionally 1/7 has been folded into this series from a patch previously 
submitted on its own to address a functional regression in the option 
handling, as it's been discovered that it's required for correct execution 
of several test cases added with the series, with target configurations 
that default to EV56 or a newer CPU architecture variant.

 This series has come out of a discussion[1] around the removal of non-BWX 
Alpha support from the Linux kernel due to data races affecting RCU 
algorithms.

 As it happens these data races also apply to BWX Alpha systems, as I have 
discovered in the course of this effort, although owing to how the Alpha 
backend of GCC has implemented block copy and clear operations rather than 
actual hardware limitations, for example GCC will happily produce code 
such as:

        ldbu $1,0($3)
        stw $31,8($3)
        stq $1,0($3)

to zero a 9-byte member at the byte offset of 1 of a quadword-aligned 
struct, happily clobbering a 1-byte member at the beginning of said struct 
if there is a concurrent or parallel write to that member in the middle of 
the unprotected RMW sequence.

 This patch series addresses these issues in the last two changes, with 
suitable preparations made ahead of them.  The intent for these changes is 
to eventually bring Linux kernel support back for non-BWX systems still in 
people's possession.

 This has been verified with the `alpha-linux-gnu' (EV4) target using a 
POWER9 system as the host and an AlphaServer 300 (EV45) system as the 
target, with no regressions except where expected due to LDx_L (as always 
the first in a sequence) executed with an unaligned address, exceedingly 
rarely though (4 test cases across all the GCC frontends and libraries 
covered).  This will be addressed via emulation on the Linux kernel side, 
now in the works.

 This v2 has also been verified with the `alphaev56-linux-gnu' (EV56) 
target using the same POWER9 system and EV68 hardware kindly shared for 
this purpose by Magnus Lindholm <linm...@gmail.com>.

 No Rust frontend or libgrust library verification has been run due to a 
recent version requirement increase for the `cargo' helper tool, which my 
development system cannot currently satisfy and I figured out that getting 
that sorted right now would be the best use of my time.

 More details on testing have been included with the respective changes.

 With changes to non-Alpha code committed and 5/7 already approved the 
relevant maintainers have now been dropped from the list of recipients for 
this patchset.

 Previous iterations:

- v1 at: 
<https://inbox.sourceware.org/gcc-patches/alpine.deb.2.21.2411141652300.9...@angie.orcam.me.uk/>.

- 1/7 at: 
<https://inbox.sourceware.org/gcc-patches/alpine.deb.2.21.2412300410050.20...@angie.orcam.me.uk/>

References:

[1] "alpha: cleanups for 6.10", 
    <https://lore.kernel.org/r/20240503081125.67990-1-a...@kernel.org/>

  Maciej

Reply via email to