[PATCH v5 0/5] x86/cpufeatures: Automatically generate required and disabled feature masks

Xin Li (Intel) posted 5 patches 1 year, 1 month ago
There is a newer version of this series
arch/x86/Kconfig                              |   4 +-
arch/x86/Kconfig.cpu                          |  12 +-
arch/x86/Kconfig.cpufeatures                  | 197 ++++++++++++++++++
arch/x86/Makefile                             |  17 +-
arch/x86/boot/cpucheck.c                      |   3 +-
arch/x86/boot/cpuflags.c                      |   1 -
arch/x86/boot/mkcpustr.c                      |   3 +-
arch/x86/include/asm/Kbuild                   |   1 +
arch/x86/include/asm/asm-prototypes.h         |   2 +-
arch/x86/include/asm/atomic64_32.h            |   2 +-
arch/x86/include/asm/bitops.h                 |   4 +-
arch/x86/include/asm/cmpxchg_32.h             |   2 +-
arch/x86/include/asm/cpufeature.h             |  71 +------
arch/x86/include/asm/cpufeatures.h            |  13 +-
arch/x86/include/asm/disabled-features.h      | 161 --------------
arch/x86/include/asm/required-features.h      | 105 ----------
arch/x86/kernel/cpu/common.c                  |   1 +
arch/x86/kernel/verify_cpu.S                  |   4 +
arch/x86/lib/Makefile                         |   2 +-
arch/x86/lib/cmpxchg8b_emu.S                  |   2 +-
arch/x86/tools/featuremasks.awk               |  88 ++++++++
lib/atomic64_test.c                           |   2 +-
tools/arch/x86/include/asm/cpufeatures.h      |   8 -
.../arch/x86/include/asm/disabled-features.h  | 161 --------------
.../arch/x86/include/asm/required-features.h  | 105 ----------
tools/perf/check-headers.sh                   |   2 -
26 files changed, 327 insertions(+), 646 deletions(-)
create mode 100644 arch/x86/Kconfig.cpufeatures
delete mode 100644 arch/x86/include/asm/disabled-features.h
delete mode 100644 arch/x86/include/asm/required-features.h
create mode 100755 arch/x86/tools/featuremasks.awk
delete mode 100644 tools/arch/x86/include/asm/disabled-features.h
delete mode 100644 tools/arch/x86/include/asm/required-features.h
[PATCH v5 0/5] x86/cpufeatures: Automatically generate required and disabled feature masks
Posted by Xin Li (Intel) 1 year, 1 month ago
The x86 build process first generates required and disabled feature
masks based on current build config, and then uses these generated
masks to compile the source code.  When a CPU feature is not enabled
in a build config, e.g., when CONFIG_X86_FRED=n, its feature disable
flag, i.e., DISABLE_FRED, needs to be properly defined and added to
a specific disabled CPU features mask in <asm/disabled-features.h>,
as the following patch does:
https://lore.kernel.org/all/20231205105030.8698-8-xin3.li@intel.com/.
As a result, the FRED feature bit is surely cleared in the generated
kernel binary when CONFIG_X86_FRED=n.

Recently there is another case to repeat the same exercise for the
AMD SEV-SNP CPU feature:
https://lore.kernel.org/all/20240126041126.1927228-2-michael.roth@amd.com/.
https://lore.kernel.org/all/20240126041126.1927228-23-michael.roth@amd.com/.

It was one thing when there were four of CPU feature masks, but with
over 20 it is going to cause mistakes, e.g.,
https://lore.kernel.org/lkml/aaed79d5-d683-d1bc-7ba1-b33c8d6db618@suse.com/.

We want to eliminate the stupidly repeated exercise to manually assign
features to CPU feature words through introducing an AWK script to
automatically generate a header with required and disabled CPU feature
masks based on current build config, and this patch set does that.

Recently when working on the immediate form of MSR access instructions,
I needed to add a new CPU feature word for CPUID.7.1.ECX, and I had to
replace the same check "(NCAPINTS != 22)" with (NCAPINTS != 23) in 3
different files as
https://github.com/xinli-intel/linux-fred-public/commit/aa80536927fcd293be8ae54e1d5e4d886cf83f21
Obviously these replacements could be saved if the patch to add a new
CPU feature word is reworked on top of this patch set.

So this seems a good opportunity to demonstrate the convenience out of
this patch set, and here comes v5 with just one more patch on top of v4
that adds a new CPU feature word for CPUID.7.1.ECX and uses it for the
immediate form of MSR access feature.

Link to v4:
https://lore.kernel.org/lkml/20240628174544.3118826-1-xin@zytor.com/


H. Peter Anvin (Intel) (2):
  x86/cpufeatures: Add {required,disabled} feature configs
  x86/cpufeatures: Generate a feature mask header based on build config

Xin Li (Intel) (3):
  x86/cpufeatures: Remove {disabled,required}-features.h
  x86/cpufeatures: Use AWK to generate {REQUIRED|DISABLED}_MASK_BIT_SET
  x86/cpufeatures: Add the CPU feature bit for MSR immediate form
    instructions

 arch/x86/Kconfig                              |   4 +-
 arch/x86/Kconfig.cpu                          |  12 +-
 arch/x86/Kconfig.cpufeatures                  | 197 ++++++++++++++++++
 arch/x86/Makefile                             |  17 +-
 arch/x86/boot/cpucheck.c                      |   3 +-
 arch/x86/boot/cpuflags.c                      |   1 -
 arch/x86/boot/mkcpustr.c                      |   3 +-
 arch/x86/include/asm/Kbuild                   |   1 +
 arch/x86/include/asm/asm-prototypes.h         |   2 +-
 arch/x86/include/asm/atomic64_32.h            |   2 +-
 arch/x86/include/asm/bitops.h                 |   4 +-
 arch/x86/include/asm/cmpxchg_32.h             |   2 +-
 arch/x86/include/asm/cpufeature.h             |  71 +------
 arch/x86/include/asm/cpufeatures.h            |  13 +-
 arch/x86/include/asm/disabled-features.h      | 161 --------------
 arch/x86/include/asm/required-features.h      | 105 ----------
 arch/x86/kernel/cpu/common.c                  |   1 +
 arch/x86/kernel/verify_cpu.S                  |   4 +
 arch/x86/lib/Makefile                         |   2 +-
 arch/x86/lib/cmpxchg8b_emu.S                  |   2 +-
 arch/x86/tools/featuremasks.awk               |  88 ++++++++
 lib/atomic64_test.c                           |   2 +-
 tools/arch/x86/include/asm/cpufeatures.h      |   8 -
 .../arch/x86/include/asm/disabled-features.h  | 161 --------------
 .../arch/x86/include/asm/required-features.h  | 105 ----------
 tools/perf/check-headers.sh                   |   2 -
 26 files changed, 327 insertions(+), 646 deletions(-)
 create mode 100644 arch/x86/Kconfig.cpufeatures
 delete mode 100644 arch/x86/include/asm/disabled-features.h
 delete mode 100644 arch/x86/include/asm/required-features.h
 create mode 100755 arch/x86/tools/featuremasks.awk
 delete mode 100644 tools/arch/x86/include/asm/disabled-features.h
 delete mode 100644 tools/arch/x86/include/asm/required-features.h


