Message ID | 20230601101409.GS4253@hirez.programming.kicks-ass.net |
---|---|
State | New |
Headers | show |
Series | None | expand |
On Thu, Jun 01, 2023 at 09:29:18AM -0400, Linus Torvalds wrote: > Right now we have that "minimum gcc version" in a somewhat annoying > place: it's in the ./scripts/min-tool-version.sh file as a shell > script. Something like so then? --- Subject: parisc: Raise minimal GCC version From: Peter Zijlstra <peterz@infradead.org> Date: Fri Jun 2 16:33:54 CEST 2023 With 64bit builds depending on __SIZEOF_INT128__ raise the parisc minimum compiler version to gcc-11.0.0. All other 64bit architectures provide this from GCC-5.1.0 (and probably before), except hppa64 which only started advertising this with GCC-11. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> --- scripts/min-tool-version.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) --- a/scripts/min-tool-version.sh +++ b/scripts/min-tool-version.sh @@ -17,7 +17,11 @@ binutils) echo 2.25.0 ;; gcc) - echo 5.1.0 + if [ "$SRCARCH" = parisc ]; then + echo 11.0.0 + else + echo 5.1.0 + fi ;; llvm) if [ "$SRCARCH" = s390 ]; then
On Fri, Jun 02, 2023 at 04:39:12PM +0200, Peter Zijlstra wrote: > On Thu, Jun 01, 2023 at 09:29:18AM -0400, Linus Torvalds wrote: > > > Right now we have that "minimum gcc version" in a somewhat annoying > > place: it's in the ./scripts/min-tool-version.sh file as a shell > > script. > > Something like so then? > > --- > Subject: parisc: Raise minimal GCC version > From: Peter Zijlstra <peterz@infradead.org> > Date: Fri Jun 2 16:33:54 CEST 2023 > > With 64bit builds depending on __SIZEOF_INT128__ raise the parisc > minimum compiler version to gcc-11.0.0. > > All other 64bit architectures provide this from GCC-5.1.0 (and > probably before), except hppa64 which only started advertising this > with GCC-11. > > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> > --- > scripts/min-tool-version.sh | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > --- a/scripts/min-tool-version.sh > +++ b/scripts/min-tool-version.sh > @@ -17,7 +17,11 @@ binutils) > echo 2.25.0 > ;; > gcc) > - echo 5.1.0 > + if [ "$SRCARCH" = parisc ]; then > + echo 11.0.0 > + else > + echo 5.1.0 > + fi > ;; > llvm) > if [ "$SRCARCH" = s390 ]; then I gave this a spin and it looks good to me: [mark@lakrids:~/src/linux]% usekorg 10.3.0 make ARCH=arm64 CROSS_COMPILE=aarch64-linux- defconfig HOSTCC scripts/basic/fixdep HOSTCC scripts/kconfig/conf.o HOSTCC scripts/kconfig/confdata.o HOSTCC scripts/kconfig/expr.o LEX scripts/kconfig/lexer.lex.c YACC scripts/kconfig/parser.tab.[ch] HOSTCC scripts/kconfig/lexer.lex.o HOSTCC scripts/kconfig/menu.o HOSTCC scripts/kconfig/parser.tab.o HOSTCC scripts/kconfig/preprocess.o HOSTCC scripts/kconfig/symbol.o HOSTCC scripts/kconfig/util.o HOSTLD scripts/kconfig/conf *** Default configuration is based on 'defconfig' # # configuration written to .config # [mark@lakrids:~/src/linux]% usekorg 10.3.0 make ARCH=parisc CROSS_COMPILE=hppa64-linux- generic-64bit_defconfig *** *** C compiler is too old. *** Your GCC version: 10.3.0 *** Minimum GCC version: 11.0.0 *** scripts/Kconfig.include:44: Sorry, this C compiler is not supported. make[1]: *** [scripts/kconfig/Makefile:94: generic-64bit_defconfig] Error 1 make: *** [Makefile:692: generic-64bit_defconfig] Error 2 [mark@lakrids:~/src/linux]% usekorg 11.3.0 make ARCH=parisc CROSS_COMPILE=hppa64-linux- generic-64bit_defconfig # # configuration written to .config # FWIW: Tested-by: Mark Rutland <mark.rutland@arm.com> Mark.
On Fri, Jun 2, 2023 at 10:40 AM Peter Zijlstra <peterz@infradead.org> wrote: > > Something like so then? Ack. I think it would be much cleaner if we would have it as part of the Kconfig file and architectures could just override some GCC_MIN_VERSION value, but that's not the universe we currently have, so your patch looks like the best thing to do. Linus
On June 2, 2023 7:39:12 AM PDT, Peter Zijlstra <peterz@infradead.org> wrote: >On Thu, Jun 01, 2023 at 09:29:18AM -0400, Linus Torvalds wrote: > >> Right now we have that "minimum gcc version" in a somewhat annoying >> place: it's in the ./scripts/min-tool-version.sh file as a shell >> script. > >Something like so then? > >--- >Subject: parisc: Raise minimal GCC version >From: Peter Zijlstra <peterz@infradead.org> >Date: Fri Jun 2 16:33:54 CEST 2023 > >With 64bit builds depending on __SIZEOF_INT128__ raise the parisc >minimum compiler version to gcc-11.0.0. > >All other 64bit architectures provide this from GCC-5.1.0 (and >probably before), except hppa64 which only started advertising this >with GCC-11. > >Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> >--- > scripts/min-tool-version.sh | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > >--- a/scripts/min-tool-version.sh >+++ b/scripts/min-tool-version.sh >@@ -17,7 +17,11 @@ binutils) > echo 2.25.0 > ;; > gcc) >- echo 5.1.0 >+ if [ "$SRCARCH" = parisc ]; then >+ echo 11.0.0 >+ else >+ echo 5.1.0 >+ fi > ;; > llvm) > if [ "$SRCARCH" = s390 ]; then Dumb question: is this only about the cpp macro or is it about __int128 existing at all?
On Fri, Jun 02, 2023 at 10:00:17AM -0700, H. Peter Anvin wrote:
> Dumb question: is this only about the cpp macro or is it about __int128 existing at all?
It's mostly about __int128 being there, __SIZEOF_INT128__ is just the
way we go about detecting if it's there or not.
Ok. So the patch description needs to be fixed. Otherwise the solution would be far simpler :)
On Fri, Jun 02, 2023 at 12:20:05PM -0700, H. Peter Anvin wrote:
> Ok. So the patch description needs to be fixed. Otherwise the solution would be far simpler :)
"With 64bit builds depending on __SIZEOF_INT128__ to detect the
presence of __int128 raise the parisc minimum compiler version to
gcc-11.0.0."
better?
On Fri, Jun 2, 2023 at 3:40 PM Peter Zijlstra <peterz@infradead.org> wrote: > > "With 64bit builds depending on __SIZEOF_INT128__ to detect the > presence of __int128 raise the parisc minimum compiler version to > gcc-11.0.0." > > better? I'd just say "64-bit targets need the __int128 type, which for pa-risc means raising the minimum gcc version to 11". The __SIZEOF_INT128__ part isn't the important part. That's just the symptom. Linus
On 6/2/23 16:39, Peter Zijlstra wrote: > On Thu, Jun 01, 2023 at 09:29:18AM -0400, Linus Torvalds wrote: > >> Right now we have that "minimum gcc version" in a somewhat annoying >> place: it's in the ./scripts/min-tool-version.sh file as a shell >> script. > > Something like so then? > > --- > Subject: parisc: Raise minimal GCC version > From: Peter Zijlstra <peterz@infradead.org> > Date: Fri Jun 2 16:33:54 CEST 2023 > > With 64bit builds depending on __SIZEOF_INT128__ raise the parisc > minimum compiler version to gcc-11.0.0. > > All other 64bit architectures provide this from GCC-5.1.0 (and > probably before), except hppa64 which only started advertising this > with GCC-11. > > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> The patch raises the compiler for 32- and 64-bit parisc builds, but that's OK. So: Acked-by: Helge Deller <deller@gmx.de> Thank you! Helge > --- > scripts/min-tool-version.sh | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > --- a/scripts/min-tool-version.sh > +++ b/scripts/min-tool-version.sh > @@ -17,7 +17,11 @@ binutils) > echo 2.25.0 > ;; > gcc) > - echo 5.1.0 > + if [ "$SRCARCH" = parisc ]; then > + echo 11.0.0 > + else > + echo 5.1.0 > + fi > ;; > llvm) > if [ "$SRCARCH" = s390 ]; then
--- /dev/null +++ b/arch/parisc/include/asm/percpu.h @@ -0,0 +1,77 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _ASM_PARISC_PERCPU_H +#define _ASM_PARISC_PERCPU_H + +#include <linux/types.h> + +#if defined(CONFIG_64BIT) && CONFIG_GCC_VERSION < 1100000 + +/* + * GCC prior to 11 does not provide __SIZEOF_INT128__ on HPPA64 + * as such we need to provide an alternative implementation of + * {raw,this}_cpu_{,try_}cmpxchg128(). + * + * This obviously doesn't function as u128 should, but for the purpose + * of per-cpu cmpxchg128 it might just do. + */ +typedef struct { + u64 a, b; +} u128 __attribute__((aligned(16))); + +#define raw_cpu_generic_try_cmpxchg_memcmp(pcp, ovalp, nval) \ +({ \ + typeof(pcp) *__p = raw_cpu_ptr(&(pcp)); \ + typeof(pcp) __val = *__p, __old = *(ovalp); \ + bool __ret; \ + if (!__builtin_memcmp(&__val, &__old, sizeof(pcp))) { \ + *__p = nval; \ + __ret = true; \ + } else { \ + *(ovalp) = __val; \ + __ret = false; \ + } \ + __ret; \ +}) + +#define raw_cpu_generic_cmpxchg_memcmp(pcp, oval, nval) \ +({ \ + typeof(pcp) __old = (oval); \ + raw_cpu_generic_try_cmpxchg_memcpy(pcp, &__old, nval); \ + __old; \ +}) + +#define raw_cpu_cmpxchg128(pcp, oval, nval) \ + raw_cpu_generic_cmpxchg_memcmp(pcp, oval, nval) +#define raw_cpu_try_cmpxchg128(pcp, ovalp, nval) \ + raw_cpu_generic_try_cmpxchg_memcmp(pcp, ovalp, nval) + +#define this_cpu_generic_try_cmpxchg_memcmp(pcp, ovalp, nval) \ +({ \ + bool __ret; \ + unsigned long __flags; \ + raw_local_irq_save(__flags); \ + __ret = raw_cpu_generic_try_cmpxchg_memcmp(pcp, ovalp, nval); \ + raw_local_irq_restore(__flags); \ + __ret; \ +}) + +#define this_cpu_generic_cmpxchg_memcmp(pcp, oval, nval) \ +({ \ + typeof(pcp) __ret; \ + unsigned long __flags; \ + raw_local_irq_save(__flags); \ + __ret = raw_cpu_generic_cmpxchg_memcmp(pcp, oval, nval); \ + raw_local_irq_restore(__flags); \ + __ret; \ +}) + +#define this_cpu_cmpxchg128(pcp, oval, nval) \ + this_cpu_generic_cmpxchg_memcmp(pcp, oval, nval) +#define this_cpu_try_cmpxchg128(pcp, ovalp, nval) \ + this_cpu_generic_try_cmpxchg_memcmp(pcp, ovalp, nval) + +#endif /* !__SIZEOF_INT128__ */ + +#include <asm-generic/percpu.h> + +#endif /* _ASM_PARISC_PERCPU_H */