From: Andrew Jones <andrew.jones@linux.dev>
To: kvm@vger.kernel.org, kvmarm@lists.linux.dev
Cc: alexandru.elisei@arm.com, eric.auger@redhat.com,
nikos.nikoleris@arm.com, shahuang@redhat.com,
pbonzini@redhat.com, thuth@redhat.com
Subject: [kvm-unit-tests PATCH 10/14] arm64: efi: Allow running tests directly
Date: Fri, 23 Feb 2024 16:51:36 +0100 [thread overview]
Message-ID: <20240223155125.368512-26-andrew.jones@linux.dev> (raw)
In-Reply-To: <20240223155125.368512-16-andrew.jones@linux.dev>
Since it's possible to run tests with UEFI and the QEMU -kernel
option (and now the DTB will be found and even the environ will
be set up from an initrd if given with the -initrd option), then
we can skip the loading of EFI tests into a file system and booting
to the shell to run them. Just run them directly. Running directly
is waaaaaay faster than booting the shell first. We keep the UEFI
shell as the default behavior, though, and provide a new configure
option to enable the direct running.
Signed-off-by: Andrew Jones <andrew.jones@linux.dev>
---
arm/efi/run | 17 +++++++++++++++--
arm/run | 4 +++-
configure | 17 +++++++++++++++++
3 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/arm/efi/run b/arm/efi/run
index b7a8418a07f8..af7b593c2bb8 100755
--- a/arm/efi/run
+++ b/arm/efi/run
@@ -18,10 +18,12 @@ elif [ -f /usr/share/edk2/aarch64/QEMU_EFI.silent.fd ]; then
DEFAULT_UEFI=/usr/share/edk2/aarch64/QEMU_EFI.silent.fd
fi
+KERNEL_NAME=$1
+
: "${EFI_SRC:=$TEST_DIR}"
: "${EFI_UEFI:=$DEFAULT_UEFI}"
: "${EFI_TEST:=efi-tests}"
-: "${EFI_CASE:=$(basename $1 .efi)}"
+: "${EFI_CASE:=$(basename $KERNEL_NAME .efi)}"
: "${EFI_TESTNAME:=$TESTNAME}"
: "${EFI_TESTNAME:=$EFI_CASE}"
: "${EFI_CASE_DIR:="$EFI_TEST/$EFI_TESTNAME"}"
@@ -80,4 +82,15 @@ uefi_shell_run()
"${qemu_args[@]}"
}
-uefi_shell_run
+if [ "$EFI_DIRECT" = "y" ]; then
+ if [ "$EFI_USE_ACPI" != "y" ]; then
+ qemu_args+=(-machine acpi=off)
+ fi
+ $TEST_DIR/run \
+ $KERNEL_NAME \
+ -append "$(basename $KERNEL_NAME) ${cmd_args[@]}" \
+ -bios "$EFI_UEFI" \
+ "${qemu_args[@]}"
+else
+ uefi_shell_run
+fi
diff --git a/arm/run b/arm/run
index 40c2ca66ba7e..efdd44ce86a7 100755
--- a/arm/run
+++ b/arm/run
@@ -60,7 +60,7 @@ if ! $qemu $M -chardev '?' | grep -q testdev; then
exit 2
fi
-if [ "$UEFI_SHELL_RUN" != "y" ]; then
+if [ "$UEFI_SHELL_RUN" != "y" ] && [ "$EFI_USE_ACPI" != "y" ]; then
chr_testdev='-device virtio-serial-device'
chr_testdev+=' -device virtconsole,chardev=ctd -chardev testdev,id=ctd'
fi
@@ -77,6 +77,8 @@ command="$(migration_cmd) $(timeout_cmd) $command"
if [ "$UEFI_SHELL_RUN" = "y" ]; then
ENVIRON_DEFAULT=n run_qemu_status $command "$@"
+elif [ "$EFI_USE_ACPI" = "y" ]; then
+ run_qemu_status $command -kernel "$@"
else
run_qemu $command -kernel "$@"
fi
diff --git a/configure b/configure
index 05e6702eab06..bf263b22b558 100755
--- a/configure
+++ b/configure
@@ -32,6 +32,7 @@ enable_dump=no
page_size=
earlycon=
efi=
+efi_direct=
# Enable -Werror by default for git repositories only (i.e. developer builds)
if [ -e "$srcdir"/.git ]; then
@@ -89,6 +90,11 @@ usage() {
--[enable|disable]-efi Boot and run from UEFI (disabled by default, x86_64 and arm64 only)
--[enable|disable]-werror
Select whether to compile with the -Werror compiler flag
+ --[enable|disable]-efi-direct
+ Select whether to run EFI tests directly with QEMU's -kernel
+ option. When not enabled, tests will be placed in an EFI file
+ system and run from the UEFI shell. Igorned when efi isn't enabled.
+ (arm64 only)
EOF
exit 1
}
@@ -168,6 +174,12 @@ while [[ "$1" = -* ]]; do
--disable-efi)
efi=n
;;
+ --enable-efi-direct)
+ efi_direct=y
+ ;;
+ --disable-efi-direct)
+ efi_direct=n
+ ;;
--enable-werror)
werror=-Werror
;;
@@ -185,6 +197,10 @@ while [[ "$1" = -* ]]; do
esac
done
+if [ -z "$efi" ] || [ "$efi" = "n" ]; then
+ [ "$efi_direct" = "y" ] && efi_direct=
+fi
+
if [ -n "$host_key_document" ] && [ ! -f "$host_key_document" ]; then
echo "Host key document doesn't exist at the specified location."
exit 1
@@ -423,6 +439,7 @@ GENPROTIMG=${GENPROTIMG-genprotimg}
HOST_KEY_DOCUMENT=$host_key_document
CONFIG_DUMP=$enable_dump
CONFIG_EFI=$efi
+EFI_DIRECT=$efi_direct
CONFIG_WERROR=$werror
GEN_SE_HEADER=$gen_se_header
EOF
--
2.43.0
next prev parent reply other threads:[~2024-02-23 15:52 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-23 15:51 [kvm-unit-tests PATCH 00/14] arm64: EFI improvements Andrew Jones
2024-02-23 15:51 ` [kvm-unit-tests PATCH 01/14] runtime: Update MAX_SMP probe Andrew Jones
2024-02-23 15:51 ` [kvm-unit-tests PATCH 02/14] runtime: Add yet another 'no kernel' error message Andrew Jones
2024-02-23 15:51 ` [kvm-unit-tests PATCH 03/14] arm64: efi: Don't create dummy test Andrew Jones
2024-02-23 15:51 ` [kvm-unit-tests PATCH 04/14] arm64: efi: Make running tests on EFI can be parallel Andrew Jones
2024-02-23 15:51 ` [kvm-unit-tests PATCH 05/14] arm64: efi: Remove redundant dtb generation Andrew Jones
2024-02-23 15:51 ` [kvm-unit-tests PATCH 06/14] arm64: efi: Move run code into a function Andrew Jones
2024-02-23 15:51 ` [kvm-unit-tests PATCH 07/14] arm64: efi: Remove EFI_USE_DTB Andrew Jones
2024-02-23 15:51 ` [kvm-unit-tests PATCH 08/14] arm64: efi: Improve device tree discovery Andrew Jones
2024-02-23 15:51 ` [kvm-unit-tests PATCH 09/14] lib/efi: Add support for loading the initrd Andrew Jones
2024-02-23 15:51 ` Andrew Jones [this message]
2024-02-23 15:51 ` [kvm-unit-tests PATCH 11/14] arm/arm64: Factor out some initial setup Andrew Jones
2024-02-23 15:51 ` [kvm-unit-tests PATCH 12/14] arm/arm64: Factor out allocator init from mem_init Andrew Jones
2024-02-23 15:51 ` [kvm-unit-tests PATCH 13/14] arm64: Simplify efi_mem_init Andrew Jones
2024-02-23 15:51 ` [kvm-unit-tests PATCH 14/14] arm64: Add memregions_efi_init Andrew Jones
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=20240223155125.368512-26-andrew.jones@linux.dev \
--to=andrew.jones@linux.dev \
--cc=alexandru.elisei@arm.com \
--cc=eric.auger@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.linux.dev \
--cc=nikos.nikoleris@arm.com \
--cc=pbonzini@redhat.com \
--cc=shahuang@redhat.com \
--cc=thuth@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox