All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexander Stein <alexander.stein@ew.tq-group.com>
To: Catalin Marinas <catalin.marinas@arm.com>,
	Will Deacon <will@kernel.org>, Jonathan Corbet <corbet@lwn.net>,
	Shuah Khan <shuah@kernel.org>,
	linux-arm-kernel@lists.infradead.org
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org,
	linux-kselftest@vger.kernel.org, Mark Brown <broonie@kernel.org>,
	Mark Brown <broonie@kernel.org>
Subject: Re: [PATCH 1/8] arm64/hwcap: Generate the KERNEL_HWCAP_ definitions for the hwcaps
Date: Wed, 15 Apr 2026 08:24:22 +0200	[thread overview]
Message-ID: <8745494.GXAFRqVoOG@steina-w> (raw)
In-Reply-To: <20260302-arm64-dpisa-2025-v1-1-0855e7f41689@kernel.org>

Am Montag, 2. März 2026, 23:53:16 CEST schrieb Mark Brown:
> Currently for each hwcap we define both the HWCAPn_NAME definition which is
> exposed to userspace and a kernel internal KERNEL_HWCAP_NAME definition
> which we use internally. This is tedious and repetitive, instead use a
> script to generate the KERNEL_HWCAP_ definitions from the UAPI definitions.
> 
> No functional changes intended.

Somehow this change causes to delete and generate kernel-hwcap.h on each
make call. This results in compiling essentially everything each time.

$ make Image
make[1]: Entering directory '/linux/build_arm64'
  REMOVE  arch/arm64/include/generated/asm/kernel-hwcap.h
  GEN     arch/arm64/include/generated/asm/kernel-hwcap.h
  CC      arch/arm64/kernel/asm-offsets.s
  CC      kernel/sched/rq-offsets.s
^Cmake[3]: *** Deleting file 'kernel/sched/rq-offsets.s'
make[3]: *** [../scripts/Makefile.build:184: kernel/sched/rq-offsets.s] Interrupt
make[2]: *** [/linux/Makefile:1371: prepare0] Interrupt
make[1]: *** [/linux/Makefile:248: __sub-make] Interrupt
make: *** [Makefile:248: __sub-make] Interrupt

make Image
make[1]: Entering directory '/linux/build_arm64'
  REMOVE  arch/arm64/include/generated/asm/kernel-hwcap.h
  GEN     arch/arm64/include/generated/asm/kernel-hwcap.h
  CC      arch/arm64/kernel/asm-offsets.s
  CC      kernel/sched/rq-offsets.s
  CC      arch/arm64/kernel/vdso/vgettimeofday.o
  LD      arch/arm64/kernel/vdso/vdso.so.dbg
  VDSOSYM include/generated/vdso-offsets.h
  OBJCOPY arch/arm64/kernel/vdso/vdso.so
  CC      init/version.o
^Cmake[4]: *** [../scripts/Makefile.build:289: init/version.o] Interrupt
make[3]: *** [../scripts/Makefile.build:548: init] Interrupt
make[2]: *** [/linux/Makefile:2140: .] Interrupt
make[1]: *** [/linux/Makefile:248: __sub-make] Interrupt
make: *** [Makefile:248: __sub-make] Interrupt

Best regards,
Alexander

> 
> Signed-off-by: Mark Brown <broonie@kernel.org>
> ---
>  arch/arm64/include/asm/hwcap.h        | 120 +---------------------------------
>  arch/arm64/tools/Makefile             |   8 ++-
>  arch/arm64/tools/gen-kernel-hwcaps.sh |  23 +++++++
>  3 files changed, 32 insertions(+), 119 deletions(-)
> 
> diff --git a/arch/arm64/include/asm/hwcap.h b/arch/arm64/include/asm/hwcap.h
> index 72ea4bda79f3..abe8218b2325 100644
> --- a/arch/arm64/include/asm/hwcap.h
> +++ b/arch/arm64/include/asm/hwcap.h
> @@ -60,126 +60,10 @@
>   * of KERNEL_HWCAP_{feature}.
>   */
>  #define __khwcap_feature(x)		const_ilog2(HWCAP_ ## x)
> -#define KERNEL_HWCAP_FP			__khwcap_feature(FP)
> -#define KERNEL_HWCAP_ASIMD		__khwcap_feature(ASIMD)
> -#define KERNEL_HWCAP_EVTSTRM		__khwcap_feature(EVTSTRM)
> -#define KERNEL_HWCAP_AES		__khwcap_feature(AES)
> -#define KERNEL_HWCAP_PMULL		__khwcap_feature(PMULL)
> -#define KERNEL_HWCAP_SHA1		__khwcap_feature(SHA1)
> -#define KERNEL_HWCAP_SHA2		__khwcap_feature(SHA2)
> -#define KERNEL_HWCAP_CRC32		__khwcap_feature(CRC32)
> -#define KERNEL_HWCAP_ATOMICS		__khwcap_feature(ATOMICS)
> -#define KERNEL_HWCAP_FPHP		__khwcap_feature(FPHP)
> -#define KERNEL_HWCAP_ASIMDHP		__khwcap_feature(ASIMDHP)
> -#define KERNEL_HWCAP_CPUID		__khwcap_feature(CPUID)
> -#define KERNEL_HWCAP_ASIMDRDM		__khwcap_feature(ASIMDRDM)
> -#define KERNEL_HWCAP_JSCVT		__khwcap_feature(JSCVT)
> -#define KERNEL_HWCAP_FCMA		__khwcap_feature(FCMA)
> -#define KERNEL_HWCAP_LRCPC		__khwcap_feature(LRCPC)
> -#define KERNEL_HWCAP_DCPOP		__khwcap_feature(DCPOP)
> -#define KERNEL_HWCAP_SHA3		__khwcap_feature(SHA3)
> -#define KERNEL_HWCAP_SM3		__khwcap_feature(SM3)
> -#define KERNEL_HWCAP_SM4		__khwcap_feature(SM4)
> -#define KERNEL_HWCAP_ASIMDDP		__khwcap_feature(ASIMDDP)
> -#define KERNEL_HWCAP_SHA512		__khwcap_feature(SHA512)
> -#define KERNEL_HWCAP_SVE		__khwcap_feature(SVE)
> -#define KERNEL_HWCAP_ASIMDFHM		__khwcap_feature(ASIMDFHM)
> -#define KERNEL_HWCAP_DIT		__khwcap_feature(DIT)
> -#define KERNEL_HWCAP_USCAT		__khwcap_feature(USCAT)
> -#define KERNEL_HWCAP_ILRCPC		__khwcap_feature(ILRCPC)
> -#define KERNEL_HWCAP_FLAGM		__khwcap_feature(FLAGM)
> -#define KERNEL_HWCAP_SSBS		__khwcap_feature(SSBS)
> -#define KERNEL_HWCAP_SB			__khwcap_feature(SB)
> -#define KERNEL_HWCAP_PACA		__khwcap_feature(PACA)
> -#define KERNEL_HWCAP_PACG		__khwcap_feature(PACG)
> -#define KERNEL_HWCAP_GCS		__khwcap_feature(GCS)
> -#define KERNEL_HWCAP_CMPBR		__khwcap_feature(CMPBR)
> -#define KERNEL_HWCAP_FPRCVT		__khwcap_feature(FPRCVT)
> -#define KERNEL_HWCAP_F8MM8		__khwcap_feature(F8MM8)
> -#define KERNEL_HWCAP_F8MM4		__khwcap_feature(F8MM4)
> -#define KERNEL_HWCAP_SVE_F16MM		__khwcap_feature(SVE_F16MM)
> -#define KERNEL_HWCAP_SVE_ELTPERM	__khwcap_feature(SVE_ELTPERM)
> -#define KERNEL_HWCAP_SVE_AES2		__khwcap_feature(SVE_AES2)
> -#define KERNEL_HWCAP_SVE_BFSCALE	__khwcap_feature(SVE_BFSCALE)
> -#define KERNEL_HWCAP_SVE2P2		__khwcap_feature(SVE2P2)
> -#define KERNEL_HWCAP_SME2P2		__khwcap_feature(SME2P2)
> -#define KERNEL_HWCAP_SME_SBITPERM	__khwcap_feature(SME_SBITPERM)
> -#define KERNEL_HWCAP_SME_AES		__khwcap_feature(SME_AES)
> -#define KERNEL_HWCAP_SME_SFEXPA		__khwcap_feature(SME_SFEXPA)
> -#define KERNEL_HWCAP_SME_STMOP		__khwcap_feature(SME_STMOP)
> -#define KERNEL_HWCAP_SME_SMOP4		__khwcap_feature(SME_SMOP4)
> -
>  #define __khwcap2_feature(x)		(const_ilog2(HWCAP2_ ## x) + 64)
> -#define KERNEL_HWCAP_DCPODP		__khwcap2_feature(DCPODP)
> -#define KERNEL_HWCAP_SVE2		__khwcap2_feature(SVE2)
> -#define KERNEL_HWCAP_SVEAES		__khwcap2_feature(SVEAES)
> -#define KERNEL_HWCAP_SVEPMULL		__khwcap2_feature(SVEPMULL)
> -#define KERNEL_HWCAP_SVEBITPERM		__khwcap2_feature(SVEBITPERM)
> -#define KERNEL_HWCAP_SVESHA3		__khwcap2_feature(SVESHA3)
> -#define KERNEL_HWCAP_SVESM4		__khwcap2_feature(SVESM4)
> -#define KERNEL_HWCAP_FLAGM2		__khwcap2_feature(FLAGM2)
> -#define KERNEL_HWCAP_FRINT		__khwcap2_feature(FRINT)
> -#define KERNEL_HWCAP_SVEI8MM		__khwcap2_feature(SVEI8MM)
> -#define KERNEL_HWCAP_SVEF32MM		__khwcap2_feature(SVEF32MM)
> -#define KERNEL_HWCAP_SVEF64MM		__khwcap2_feature(SVEF64MM)
> -#define KERNEL_HWCAP_SVEBF16		__khwcap2_feature(SVEBF16)
> -#define KERNEL_HWCAP_I8MM		__khwcap2_feature(I8MM)
> -#define KERNEL_HWCAP_BF16		__khwcap2_feature(BF16)
> -#define KERNEL_HWCAP_DGH		__khwcap2_feature(DGH)
> -#define KERNEL_HWCAP_RNG		__khwcap2_feature(RNG)
> -#define KERNEL_HWCAP_BTI		__khwcap2_feature(BTI)
> -#define KERNEL_HWCAP_MTE		__khwcap2_feature(MTE)
> -#define KERNEL_HWCAP_ECV		__khwcap2_feature(ECV)
> -#define KERNEL_HWCAP_AFP		__khwcap2_feature(AFP)
> -#define KERNEL_HWCAP_RPRES		__khwcap2_feature(RPRES)
> -#define KERNEL_HWCAP_MTE3		__khwcap2_feature(MTE3)
> -#define KERNEL_HWCAP_SME		__khwcap2_feature(SME)
> -#define KERNEL_HWCAP_SME_I16I64		__khwcap2_feature(SME_I16I64)
> -#define KERNEL_HWCAP_SME_F64F64		__khwcap2_feature(SME_F64F64)
> -#define KERNEL_HWCAP_SME_I8I32		__khwcap2_feature(SME_I8I32)
> -#define KERNEL_HWCAP_SME_F16F32		__khwcap2_feature(SME_F16F32)
> -#define KERNEL_HWCAP_SME_B16F32		__khwcap2_feature(SME_B16F32)
> -#define KERNEL_HWCAP_SME_F32F32		__khwcap2_feature(SME_F32F32)
> -#define KERNEL_HWCAP_SME_FA64		__khwcap2_feature(SME_FA64)
> -#define KERNEL_HWCAP_WFXT		__khwcap2_feature(WFXT)
> -#define KERNEL_HWCAP_EBF16		__khwcap2_feature(EBF16)
> -#define KERNEL_HWCAP_SVE_EBF16		__khwcap2_feature(SVE_EBF16)
> -#define KERNEL_HWCAP_CSSC		__khwcap2_feature(CSSC)
> -#define KERNEL_HWCAP_RPRFM		__khwcap2_feature(RPRFM)
> -#define KERNEL_HWCAP_SVE2P1		__khwcap2_feature(SVE2P1)
> -#define KERNEL_HWCAP_SME2		__khwcap2_feature(SME2)
> -#define KERNEL_HWCAP_SME2P1		__khwcap2_feature(SME2P1)
> -#define KERNEL_HWCAP_SME_I16I32		__khwcap2_feature(SME_I16I32)
> -#define KERNEL_HWCAP_SME_BI32I32	__khwcap2_feature(SME_BI32I32)
> -#define KERNEL_HWCAP_SME_B16B16		__khwcap2_feature(SME_B16B16)
> -#define KERNEL_HWCAP_SME_F16F16		__khwcap2_feature(SME_F16F16)
> -#define KERNEL_HWCAP_MOPS		__khwcap2_feature(MOPS)
> -#define KERNEL_HWCAP_HBC		__khwcap2_feature(HBC)
> -#define KERNEL_HWCAP_SVE_B16B16		__khwcap2_feature(SVE_B16B16)
> -#define KERNEL_HWCAP_LRCPC3		__khwcap2_feature(LRCPC3)
> -#define KERNEL_HWCAP_LSE128		__khwcap2_feature(LSE128)
> -#define KERNEL_HWCAP_FPMR		__khwcap2_feature(FPMR)
> -#define KERNEL_HWCAP_LUT		__khwcap2_feature(LUT)
> -#define KERNEL_HWCAP_FAMINMAX		__khwcap2_feature(FAMINMAX)
> -#define KERNEL_HWCAP_F8CVT		__khwcap2_feature(F8CVT)
> -#define KERNEL_HWCAP_F8FMA		__khwcap2_feature(F8FMA)
> -#define KERNEL_HWCAP_F8DP4		__khwcap2_feature(F8DP4)
> -#define KERNEL_HWCAP_F8DP2		__khwcap2_feature(F8DP2)
> -#define KERNEL_HWCAP_F8E4M3		__khwcap2_feature(F8E4M3)
> -#define KERNEL_HWCAP_F8E5M2		__khwcap2_feature(F8E5M2)
> -#define KERNEL_HWCAP_SME_LUTV2		__khwcap2_feature(SME_LUTV2)
> -#define KERNEL_HWCAP_SME_F8F16		__khwcap2_feature(SME_F8F16)
> -#define KERNEL_HWCAP_SME_F8F32		__khwcap2_feature(SME_F8F32)
> -#define KERNEL_HWCAP_SME_SF8FMA		__khwcap2_feature(SME_SF8FMA)
> -#define KERNEL_HWCAP_SME_SF8DP4		__khwcap2_feature(SME_SF8DP4)
> -#define KERNEL_HWCAP_SME_SF8DP2		__khwcap2_feature(SME_SF8DP2)
> -#define KERNEL_HWCAP_POE		__khwcap2_feature(POE)
> -
>  #define __khwcap3_feature(x)		(const_ilog2(HWCAP3_ ## x) + 128)
> -#define KERNEL_HWCAP_MTE_FAR		__khwcap3_feature(MTE_FAR)
> -#define KERNEL_HWCAP_MTE_STORE_ONLY	__khwcap3_feature(MTE_STORE_ONLY)
> -#define KERNEL_HWCAP_LSFE		__khwcap3_feature(LSFE)
> -#define KERNEL_HWCAP_LS64		__khwcap3_feature(LS64)
> +
> +#include "asm/kernel-hwcap.h"
>  
>  /*
>   * This yields a mask that user programs can use to figure out what
> diff --git a/arch/arm64/tools/Makefile b/arch/arm64/tools/Makefile
> index c2b34e761006..a94b3d9caad6 100644
> --- a/arch/arm64/tools/Makefile
> +++ b/arch/arm64/tools/Makefile
> @@ -3,7 +3,7 @@
>  gen := arch/$(ARCH)/include/generated
>  kapi := $(gen)/asm
>  
> -kapisyshdr-y := cpucap-defs.h sysreg-defs.h
> +kapisyshdr-y := cpucap-defs.h kernel-hwcap.h sysreg-defs.h
>  
>  kapi-hdrs-y := $(addprefix $(kapi)/, $(kapisyshdr-y))
>  
> @@ -18,11 +18,17 @@ kapi:   $(kapi-hdrs-y)
>  quiet_cmd_gen_cpucaps = GEN     $@
>        cmd_gen_cpucaps = mkdir -p $(dir $@); $(AWK) -f $(real-prereqs) > $@
>  
> +quiet_cmd_gen_kernel_hwcap = GEN     $@
> +      cmd_gen_kernel_hwcap = mkdir -p $(dir $@); /bin/sh -e $(real-prereqs) > $@
> +
>  quiet_cmd_gen_sysreg = GEN     $@
>        cmd_gen_sysreg = mkdir -p $(dir $@); $(AWK) -f $(real-prereqs) > $@
>  
>  $(kapi)/cpucap-defs.h: $(src)/gen-cpucaps.awk $(src)/cpucaps FORCE
>  	$(call if_changed,gen_cpucaps)
>  
> +$(kapi)/kernel-hwcap.h: $(src)/gen-kernel-hwcaps.sh $(srctree)/arch/arm64/include/uapi/asm/hwcap.h FORCE
> +	$(call if_changed,gen_kernel_hwcap)
> +
>  $(kapi)/sysreg-defs.h: $(src)/gen-sysreg.awk $(src)/sysreg FORCE
>  	$(call if_changed,gen_sysreg)
> diff --git a/arch/arm64/tools/gen-kernel-hwcaps.sh b/arch/arm64/tools/gen-kernel-hwcaps.sh
> new file mode 100644
> index 000000000000..e7cdcf428d91
> --- /dev/null
> +++ b/arch/arm64/tools/gen-kernel-hwcaps.sh
> @@ -0,0 +1,23 @@
> +#!/bin/sh -e
> +# SPDX-License-Identifier: GPL-2.0
> +#
> +# gen-kernel-hwcap.sh - Generate kernel internal hwcap.h definitions
> +#
> +# Copyright 2026 Arm, Ltd.
> +
> +if [ "$1" = "" ]; then
> +	echo "$0: no filename specified"
> +	exit 1
> +fi
> +
> +echo "#ifndef __ASM_KERNEL_HWCAPS_H"
> +echo "#define __ASM_KERNEL_HWCAPS_H"
> +echo ""
> +echo "/* Generated file - do not edit */"
> +echo ""
> +
> +grep -E '^#define HWCAP[0-9]*_[A-Z0-9_]+' $1 | \
> +	sed 's/.*HWCAP\([0-9]*\)_\([A-Z0-9_]\+\).*/#define KERNEL_HWCAP_\2\t__khwcap\1_feature(\2)/'
> +
> +echo ""
> +echo "#endif /* __ASM_KERNEL_HWCAPS_H */"
> 
> 


