On 19/3/25 22:49, Arnd Bergmann wrote: > On Wed, Mar 19, 2025, at 22:37, Ignacio Encinas Rubio wrote: >> On 19/3/25 22:12, Arnd Bergmann wrote: >>> On Wed, Mar 19, 2025, at 22:09, Ignacio Encinas wrote: >>>> Move the default byteswap implementation into asm-generic so that it can >>>> be included from arch code. >>>> >>>> This is required by RISC-V in order to have a fallback implementation >>>> without duplicating it. >>>> >>>> Signed-off-by: Ignacio Encinas <ignacio@xxxxxxxxxxxx> >>>> --- >>>> include/uapi/asm-generic/swab.h | 32 ++++++++++++++++++++++++++++++++ >>>> include/uapi/linux/swab.h | 33 +-------------------------------- >>>> 2 files changed, 33 insertions(+), 32 deletions(-) >>>> >>> >>> I think we should just remove these entirely in favor of the >>> compiler-povided built-ins. >> >> Got it. I assumed they existed to explicitly avoid relying on >> __builtin_bswap as they might not exist. However, I did a quick grep and >> found that there are some uses in the wild. > > Right, I do remember when we had a discussion about this maybe > 15 years ago when gcc didn't have the builtins on all architectures > yet, but those versions are long gone, and we never cleaned it up. I just had a chance to look at this and it looks a bit more complex than I initially thought. ___constant_swab macros are used in more places than I expected, and {little,big}_endian.h define their own macros that are used elsewhere, ... It is not clear to me how to proceed here. I could: 1) Just remove ___constant_swab macros and replace them with __builtin_swap everywhere 2) Go a step further and evaluate removing __constant_htonl and relatives Let me know what you think is the best option :) I'll resend this series without this patch (and make the RISC-V use fall back into __builtin_bswap) >> I couldn't find compiler builtins for ___constant_swahb32 nor >> ___constant_swahw32, so I guess I'll leave them as they are. > > Correct. There are also 24-bit and 48-bit swap functions > in include/linux/unaligned.h that have no corresponding builtins. Thanks for clarifying!