base-commit: af2c8596bd2e455ae350ba1585bc938ee85aa38d
-- 
2.47.1
Re: [PATCH v5 0/5] x86/cpufeatures: Automatically generate required and disabled feature masks
Posted by Xin Li 12 months ago
On 1/5/2025 11:07 PM, Xin Li (Intel) wrote:
> The x86 build process first generates required and disabled feature
> masks based on current build config, and then uses these generated
> masks to compile the source code.  When a CPU feature is not enabled
> in a build config, e.g., when CONFIG_X86_FRED=n, its feature disable
> flag, i.e., DISABLE_FRED, needs to be properly defined and added to
> a specific disabled CPU features mask in <asm/disabled-features.h>,
> as the following patch does:
> https://lore.kernel.org/all/20231205105030.8698-8-xin3.li@intel.com/.
> As a result, the FRED feature bit is surely cleared in the generated
> kernel binary when CONFIG_X86_FRED=n.
> 
> Recently there is another case to repeat the same exercise for the
> AMD SEV-SNP CPU feature:
> https://lore.kernel.org/all/20240126041126.1927228-2-michael.roth@amd.com/.
> https://lore.kernel.org/all/20240126041126.1927228-23-michael.roth@amd.com/.
> 
> It was one thing when there were four of CPU feature masks, but with
> over 20 it is going to cause mistakes, e.g.,
> https://lore.kernel.org/lkml/aaed79d5-d683-d1bc-7ba1-b33c8d6db618@suse.com/.
> 
> We want to eliminate the stupidly repeated exercise to manually assign
> features to CPU feature words through introducing an AWK script to
> automatically generate a header with required and disabled CPU feature
> masks based on current build config, and this patch set does that.
> 
> Recently when working on the immediate form of MSR access instructions,
> I needed to add a new CPU feature word for CPUID.7.1.ECX, and I had to
> replace the same check "(NCAPINTS != 22)" with (NCAPINTS != 23) in 3
> different files as
> https://github.com/xinli-intel/linux-fred-public/commit/aa80536927fcd293be8ae54e1d5e4d886cf83f21
> Obviously these replacements could be saved if the patch to add a new
> CPU feature word is reworked on top of this patch set.
> 
> So this seems a good opportunity to demonstrate the convenience out of
> this patch set, and here comes v5 with just one more patch on top of v4
> that adds a new CPU feature word for CPUID.7.1.ECX and uses it for the
> immediate form of MSR access feature.
> 
> Link to v4:
> https://lore.kernel.org/lkml/20240628174544.3118826-1-xin@zytor.com/

The patch proposed in the following review reminds me this infra
improvement patch set again, so a gentle ping :)

https://lore.kernel.org/lkml/CA+i-1C3LDJTf26WdBo7MvCdTs-dybqsUp3Ze7NowcOUHPWMXrg@mail.gmail.com/

Thanks!
     Xin
Re: [PATCH v5 0/5] x86/cpufeatures: Automatically generate required and disabled feature masks
Posted by Borislav Petkov 11 months, 3 weeks ago
On Sun, Jan 05, 2025 at 11:07:22PM -0800, Xin Li (Intel) wrote:
>  arch/x86/Kconfig                              |   4 +-
>  arch/x86/Kconfig.cpu                          |  12 +-
>  arch/x86/Kconfig.cpufeatures                  | 197 ++++++++++++++++++
>  arch/x86/Makefile                             |  17 +-
>  arch/x86/boot/cpucheck.c                      |   3 +-
>  arch/x86/boot/cpuflags.c                      |   1 -
>  arch/x86/boot/mkcpustr.c                      |   3 +-
>  arch/x86/include/asm/Kbuild                   |   1 +
>  arch/x86/include/asm/asm-prototypes.h         |   2 +-
>  arch/x86/include/asm/atomic64_32.h            |   2 +-
>  arch/x86/include/asm/bitops.h                 |   4 +-
>  arch/x86/include/asm/cmpxchg_32.h             |   2 +-
>  arch/x86/include/asm/cpufeature.h             |  71 +------
>  arch/x86/include/asm/cpufeatures.h            |  13 +-
>  arch/x86/include/asm/disabled-features.h      | 161 --------------
>  arch/x86/include/asm/required-features.h      | 105 ----------
>  arch/x86/kernel/cpu/common.c                  |   1 +
>  arch/x86/kernel/verify_cpu.S                  |   4 +
>  arch/x86/lib/Makefile                         |   2 +-
>  arch/x86/lib/cmpxchg8b_emu.S                  |   2 +-
>  arch/x86/tools/featuremasks.awk               |  88 ++++++++
>  lib/atomic64_test.c                           |   2 +-
>  tools/arch/x86/include/asm/cpufeatures.h      |   8 -
>  .../arch/x86/include/asm/disabled-features.h  | 161 --------------
>  .../arch/x86/include/asm/required-features.h  | 105 ----------
>  tools/perf/check-headers.sh                   |   2 -
>  26 files changed, 327 insertions(+), 646 deletions(-)
>  create mode 100644 arch/x86/Kconfig.cpufeatures
>  delete mode 100644 arch/x86/include/asm/disabled-features.h
>  delete mode 100644 arch/x86/include/asm/required-features.h
>  create mode 100755 arch/x86/tools/featuremasks.awk
>  delete mode 100644 tools/arch/x86/include/asm/disabled-features.h
>  delete mode 100644 tools/arch/x86/include/asm/required-features.h

