* [kvm-unit-tests PATCH v4 1/5] configure: arm64: Don't display 'aarch64' as the default architecture
2025-04-08 13:20 [kvm-unit-tests PATCH v4 0/5] arm64: Change the default QEMU CPU type to "max Jean-Philippe Brucker
@ 2025-04-08 13:20 ` Jean-Philippe Brucker
2025-04-08 13:20 ` [kvm-unit-tests PATCH v4 2/5] configure: arm/arm64: Display the correct default processor Jean-Philippe Brucker
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Jean-Philippe Brucker @ 2025-04-08 13:20 UTC (permalink / raw)
To: andrew.jones, alexandru.elisei
Cc: eric.auger, kvmarm, kvm, kvm-riscv, vladimir.murzin,
Jean-Philippe Brucker
From: Alexandru Elisei <alexandru.elisei@arm.com>
--arch=aarch64, intentional or not, has been supported since the initial
arm64 support, commit 39ac3f8494be ("arm64: initial drop"). However,
"aarch64" does not show up in the list of supported architectures, but
it's displayed as the default architecture if doing ./configure --help
on an arm64 machine.
The help text for --arch changes from:
--arch=ARCH architecture to compile for (aarch64). ARCH can be one of:
arm, arm64, i386, ppc64, riscv32, riscv64, s390x, x86_64
to:
--arch=ARCH architecture to compile for (arm64). ARCH can be one of:
arm, arm64, i386, ppc64, riscv32, riscv64, s390x, x86_64
Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
Reviewed-by: Alexandru Elisei <alexandru.elisei@arm.com>
---
configure | 1 +
1 file changed, 1 insertion(+)
diff --git a/configure b/configure
index 52904d3a..010c68ff 100755
--- a/configure
+++ b/configure
@@ -43,6 +43,7 @@ else
fi
usage() {
+ [ "$arch" = "aarch64" ] && arch="arm64"
cat <<-EOF
Usage: $0 [options]
--
2.49.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [kvm-unit-tests PATCH v4 2/5] configure: arm/arm64: Display the correct default processor
2025-04-08 13:20 [kvm-unit-tests PATCH v4 0/5] arm64: Change the default QEMU CPU type to "max Jean-Philippe Brucker
2025-04-08 13:20 ` [kvm-unit-tests PATCH v4 1/5] configure: arm64: Don't display 'aarch64' as the default architecture Jean-Philippe Brucker
@ 2025-04-08 13:20 ` Jean-Philippe Brucker
2025-04-08 13:20 ` [kvm-unit-tests PATCH v4 3/5] arm64: Implement the ./configure --processor option Jean-Philippe Brucker
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Jean-Philippe Brucker @ 2025-04-08 13:20 UTC (permalink / raw)
To: andrew.jones, alexandru.elisei
Cc: eric.auger, kvmarm, kvm, kvm-riscv, vladimir.murzin,
Jean-Philippe Brucker
From: Alexandru Elisei <alexandru.elisei@arm.com>
The help text for the --processor option displays the architecture name as
the default processor type. But the default for arm is cortex-a15, and for
arm64 is cortex-a57. Teach configure to display the correct default
processor type for these two architectures.
Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
Reviewed-by: Alexandru Elisei <alexandru.elisei@arm.com>
---
configure | 30 ++++++++++++++++++++++--------
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/configure b/configure
index 010c68ff..b4875ef3 100755
--- a/configure
+++ b/configure
@@ -5,6 +5,24 @@ if [ -z "${BASH_VERSINFO[0]}" ] || [ "${BASH_VERSINFO[0]}" -lt 4 ] ; then
exit 1
fi
+# Return the default CPU type to compile for
+function get_default_processor()
+{
+ local arch="$1"
+
+ case "$arch" in
+ "arm")
+ echo "cortex-a15"
+ ;;
+ "arm64")
+ echo "cortex-a57"
+ ;;
+ *)
+ echo "$arch"
+ ;;
+ esac
+}
+
srcdir=$(cd "$(dirname "$0")"; pwd)
prefix=/usr/local
cc=gcc
@@ -44,13 +62,14 @@ fi
usage() {
[ "$arch" = "aarch64" ] && arch="arm64"
+ [ -z "$processor" ] && processor=$(get_default_processor $arch)
cat <<-EOF
Usage: $0 [options]
Options include:
--arch=ARCH architecture to compile for ($arch). ARCH can be one of:
arm, arm64, i386, ppc64, riscv32, riscv64, s390x, x86_64
- --processor=PROCESSOR processor to compile for ($arch)
+ --processor=PROCESSOR processor to compile for ($processor)
--target=TARGET target platform that the tests will be running on (qemu or
kvmtool, default is qemu) (arm/arm64 only)
--cross-prefix=PREFIX cross compiler prefix
@@ -326,13 +345,8 @@ if [ "$earlycon" ]; then
fi
fi
-[ -z "$processor" ] && processor="$arch"
-
-if [ "$processor" = "arm64" ]; then
- processor="cortex-a57"
-elif [ "$processor" = "arm" ]; then
- processor="cortex-a15"
-fi
+# $arch will have changed when cross-compiling.
+[ -z "$processor" ] && processor=$(get_default_processor $arch)
if [ "$arch" = "i386" ] || [ "$arch" = "x86_64" ]; then
testdir=x86
--
2.49.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [kvm-unit-tests PATCH v4 3/5] arm64: Implement the ./configure --processor option
2025-04-08 13:20 [kvm-unit-tests PATCH v4 0/5] arm64: Change the default QEMU CPU type to "max Jean-Philippe Brucker
2025-04-08 13:20 ` [kvm-unit-tests PATCH v4 1/5] configure: arm64: Don't display 'aarch64' as the default architecture Jean-Philippe Brucker
2025-04-08 13:20 ` [kvm-unit-tests PATCH v4 2/5] configure: arm/arm64: Display the correct default processor Jean-Philippe Brucker
@ 2025-04-08 13:20 ` Jean-Philippe Brucker
2025-04-08 13:20 ` [kvm-unit-tests PATCH v4 4/5] configure: Add --target-cpu option Jean-Philippe Brucker
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Jean-Philippe Brucker @ 2025-04-08 13:20 UTC (permalink / raw)
To: andrew.jones, alexandru.elisei
Cc: eric.auger, kvmarm, kvm, kvm-riscv, vladimir.murzin,
Jean-Philippe Brucker
From: Alexandru Elisei <alexandru.elisei@arm.com>
The help text for the ./configure --processor option says:
--processor=PROCESSOR processor to compile for (cortex-a57)
but, unlike arm, the build system does not pass a -mcpu argument to the
compiler. Fix it, and bring arm64 at parity with arm.
Note that this introduces a regression, which is also present on arm: if
the --processor argument is something that the compiler doesn't understand,
but qemu does (like 'max'), then compilation fails. This will be fixed in a
following patch; another fix is to specify a CPU model that gcc implements
by using --cflags=-mcpu=<cpu>.
Reviewed-by: Andrew Jones <andrew.jones@linux.dev>
Reviewed-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
---
arm/Makefile.arm | 1 -
arm/Makefile.common | 1 +
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/arm/Makefile.arm b/arm/Makefile.arm
index 7fd39f3a..d6250b7f 100644
--- a/arm/Makefile.arm
+++ b/arm/Makefile.arm
@@ -12,7 +12,6 @@ $(error Cannot build arm32 tests as EFI apps)
endif
CFLAGS += $(machine)
-CFLAGS += -mcpu=$(PROCESSOR)
CFLAGS += -mno-unaligned-access
ifeq ($(TARGET),qemu)
diff --git a/arm/Makefile.common b/arm/Makefile.common
index f828dbe0..a5d97bcf 100644
--- a/arm/Makefile.common
+++ b/arm/Makefile.common
@@ -25,6 +25,7 @@ AUXFLAGS ?= 0x0
# stack.o relies on frame pointers.
KEEP_FRAME_POINTER := y
+CFLAGS += -mcpu=$(PROCESSOR)
CFLAGS += -std=gnu99
CFLAGS += -ffreestanding
CFLAGS += -O2
--
2.49.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [kvm-unit-tests PATCH v4 4/5] configure: Add --target-cpu option
2025-04-08 13:20 [kvm-unit-tests PATCH v4 0/5] arm64: Change the default QEMU CPU type to "max Jean-Philippe Brucker
` (2 preceding siblings ...)
2025-04-08 13:20 ` [kvm-unit-tests PATCH v4 3/5] arm64: Implement the ./configure --processor option Jean-Philippe Brucker
@ 2025-04-08 13:20 ` Jean-Philippe Brucker
2025-04-08 13:20 ` [kvm-unit-tests PATCH v4 5/5] arm64: Use -cpu max as the default for TCG Jean-Philippe Brucker
2025-04-08 15:16 ` [kvm-unit-tests PATCH v4 0/5] arm64: Change the default QEMU CPU type to "max Andrew Jones
5 siblings, 0 replies; 7+ messages in thread
From: Jean-Philippe Brucker @ 2025-04-08 13:20 UTC (permalink / raw)
To: andrew.jones, alexandru.elisei
Cc: eric.auger, kvmarm, kvm, kvm-riscv, vladimir.murzin,
Jean-Philippe Brucker
Add the --target-cpu option to let users set the CPU type to run on.
At the moment --processor allows to set both GCC -mcpu flag and QEMU
-cpu. On Arm we'd like to pass `-cpu max` to QEMU in order to enable all
the TCG features by default, and it could also be nice to let users
modify the CPU capabilities by setting extra -cpu options. Since GCC
-mcpu doesn't accept "max" or "host", separate the compiler and QEMU
arguments.
`--processor` is now exclusively for compiler options, as indicated by
its documentation ("processor to compile for"). So use $TARGET_CPU on
RISC-V as well.
Suggested-by: Andrew Jones <andrew.jones@linux.dev>
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
---
scripts/mkstandalone.sh | 3 ++-
arm/run | 15 +++++++++------
riscv/run | 8 ++++----
configure | 27 +++++++++++++++++++++++++++
4 files changed, 42 insertions(+), 11 deletions(-)
diff --git a/scripts/mkstandalone.sh b/scripts/mkstandalone.sh
index 2318a85f..c4ba81f1 100755
--- a/scripts/mkstandalone.sh
+++ b/scripts/mkstandalone.sh
@@ -42,7 +42,8 @@ generate_test ()
config_export ARCH
config_export ARCH_NAME
- config_export PROCESSOR
+ config_export TARGET_CPU
+ config_export DEFAULT_QEMU_CPU
echo "echo BUILD_HEAD=$(cat build-head)"
diff --git a/arm/run b/arm/run
index efdd44ce..ef585582 100755
--- a/arm/run
+++ b/arm/run
@@ -8,7 +8,7 @@ if [ -z "$KUT_STANDALONE" ]; then
source config.mak
source scripts/arch-run.bash
fi
-processor="$PROCESSOR"
+qemu_cpu="$TARGET_CPU"
if [ "$QEMU" ] && [ -z "$ACCEL" ] &&
[ "$HOST" = "aarch64" ] && [ "$ARCH" = "arm" ] &&
@@ -37,12 +37,15 @@ if [ "$ACCEL" = "kvm" ]; then
fi
fi
-if [ "$ACCEL" = "kvm" ] || [ "$ACCEL" = "hvf" ]; then
- if [ "$HOST" = "aarch64" ] || [ "$HOST" = "arm" ]; then
- processor="host"
+if [ -z "$qemu_cpu" ]; then
+ if ( [ "$ACCEL" = "kvm" ] || [ "$ACCEL" = "hvf" ] ) &&
+ ( [ "$HOST" = "aarch64" ] || [ "$HOST" = "arm" ] ); then
+ qemu_cpu="host"
if [ "$ARCH" = "arm" ] && [ "$HOST" = "aarch64" ]; then
- processor+=",aarch64=off"
+ qemu_cpu+=",aarch64=off"
fi
+ else
+ qemu_cpu="$DEFAULT_QEMU_CPU"
fi
fi
@@ -71,7 +74,7 @@ if $qemu $M -device '?' | grep -q pci-testdev; then
fi
A="-accel $ACCEL$ACCEL_PROPS"
-command="$qemu -nodefaults $M $A -cpu $processor $chr_testdev $pci_testdev"
+command="$qemu -nodefaults $M $A -cpu $qemu_cpu $chr_testdev $pci_testdev"
command+=" -display none -serial stdio"
command="$(migration_cmd) $(timeout_cmd) $command"
diff --git a/riscv/run b/riscv/run
index e2f5a922..2bd42ad8 100755
--- a/riscv/run
+++ b/riscv/run
@@ -11,12 +11,12 @@ fi
# Allow user overrides of some config.mak variables
mach=$MACHINE_OVERRIDE
-processor=$PROCESSOR_OVERRIDE
+qemu_cpu=$QEMU_CPU_OVERRIDE
firmware=$FIRMWARE_OVERRIDE
-[ "$PROCESSOR" = "$ARCH" ] && PROCESSOR="max"
: "${mach:=virt}"
-: "${processor:=$PROCESSOR}"
+: "${qemu_cpu:=$TARGET_CPU}"
+: "${qemu_cpu:=$DEFAULT_QEMU_CPU}"
: "${firmware:=$FIRMWARE}"
[ "$firmware" ] && firmware="-bios $firmware"
@@ -32,7 +32,7 @@ fi
mach="-machine $mach"
command="$qemu -nodefaults -nographic -serial mon:stdio"
-command+=" $mach $acc $firmware -cpu $processor "
+command+=" $mach $acc $firmware -cpu $qemu_cpu "
command="$(migration_cmd) $(timeout_cmd) $command"
if [ "$UEFI_SHELL_RUN" = "y" ]; then
diff --git a/configure b/configure
index b4875ef3..63367bbc 100755
--- a/configure
+++ b/configure
@@ -23,6 +23,24 @@ function get_default_processor()
esac
}
+# Return the default CPU type to run on
+function get_default_qemu_cpu()
+{
+ local arch="$1"
+
+ case "$arch" in
+ "arm")
+ echo "cortex-a15"
+ ;;
+ "arm64")
+ echo "cortex-a57"
+ ;;
+ "riscv32" | "riscv64")
+ echo "max"
+ ;;
+ esac
+}
+
srcdir=$(cd "$(dirname "$0")"; pwd)
prefix=/usr/local
cc=gcc
@@ -52,6 +70,7 @@ earlycon=
console=
efi=
efi_direct=
+target_cpu=
# Enable -Werror by default for git repositories only (i.e. developer builds)
if [ -e "$srcdir"/.git ]; then
@@ -70,6 +89,9 @@ usage() {
--arch=ARCH architecture to compile for ($arch). ARCH can be one of:
arm, arm64, i386, ppc64, riscv32, riscv64, s390x, x86_64
--processor=PROCESSOR processor to compile for ($processor)
+ --target-cpu=CPU the CPU model to run on. If left unset, the run script
+ selects the best value based on the host system and the
+ test configuration.
--target=TARGET target platform that the tests will be running on (qemu or
kvmtool, default is qemu) (arm/arm64 only)
--cross-prefix=PREFIX cross compiler prefix
@@ -146,6 +168,9 @@ while [[ $optno -le $argc ]]; do
--processor)
processor="$arg"
;;
+ --target-cpu)
+ target_cpu="$arg"
+ ;;
--target)
target="$arg"
;;
@@ -471,6 +496,8 @@ ARCH=$arch
ARCH_NAME=$arch_name
ARCH_LIBDIR=$arch_libdir
PROCESSOR=$processor
+TARGET_CPU=$target_cpu
+DEFAULT_QEMU_CPU=$(get_default_qemu_cpu $arch)
CC=$cc
CFLAGS=$cflags
LD=$cross_prefix$ld
--
2.49.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [kvm-unit-tests PATCH v4 5/5] arm64: Use -cpu max as the default for TCG
2025-04-08 13:20 [kvm-unit-tests PATCH v4 0/5] arm64: Change the default QEMU CPU type to "max Jean-Philippe Brucker
` (3 preceding siblings ...)
2025-04-08 13:20 ` [kvm-unit-tests PATCH v4 4/5] configure: Add --target-cpu option Jean-Philippe Brucker
@ 2025-04-08 13:20 ` Jean-Philippe Brucker
2025-04-08 15:16 ` [kvm-unit-tests PATCH v4 0/5] arm64: Change the default QEMU CPU type to "max Andrew Jones
5 siblings, 0 replies; 7+ messages in thread
From: Jean-Philippe Brucker @ 2025-04-08 13:20 UTC (permalink / raw)
To: andrew.jones, alexandru.elisei
Cc: eric.auger, kvmarm, kvm, kvm-riscv, vladimir.murzin,
Jean-Philippe Brucker
In order to test all the latest features, default to "max" as the QEMU
CPU type on arm64. Leave the default 32-bit CPU as cortex-a15, because
that allows running the 32-bit tests with both qemu-system-arm, and with
qemu-system-aarch64 whose default "max" CPU doesn't boot in 32-bit mode.
Signed-off-by: Jean-Philippe Brucker <jean-philippe@linaro.org>
---
configure | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/configure b/configure
index 63367bbc..20bf5042 100755
--- a/configure
+++ b/configure
@@ -32,10 +32,7 @@ function get_default_qemu_cpu()
"arm")
echo "cortex-a15"
;;
- "arm64")
- echo "cortex-a57"
- ;;
- "riscv32" | "riscv64")
+ "arm64" | "riscv32" | "riscv64")
echo "max"
;;
esac
--
2.49.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [kvm-unit-tests PATCH v4 0/5] arm64: Change the default QEMU CPU type to "max
2025-04-08 13:20 [kvm-unit-tests PATCH v4 0/5] arm64: Change the default QEMU CPU type to "max Jean-Philippe Brucker
` (4 preceding siblings ...)
2025-04-08 13:20 ` [kvm-unit-tests PATCH v4 5/5] arm64: Use -cpu max as the default for TCG Jean-Philippe Brucker
@ 2025-04-08 15:16 ` Andrew Jones
5 siblings, 0 replies; 7+ messages in thread
From: Andrew Jones @ 2025-04-08 15:16 UTC (permalink / raw)
To: Jean-Philippe Brucker
Cc: alexandru.elisei, eric.auger, kvmarm, kvm, kvm-riscv,
vladimir.murzin
On Tue, Apr 08, 2025 at 02:20:49PM +0100, Jean-Philippe Brucker wrote:
> This is v4 of the series that cleans up the configure flags and sets the
> default CPU type to "max" on arm64, in order to test the latest Arm
> features.
>
> Since v3 [1] I renamed --qemu-cpu to --target-cpu, to prepare for other
> VMMs.
>
> [1] https://lore.kernel.org/all/20250325160031.2390504-3-jean-philippe@linaro.org/
>
>
> Alexandru Elisei (3):
> configure: arm64: Don't display 'aarch64' as the default architecture
> configure: arm/arm64: Display the correct default processor
> arm64: Implement the ./configure --processor option
>
> Jean-Philippe Brucker (2):
> configure: Add --target-cpu option
> arm64: Use -cpu max as the default for TCG
>
> scripts/mkstandalone.sh | 3 ++-
> arm/run | 15 ++++++-----
> riscv/run | 8 +++---
> configure | 55 +++++++++++++++++++++++++++++++++++------
> arm/Makefile.arm | 1 -
> arm/Makefile.common | 1 +
> 6 files changed, 63 insertions(+), 20 deletions(-)
>
> --
> 2.49.0
>
Merged through arm/queue.
Thanks,
drew
^ permalink raw reply [flat|nested] 7+ messages in thread