-- 
TQ-Systems GmbH | Mühlstraße 2, Gut Delling | 82229 Seefeld, Germany
Amtsgericht München, HRB 105018
Geschäftsführer: Detlef Schneider, Rüdiger Stahl, Stefan Schneider
http://www.tq-group.com/




  reply	other threads:[~2026-04-15  6:24 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-02 22:53 [PATCH 0/8] arm64: Implement support for 2025 dpISA extensions Mark Brown
2026-03-02 22:53 ` [PATCH 1/8] arm64/hwcap: Generate the KERNEL_HWCAP_ definitions for the hwcaps Mark Brown
2026-04-15  6:24   ` Alexander Stein [this message]
2026-04-15  8:09     ` Catalin Marinas
2026-04-15  9:07       ` Alexander Stein
2026-03-02 22:53 ` [PATCH 2/8] arm64/sysreg: Update ID_AA64ISAR0_EL1 description to DDI0601 2025-12 Mark Brown
2026-03-02 22:53 ` [PATCH 3/8] arm64/sysreg: Update ID_AA64ISAR2_EL1 " Mark Brown
2026-03-02 22:53 ` [PATCH 4/8] arm64/sysreg: Update ID_AA64FPFR0_EL1 " Mark Brown
2026-03-02 22:53 ` [PATCH 5/8] arm64/sysreg: Update ID_AA64ZFR0_EL1 " Mark Brown
2026-03-02 22:53 ` [PATCH 6/8] arm64/sysreg: Update ID_AA64SMFR0_EL1 " Mark Brown
2026-03-02 22:53 ` [PATCH 7/8] arm64/cpufeature: Define hwcaps for 2025 dpISA features Mark Brown
2026-04-09 11:33   ` Catalin Marinas
2026-04-09 12:12     ` Mark Brown
2026-03-02 22:53 ` [PATCH 8/8] kselftest/arm64: Add 2025 dpISA coverage to hwcaps Mark Brown
2026-04-09 18:35 ` (subset) [PATCH 0/8] arm64: Implement support for 2025 dpISA extensions Catalin Marinas
2026-04-09 18:39   ` Catalin Marinas

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8745494.GXAFRqVoOG@steina-w \
    --to=alexander.stein@ew.tq-group.com \
    --cc=broonie@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=shuah@kernel.org \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.