make --no-print-directory -C /home/kernel/linux \
-f /home/kernel/linux/Makefile 
# GEN     arch/x86/include/generated/asm/orc_hash.h
  mkdir -p arch/x86/include/generated/asm/; sh ./scripts/orc_hash.sh < arch/x86/include/asm/orc_types.h > arch/x86/include/generated/asm/orc_hash.h
make -f ./scripts/Makefile.build obj=scripts/basic
set -e; mkdir -p include/config/; trap "rm -f include/config/.tmp_kernel.release" EXIT; { ./scripts/setlocalversion .; } > include/config/.tmp_kernel.release; if [ ! -r include/config/kernel.release ] || ! cmp -s include/config/kernel.release include/config/.tmp_kernel.release; then : '  UPD     include/config/kernel.release'; mv -f include/config/.tmp_kernel.release include/config/kernel.release; fi
# GEN     arch/x86/include/generated/asm/featuremasks.h
  awk -f ./arch/x86/tools/featuremasks.awk ./arch/x86/include/asm/cpufeatures.h .config > arch/x86/include/generated/asm/featuremasks.h
make -f ./scripts/Makefile.asm-headers obj=arch/x86/include/generated/uapi/asm \
generic=include/uapi/asm-generic
awk: ./arch/x86/tools/featuremasks.awk: line 16: syntax error at or near {
awk: ./arch/x86/tools/featuremasks.awk: line 20: syntax error at or near :
awk: ./arch/x86/tools/featuremasks.awk: line 24: syntax error at or near }
make[1]: *** [arch/x86/Makefile:285: arch/x86/include/generated/asm/featuremasks.h] Error 2
make[1]: *** Deleting file 'arch/x86/include/generated/asm/featuremasks.h'
make[1]: *** Waiting for unfinished jobs....
# WRAP    arch/x86/include/generated/uapi/asm/bpf_perf_event.h
  echo "#include <asm-generic/bpf_perf_event.h>" > arch/x86/include/generated/uapi/asm/bpf_perf_event.h
# WRAP    arch/x86/include/generated/uapi/asm/fcntl.h
  echo "#include <asm-generic/fcntl.h>" > arch/x86/include/generated/uapi/asm/fcntl.h
# WRAP    arch/x86/include/generated/uapi/asm/errno.h
  echo "#include <asm-generic/errno.h>" > arch/x86/include/generated/uapi/asm/errno.h
# WRAP    arch/x86/include/generated/uapi/asm/ioctl.h
  echo "#include <asm-generic/ioctl.h>" > arch/x86/include/generated/uapi/asm/ioctl.h
# WRAP    arch/x86/include/generated/uapi/asm/ioctls.h
  echo "#include <asm-generic/ioctls.h>" > arch/x86/include/generated/uapi/asm/ioctls.h
# WRAP    arch/x86/include/generated/uapi/asm/ipcbuf.h
  echo "#include <asm-generic/ipcbuf.h>" > arch/x86/include/generated/uapi/asm/ipcbuf.h
# WRAP    arch/x86/include/generated/uapi/asm/param.h
  echo "#include <asm-generic/param.h>" > arch/x86/include/generated/uapi/asm/param.h
# WRAP    arch/x86/include/generated/uapi/asm/poll.h
  echo "#include <asm-generic/poll.h>" > arch/x86/include/generated/uapi/asm/poll.h
# WRAP    arch/x86/include/generated/uapi/asm/resource.h
  echo "#include <asm-generic/resource.h>" > arch/x86/include/generated/uapi/asm/resource.h
# WRAP    arch/x86/include/generated/uapi/asm/socket.h
  echo "#include <asm-generic/socket.h>" > arch/x86/include/generated/uapi/asm/socket.h
# WRAP    arch/x86/include/generated/uapi/asm/sockios.h
  echo "#include <asm-generic/sockios.h>" > arch/x86/include/generated/uapi/asm/sockios.h
# WRAP    arch/x86/include/generated/uapi/asm/termbits.h
  echo "#include <asm-generic/termbits.h>" > arch/x86/include/generated/uapi/asm/termbits.h
# WRAP    arch/x86/include/generated/uapi/asm/termios.h
  echo "#include <asm-generic/termios.h>" > arch/x86/include/generated/uapi/asm/termios.h
# WRAP    arch/x86/include/generated/uapi/asm/types.h
  echo "#include <asm-generic/types.h>" > arch/x86/include/generated/uapi/asm/types.h
make: *** [Makefile:251: __sub-make] Error 2

Probably due to:

$ awk --version
mawk 1.3.4 20250131
Copyright 2008-2024,2025, Thomas E. Dickey
Copyright 1991-1996,2014, Michael D. Brennan

random-funcs:       srandom/random
regex-funcs:        internal

compiled limits:
sprintf buffer      8192
maximum-integer     9223372036854775808

while the other box has GNU awk where it obviously works.

