[PATCH] arm64: Generate cpucaps.h
Mark Rutland
mark.rutland at arm.com
Thu May 13 04:51:39 PDT 2021
On Thu, May 13, 2021 at 10:35:04AM +0530, Anshuman Khandual wrote:
>
> On 4/28/21 5:42 PM, Mark Brown wrote:
> > The arm64 code allocates an internal constant to every CPU feature it can
> > detect, distinct from the public hwcap numbers we use to expose some
> > features to userspace. Currently this is maintained manually which is an
> > irritating source of conflicts when working on new features, to avoid this
> > replace the header with a simple text file listing the names we've assigned
> > and sort it to minimise conflicts.
> >
> > As part of doing this we also do the Kbuild hookup required to hook up
> > an arch tools directory and to generate header files in there.
> >
> > This will result in a renumbering and reordering of the existing constants,
> > since they are all internal only the values should not be important. The
> > reordering will impact the order in which some steps in enumeration handle
> > features but the algorithm is not intended to depend on this and I haven't
> > seen any issues when testing. Due to the UAO cpucap having been removed in
> > the past we end up with ARM64_NCAPS being 1 smaller than it was before.
> >
> > Signed-off-by: Mark Brown <broonie at kernel.org>
> > ---
> > arch/arm64/Makefile | 3 ++
> > arch/arm64/include/asm/Kbuild | 2 +
> > arch/arm64/include/asm/cpucaps.h | 74 --------------------------------
> > arch/arm64/tools/Makefile | 22 ++++++++++
> > arch/arm64/tools/cpucaps | 65 ++++++++++++++++++++++++++++
> > arch/arm64/tools/gen-cpucaps.awk | 40 +++++++++++++++++
> > 6 files changed, 132 insertions(+), 74 deletions(-)
> > delete mode 100644 arch/arm64/include/asm/cpucaps.h
> > create mode 100644 arch/arm64/tools/Makefile
> > create mode 100644 arch/arm64/tools/cpucaps
> > create mode 100755 arch/arm64/tools/gen-cpucaps.awk
> >
> > diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile
> > index 7ef44478560d..b52481f0605d 100644
> > --- a/arch/arm64/Makefile
> > +++ b/arch/arm64/Makefile
> > @@ -175,6 +175,9 @@ vdso_install:
> > $(if $(CONFIG_COMPAT_VDSO), \
> > $(Q)$(MAKE) $(build)=arch/arm64/kernel/vdso32 $@)
> >
> > +archprepare:
> > + $(Q)$(MAKE) $(build)=arch/arm64/tools kapi
>
> Small nit. So going forward this new directory (arch/arm64/tools/), will
> be used to hold similar scripts that generate header or similar things ?
> At first the directory name 'tool' was bit confusing but seems like other
> archs (arm, m68k, mips, powerpc, s390, sh) have this directory as well.
Yup; there's more stuff we might want to put here in future, e.g.
* Generation of (or consistency-checks) for the kernel HWCAP glue
* Generation of the sysreg headers
* Generation of the insn code
* Generation of metadata (or consistency checks) for
RELIABLE_STACKTRACE, LIVEPATCH, etc
[...]
> > +BEGIN {
> > + print "#ifndef __ASM_CPUCAPS_H"
> > + print "#define __ASM_CPUCAPS_H"
> > + print ""
> > + print "/* Generated file - do not edit */"
> > + cap_num = 0
> > + print ""
> > +}
> > +
> > +/^[vA-Z0-9_]+$/ {
>
> Small nit. Should this be length restricted at the least ?
> Like each CAP entries should not exceed a certain length.
I don't think we should enforce a length limit in the script, as we'd
have to select an arbitrary limit, and given we should catch exceedingly
long names during review, I think it's more likely to be a hindrance
than a help (e.g. if we ever bump up against that limit).
> > + printf("#define ARM64_%-30s\t%d\n", $0, cap_num++)
> > + next
> > +}
> > +
> > +END {
> > + printf("#define ARM64_NCAPS\t\t\t\t%d\n", cap_num)
> > + print ""
> > + print "#endif"
>
> Small nit. Should it be print "#endif /* __ASM_CPUCAPS_H */" instead
> in order to be complete.
Agreed; that would be nice.
Thanks,
Mark.
More information about the linux-arm-kernel
mailing list