HTH.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette
Re: [PATCH v5 0/5] x86/cpufeatures: Automatically generate required and disabled feature masks
Posted by Xin Li 11 months, 2 weeks ago
On 2/23/2025 2:27 AM, Borislav Petkov wrote:
> On Sun, Jan 05, 2025 at 11:07:22PM -0800, Xin Li (Intel) wrote:
>>   arch/x86/Kconfig                              |   4 +-
>>   arch/x86/Kconfig.cpu                          |  12 +-
>>   arch/x86/Kconfig.cpufeatures                  | 197 ++++++++++++++++++
>>   arch/x86/Makefile                             |  17 +-
>>   arch/x86/boot/cpucheck.c                      |   3 +-
>>   arch/x86/boot/cpuflags.c                      |   1 -
>>   arch/x86/boot/mkcpustr.c                      |   3 +-
>>   arch/x86/include/asm/Kbuild                   |   1 +
>>   arch/x86/include/asm/asm-prototypes.h         |   2 +-
>>   arch/x86/include/asm/atomic64_32.h            |   2 +-
>>   arch/x86/include/asm/bitops.h                 |   4 +-
>>   arch/x86/include/asm/cmpxchg_32.h             |   2 +-
>>   arch/x86/include/asm/cpufeature.h             |  71 +------
>>   arch/x86/include/asm/cpufeatures.h            |  13 +-
>>   arch/x86/include/asm/disabled-features.h      | 161 --------------
>>   arch/x86/include/asm/required-features.h      | 105 ----------
>>   arch/x86/kernel/cpu/common.c                  |   1 +
>>   arch/x86/kernel/verify_cpu.S                  |   4 +
>>   arch/x86/lib/Makefile                         |   2 +-
>>   arch/x86/lib/cmpxchg8b_emu.S                  |   2 +-
>>   arch/x86/tools/featuremasks.awk               |  88 ++++++++
>>   lib/atomic64_test.c                           |   2 +-
>>   tools/arch/x86/include/asm/cpufeatures.h      |   8 -
>>   .../arch/x86/include/asm/disabled-features.h  | 161 --------------
>>   .../arch/x86/include/asm/required-features.h  | 105 ----------
>>   tools/perf/check-headers.sh                   |   2 -
>>   26 files changed, 327 insertions(+), 646 deletions(-)
>>   create mode 100644 arch/x86/Kconfig.cpufeatures
>>   delete mode 100644 arch/x86/include/asm/disabled-features.h
>>   delete mode 100644 arch/x86/include/asm/required-features.h
>>   create mode 100755 arch/x86/tools/featuremasks.awk
>>   delete mode 100644 tools/arch/x86/include/asm/disabled-features.h
>>   delete mode 100644 tools/arch/x86/include/asm/required-features.h
> 
> make --no-print-directory -C /home/kernel/linux \
> -f /home/kernel/linux/Makefile
> # GEN     arch/x86/include/generated/asm/orc_hash.h
>    mkdir -p arch/x86/include/generated/asm/; sh ./scripts/orc_hash.sh < arch/x86/include/asm/orc_types.h > arch/x86/include/generated/asm/orc_hash.h
> make -f ./scripts/Makefile.build obj=scripts/basic
> set -e; mkdir -p include/config/; trap "rm -f include/config/.tmp_kernel.release" EXIT; { ./scripts/setlocalversion .; } > include/config/.tmp_kernel.release; if [ ! -r include/config/kernel.release ] || ! cmp -s include/config/kernel.release include/config/.tmp_kernel.release; then : '  UPD     include/config/kernel.release'; mv -f include/config/.tmp_kernel.release include/config/kernel.release; fi
> # GEN     arch/x86/include/generated/asm/featuremasks.h
>    awk -f ./arch/x86/tools/featuremasks.awk ./arch/x86/include/asm/cpufeatures.h .config > arch/x86/include/generated/asm/featuremasks.h
> make -f ./scripts/Makefile.asm-headers obj=arch/x86/include/generated/uapi/asm \
> generic=include/uapi/asm-generic
> awk: ./arch/x86/tools/featuremasks.awk: line 16: syntax error at or near {
> awk: ./arch/x86/tools/featuremasks.awk: line 20: syntax error at or near :
> awk: ./arch/x86/tools/featuremasks.awk: line 24: syntax error at or near }
> make[1]: *** [arch/x86/Makefile:285: arch/x86/include/generated/asm/featuremasks.h] Error 2
> make[1]: *** Deleting file 'arch/x86/include/generated/asm/featuremasks.h'
> make[1]: *** Waiting for unfinished jobs....
> # WRAP    arch/x86/include/generated/uapi/asm/bpf_perf_event.h
>    echo "#include <asm-generic/bpf_perf_event.h>" > arch/x86/include/generated/uapi/asm/bpf_perf_event.h
> # WRAP    arch/x86/include/generated/uapi/asm/fcntl.h
>    echo "#include <asm-generic/fcntl.h>" > arch/x86/include/generated/uapi/asm/fcntl.h
> # WRAP    arch/x86/include/generated/uapi/asm/errno.h
>    echo "#include <asm-generic/errno.h>" > arch/x86/include/generated/uapi/asm/errno.h
> # WRAP    arch/x86/include/generated/uapi/asm/ioctl.h
>    echo "#include <asm-generic/ioctl.h>" > arch/x86/include/generated/uapi/asm/ioctl.h
> # WRAP    arch/x86/include/generated/uapi/asm/ioctls.h
>    echo "#include <asm-generic/ioctls.h>" > arch/x86/include/generated/uapi/asm/ioctls.h
> # WRAP    arch/x86/include/generated/uapi/asm/ipcbuf.h
>    echo "#include <asm-generic/ipcbuf.h>" > arch/x86/include/generated/uapi/asm/ipcbuf.h
> # WRAP    arch/x86/include/generated/uapi/asm/param.h
>    echo "#include <asm-generic/param.h>" > arch/x86/include/generated/uapi/asm/param.h
> # WRAP    arch/x86/include/generated/uapi/asm/poll.h
>    echo "#include <asm-generic/poll.h>" > arch/x86/include/generated/uapi/asm/poll.h
> # WRAP    arch/x86/include/generated/uapi/asm/resource.h
>    echo "#include <asm-generic/resource.h>" > arch/x86/include/generated/uapi/asm/resource.h
> # WRAP    arch/x86/include/generated/uapi/asm/socket.h
>    echo "#include <asm-generic/socket.h>" > arch/x86/include/generated/uapi/asm/socket.h
> # WRAP    arch/x86/include/generated/uapi/asm/sockios.h
>    echo "#include <asm-generic/sockios.h>" > arch/x86/include/generated/uapi/asm/sockios.h
> # WRAP    arch/x86/include/generated/uapi/asm/termbits.h
>    echo "#include <asm-generic/termbits.h>" > arch/x86/include/generated/uapi/asm/termbits.h
> # WRAP    arch/x86/include/generated/uapi/asm/termios.h
>    echo "#include <asm-generic/termios.h>" > arch/x86/include/generated/uapi/asm/termios.h
> # WRAP    arch/x86/include/generated/uapi/asm/types.h
>    echo "#include <asm-generic/types.h>" > arch/x86/include/generated/uapi/asm/types.h
> make: *** [Makefile:251: __sub-make] Error 2
> 
> Probably due to:
> 
> $ awk --version
> mawk 1.3.4 20250131
> Copyright 2008-2024,2025, Thomas E. Dickey
> Copyright 1991-1996,2014, Michael D. Brennan
> 
> random-funcs:       srandom/random
> regex-funcs:        internal
> 
> compiled limits:
> sprintf buffer      8192
> maximum-integer     9223372036854775808
> 
> while the other box has GNU awk where it obviously works.

After looking into the build issue, we think it's better to change to 
perl; GNU awk has quite a few extended features that standard awk 
doesn't support, e.g., BEGINFILE/FPAT/...

Thanks!
     Xin

> 
> HTH.
>
Re: [PATCH v5 0/5] x86/cpufeatures: Automatically generate required and disabled feature masks
Posted by Borislav Petkov 11 months, 2 weeks ago
On Tue, Feb 25, 2025 at 09:10:01AM -0800, Xin Li wrote:
> After looking into the build issue, we think it's better to change to perl;
> GNU awk has quite a few extended features that standard awk doesn't support,
> e.g., BEGINFILE/FPAT/...

... which will make the kernel build depend on yet another tool. I know,
I know, perl is everywhere but someone would crawl out of the woodwork
complaining that building the kernel pulls in even more stuff.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette
Re: [PATCH v5 0/5] x86/cpufeatures: Automatically generate required and disabled feature masks
Posted by Nikolay Borisov 11 months, 2 weeks ago

On 25.02.25 г. 19:49 ч., Borislav Petkov wrote:
> On Tue, Feb 25, 2025 at 09:10:01AM -0800, Xin Li wrote:
>> After looking into the build issue, we think it's better to change to perl;
>> GNU awk has quite a few extended features that standard awk doesn't support,
>> e.g., BEGINFILE/FPAT/...
> 
> ... which will make the kernel build depend on yet another tool. I know,
> I know, perl is everywhere but someone would crawl out of the woodwork
> complaining that building the kernel pulls in even more stuff.
> 


But don't we use perl even now:

$ find . -iname *.pl | wc -l
55

Re: [PATCH v5 0/5] x86/cpufeatures: Automatically generate required and disabled feature masks
Posted by Borislav Petkov 11 months, 2 weeks ago
On Tue, Feb 25, 2025 at 07:54:50PM +0200, Nikolay Borisov wrote:
> But don't we use perl even now:
> 
> $ find . -iname *.pl | wc -l
> 55

You're searching wrong:

$ git grep -w perl arch/x86/
arch/x86/crypto/poly1305-x86_64-cryptogams.pl:1:#!/usr/bin/env perl
$

That's some crypto-special thing.

This'll force it on *everything*.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette
Re: [PATCH v5 0/5] x86/cpufeatures: Automatically generate required and disabled feature masks
Posted by H. Peter Anvin 11 months, 2 weeks ago
On February 25, 2025 10:00:51 AM PST, Borislav Petkov <bp@alien8.de> wrote:
>On Tue, Feb 25, 2025 at 07:54:50PM +0200, Nikolay Borisov wrote:
>> But don't we use perl even now:
>> 
>> $ find . -iname *.pl | wc -l
>> 55
>
>You're searching wrong:
>
>$ git grep -w perl arch/x86/
>arch/x86/crypto/poly1305-x86_64-cryptogams.pl:1:#!/usr/bin/env perl
>$
>
>That's some crypto-special thing.
>
>This'll force it on *everything*.
>

Yeah we had that debate back and forth. Although I personally feel that any sensible build host would have or be able to have Perl, the consensus opinion seems to be that if it can be done with POSIX standard tools or host-side C it should be unless there is a very strong justification to the contrary. 

I guess at some point that will add host-side Rust, which will be fun since that adds the whole Rust user space runtime.
Re: [PATCH v5 0/5] x86/cpufeatures: Automatically generate required and disabled feature masks
Posted by Borislav Petkov 11 months, 2 weeks ago
On Tue, Feb 25, 2025 at 10:10:03AM -0800, H. Peter Anvin wrote:
> Yeah we had that debate back and forth. Although I personally feel that any
> sensible build host would have or be able to have Perl, the consensus
> opinion seems to be that if it can be done with POSIX standard tools or
> host-side C it should be unless there is a very strong justification to the
> contrary. 

Right, Xin, please make sure you put this rationale in the commit message so
that people can read it.

> I guess at some point that will add host-side Rust, which will be fun since
> that adds the whole Rust user space runtime.

There's that too. And that'll be even more fun. I can't wait for the
compiler-specific workarounds. We're having a lot of fun with two C compilers
already but who says we can't have more?!

/facepalm.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette
Re: [PATCH v5 0/5] x86/cpufeatures: Automatically generate required and disabled feature masks
Posted by H. Peter Anvin 11 months, 2 weeks ago
On February 25, 2025 10:15:51 AM PST, Borislav Petkov <bp@alien8.de> wrote:
>On Tue, Feb 25, 2025 at 10:10:03AM -0800, H. Peter Anvin wrote:
>> Yeah we had that debate back and forth. Although I personally feel that any
>> sensible build host would have or be able to have Perl, the consensus
>> opinion seems to be that if it can be done with POSIX standard tools or
>> host-side C it should be unless there is a very strong justification to the
>> contrary. 
>
>Right, Xin, please make sure you put this rationale in the commit message so
>that people can read it.
>
>> I guess at some point that will add host-side Rust, which will be fun since
>> that adds the whole Rust user space runtime.
>
>There's that too. And that'll be even more fun. I can't wait for the
>compiler-specific workarounds. We're having a lot of fun with two C compilers
>already but who says we can't have more?!
>
>/facepalm.
>

Yeah. See the thread on this topic, where it seems that the Rust language people haven't even figured out basic things like their aliasing model yet...
Re: [PATCH v5 0/5] x86/cpufeatures: Automatically generate required and disabled feature masks
Posted by Xin Li 11 months, 2 weeks ago
On 2/25/2025 10:15 AM, Borislav Petkov wrote:
> On Tue, Feb 25, 2025 at 10:10:03AM -0800, H. Peter Anvin wrote:
>> Yeah we had that debate back and forth. Although I personally feel that any
>> sensible build host would have or be able to have Perl, the consensus
>> opinion seems to be that if it can be done with POSIX standard tools or
>> host-side C it should be unless there is a very strong justification to the
>> contrary.
> 
> Right, Xin, please make sure you put this rationale in the commit message so
> that people can read it.

Oh, I'm thinking to stick to awk with rewriting the part that a standard
POSIX awk doesn't support...