From: Alexandru Elisei <alexandru.elisei@arm.com>
To: Nikos Nikoleris <nikos.nikoleris@arm.com>
Cc: kvm@vger.kernel.org, andrew.jones@linux.dev, pbonzini@redhat.com,
jade.alglave@arm.com, ricarkol@google.com
Subject: Re: [kvm-unit-tests PATCH v3 00/27] EFI and ACPI support for arm64
Date: Tue, 19 Jul 2022 16:28:31 +0100 [thread overview]
Message-ID: <YtbNin3VTyIT/yYF@monolith.localdoman> (raw)
In-Reply-To: <20220630100324.3153655-1-nikos.nikoleris@arm.com>
Hi,
I've been trying to test the seris and I've come across some issues.
I've been using the target-efi-upstream-v3-rebased branch.
When compiling, I encounter this error:
gcc -mstrict-align -mno-outline-atomics -std=gnu99 -ffreestanding -O2 -I /path/to/kvm-unit-tests/lib -I /path/to/kvm-unit-tests/lib/libfdt -I lib -g -MMD -MF lib/arm/.timer.d -fno-strict-aliasing -fno-common -Wall -Wwrite-strings -Wempty-body -Wuninitialized -Wignored-qualifiers -Wno-missing-braces -Werror -fomit-frame-pointer -fno-stack-protector -Wno-frame-address -fno-pic -no-pie -Wclobbered -Wunused-but-set-parameter -Wmissing-parameter-type -Wold-style-declaration -Woverride-init -Wmissing-prototypes -Wstrict-prototypes -c -o lib/arm/timer.o lib/arm/timer.c
lib/arm/gic.c: In function ‘gic_init_acpi’:
lib/arm/gic.c:241:21: error: the comparison will always evaluate as ‘true’ for the address of ‘redist_base’ will never be NULL [-Werror=address]
241 | if (!gicv3_data.redist_base)
| ^
In file included from /path/to//kvm-unit-tests/lib/asm/gic-v3.h:1,
from /path/to//kvm-unit-tests/lib/asm/../../arm/asm/gic.h:43,
from /path/to//kvm-unit-tests/lib/asm/gic.h:1,
from lib/arm/gic.c:8:
/path/to//kvm-unit-tests/lib/asm/../../arm/asm/gic-v3.h:82:15: note: ‘redist_base’ declared here
82 | void *redist_base[NR_CPUS];
| ^~~~~~~~~~~
This happens with --enable-efi both set and unset (the above snippet is
from when I didn't specify --enable-efi).
For reference:
$ gcc --version
gcc (GCC) 12.1.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
I managed to fix the compilation error by commenting out the
gicv3_acpi_parse_madt_gicc call:
diff --git a/lib/arm/gic.c b/lib/arm/gic.c
index 69521c3fde4f..66066ca84a96 100644
--- a/lib/arm/gic.c
+++ b/lib/arm/gic.c
@@ -179,6 +179,7 @@ static int gicv2_acpi_parse_madt_dist(struct acpi_subtable_header *header)
return 0;
}
+/*
static int gicv3_acpi_parse_madt_gicc(struct acpi_subtable_header *header)
{
struct acpi_madt_generic_interrupt *gicc = (void *)header;
@@ -195,6 +196,7 @@ static int gicv3_acpi_parse_madt_gicc(struct acpi_subtable_header *header)
return 0;
}
+*/
static int gicv3_acpi_parse_madt_dist(struct acpi_subtable_header *header)
{
@@ -238,9 +240,11 @@ static int gic_init_acpi(void)
gicv3_acpi_parse_madt_dist);
acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR,
gicv3_acpi_parse_madt_redist);
+ /*
if (!gicv3_data.redist_base)
acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR,
gicv3_acpi_parse_madt_gicc);
+ */
acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_TRANSLATOR,
gicv3_acpi_parse_madt_its);
I don't think this is the right fix, but I made the changes to get
kvm-unit-test to build.
The second error I'm encountering is when I try the selftest-setup test:
[..]
ProtectUefiImageCommon - 0x4D046040
- 0x000000004BEC4000 - 0x000000000001F600
SetUefiImageMemoryAttributes - 0x000000004BEC4000 - 0x0000000000001000 (0x0000000000004008)
SetUefiImageMemoryAttributes - 0x000000004BEC5000 - 0x0000000000010000 (0x0000000000020008)
SetUefiImageMemoryAttributes - 0x000000004BED5000 - 0x000000000000F000 (0x0000000000004008)
InstallProtocolInterface: 752F3136-4E16-4FDC-A22A-E5F46812F4CA 4F8014E8
SetUefiImageMemoryAttributes - 0x000000004F640000 - 0x0000000000040000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000004C2D0000 - 0x0000000000040000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000004C280000 - 0x0000000000040000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000004C230000 - 0x0000000000040000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000004C140000 - 0x0000000000040000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000004F600000 - 0x0000000000030000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000004C040000 - 0x0000000000030000 (0x0000000000000008)
SetUefiImageMemoryAttributes - 0x000000004BFC0000 - 0x0000000000030000 (0x0000000000000008)
Load address: 4bec4000
PC: 4beca400 PC offset: 6400
Unhandled exception ec=0x25 (DABT_EL1)
Vector: 4 (el1h_sync)
ESR_EL1: 96000000, ec=0x25 (DABT_EL1)
FAR_EL1: 0000fffffffff0f8 (valid)
Exception frame registers:
pc : [<000000004beca400>] lr : [<000000004beca42c>] pstate: 400002c5
sp : 000000004f7ffe40
x29: 000000004f7ffff0 x28: 0000000000000000
x27: 000000004d046040 x26: 0000000000000000
x25: 0000000000000703 x24: 0000000000000050
x23: 0000000009011000 x22: 0000000000000000
x21: 000000000000001f x20: 0000fffffffff000
x19: 0000000043f92000 x18: 0000000000000000
x17: 00000000ffffa6ab x16: 000000004f513ebc
x15: 0000000000000002 x14: 000000004bed5000
x13: 000000004bee4000 x12: 000000004bed4000
x11: 000000004bec4000 x10: 000000004c03febc
x9 : 000000004bee2938 x8 : 0000000000000000
x7 : 0000000000000000 x6 : 000000004bee2900
x5 : 000000004bee2908 x4 : 0000000048000000
x3 : 0000000048000000 x2 : 000000004bee2928
x1 : 0000000000000003 x0 : ffffffffffffffff
EXIT: STATUS=127
The preceding lines were omitted for brevity, the entire log can be found
at [1] (expires in 6 months).
Command used to launch the test:
$ QEMU=/path/to/qemu/build/qemu-system-aarch64 EFI_UEFI=/path/to/QEMU_EFI.fd taskset -c 4-5 arm/efi/run arm/selftest.efi -smp 2 -m 256 -append "setup smp=2 mem=256"
qemu has been built from source, tag v7.0.0, configured with:
$ ./configure --target-list=aarch64-softmmu --disable-vnc --disable-gtk --disable-bpf
EDK2 image has been built from commit e1eef3a8b01a ("NetworkPkg: Add Wi-Fi
Wpa3 support in WifiConnectManager"):
$ build -a AARCH64 -t GCC5 -p ArmVirtPkg/ArmVirtQemu.dsc -b DEBUG
I tried to disassemble selftest.efi: $ objdump -d selftest.efi, but there
were no debug symbols in the output and it was impossible to figure what is
going on.
[1] https://pastebin.com/0mcap1BU
Thanks,
Alex
On Thu, Jun 30, 2022 at 11:02:57AM +0100, Nikos Nikoleris wrote:
> Hello,
>
> This patch series adds initial support for building arm64 tests as EFI
> tests and running them under QEMU. Much like x86_64 we import external
> dependencies from gnu-efi and adapt them to work with types and other
> assumptions from kvm-unit-tests. In addition, this series adds support
> for enumerating parts of the system using ACPI.
>
> The first set of patches moves the existing ACPI code to the common
> lib path. Then, it extends definitions and functions to allow for more
> robust discovery of ACPI tables. In arm64, we add support for setting
> up the PSCI conduit, discovering the UART, timers and cpus via
> ACPI. The code retains existing behavior and gives priority to
> discovery through DT when one has been provided.
>
> In the second set of patches, we add support for getting the command
> line from the EFI shell. This is a requirement for many of the
> existing arm64 tests.
>
> In the third set of patches, we import code from gnu-efi, make minor
> changes and add an alternative setup sequence from arm64 systems that
> boot through EFI. Finally, we add support in the build system and a
> run script which is used to run an EFI app.
>
> After this set of patches one can build arm64 EFI tests:
>
> $> ./configure --enable-efi
> $> make
>
> And use the run script to run an EFI tests:
>
> $> ./arm/efi/run ./arm/selftest.efi -smp 2 -m 256 -append "setup smp=2 mem=256"
>
> Or all tests:
>
> $> ./run_tests.sh
>
> There are a few items that this series does not address but they would
> be useful to have:
> - Support for booting the system from EL2. Currently, we assume that a
> tests starts running at EL1. This the case when we run with EFI, it's
> not always the case in hardware.
> - Support for reading environment variables and populating __envp.
> - Support for discovering the PCI subsystem using ACPI.
> - Get rid of other assumptions (e.g., vmalloc area) that don't hold on real HW.
>
> git branch: https://github.com/relokin/kvm-unit-tests/pull/new/target-efi-upstream-v3-rebased
>
> v2: https://lore.kernel.org/kvm/20220506205605.359830-1-nikos.nikoleris@arm.com/
>
> Changes in v3:
> - Addressed feedback from Drew, Alex and Ricardo. Many thanks for the reviews!
> - Added support for discovering the GIC through ACPI
> - Added a missing header file (<elf.h>)
> - Added support for correctly parsing the outcome of tests (./run_tests)
>
> Thanks,
>
> Nikos
>
> Alexandru Elisei (1):
> lib: arm: Print test exit status
>
> Andrew Jones (3):
> arm/arm64: mmu_disable: Clean and invalidate before disabling
> arm/arm64: Rename etext to _etext
> arm64: Add a new type of memory type flag MR_F_RESERVED
>
> Nikos Nikoleris (23):
> lib: Fix style for acpi.{c,h}
> x86: Avoid references to fields of ACPI tables
> lib: Ensure all struct definition for ACPI tables are packed
> lib: Add support for the XSDT ACPI table
> lib: Extend the definition of the ACPI table FADT
> devicetree: Check if fdt is NULL before returning that a DT is
> available
> arm/arm64: Add support for setting up the PSCI conduit through ACPI
> arm/arm64: Add support for discovering the UART through ACPI
> arm/arm64: Add support for timer initialization through ACPI
> arm/arm64: Add support for cpu initialization through ACPI
> arm/arm64: Add support for gic initialization through ACPI
> lib/printf: Support for precision modifier in printf
> lib/printf: Add support for printing wide strings
> lib/efi: Add support for getting the cmdline
> lib: Avoid ms_abi for calls related to EFI on arm64
> arm/arm64: Add a setup sequence for systems that boot through EFI
> arm64: Copy code from GNU-EFI
> arm64: Change GNU-EFI imported file to use defined types
> arm64: Use code from the gnu-efi when booting with EFI
> lib: Avoid external dependency in libelf
> x86: Move x86_64-specific EFI CFLAGS to x86_64 Makefile
> arm64: Add support for efi in Makefile
> arm64: Add an efi/run script
>
> scripts/runtime.bash | 14 +-
> arm/efi/run | 61 +++++++
> arm/run | 14 +-
> configure | 15 +-
> Makefile | 4 -
> arm/Makefile.arm | 6 +
> arm/Makefile.arm64 | 18 +-
> arm/Makefile.common | 48 +++--
> x86/Makefile.x86_64 | 4 +
> lib/linux/efi.h | 25 +++
> lib/arm/asm/setup.h | 3 +
> lib/arm/asm/timer.h | 2 +
> lib/acpi.h | 348 ++++++++++++++++++++++++++++--------
> lib/argv.h | 1 +
> lib/elf.h | 57 ++++++
> lib/libcflat.h | 1 +
> lib/acpi.c | 129 ++++++++-----
> lib/argv.c | 2 +-
> lib/arm/gic.c | 127 ++++++++++++-
> lib/arm/io.c | 29 ++-
> lib/arm/mmu.c | 4 +
> lib/arm/psci.c | 25 ++-
> lib/arm/setup.c | 247 ++++++++++++++++++++-----
> lib/arm/timer.c | 79 ++++++++
> lib/devicetree.c | 2 +-
> lib/efi.c | 102 +++++++++++
> lib/printf.c | 194 ++++++++++++++++++--
> arm/efi/elf_aarch64_efi.lds | 63 +++++++
> arm/flat.lds | 2 +-
> arm/cstart.S | 29 ++-
> arm/cstart64.S | 28 ++-
> arm/efi/crt0-efi-aarch64.S | 143 +++++++++++++++
> arm/dummy.c | 4 +
> arm/efi/reloc_aarch64.c | 93 ++++++++++
> arm/micro-bench.c | 4 +-
> arm/timer.c | 10 +-
> x86/s3.c | 19 +-
> x86/vmexit.c | 2 +-
> 38 files changed, 1700 insertions(+), 258 deletions(-)
> create mode 100755 arm/efi/run
> create mode 100644 lib/elf.h
> create mode 100644 lib/arm/timer.c
> create mode 100644 arm/efi/elf_aarch64_efi.lds
> create mode 100644 arm/efi/crt0-efi-aarch64.S
> create mode 100644 arm/dummy.c
> create mode 100644 arm/efi/reloc_aarch64.c
>
> --
> 2.25.1
>
next prev parent reply other threads:[~2022-07-19 15:28 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-06-30 10:02 [kvm-unit-tests PATCH v3 00/27] EFI and ACPI support for arm64 Nikos Nikoleris
2022-06-30 10:02 ` [kvm-unit-tests PATCH v3 01/27] lib: Fix style for acpi.{c,h} Nikos Nikoleris
2022-07-01 9:27 ` Andrew Jones
2022-07-01 9:52 ` Nikos Nikoleris
2022-07-01 10:12 ` Andrew Jones
2022-06-30 10:02 ` [kvm-unit-tests PATCH v3 02/27] x86: Avoid references to fields of ACPI tables Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 03/27] lib: Ensure all struct definition for ACPI tables are packed Nikos Nikoleris
2022-07-01 9:35 ` Andrew Jones
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 04/27] lib: Add support for the XSDT ACPI table Nikos Nikoleris
2022-07-01 9:49 ` Andrew Jones
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 05/27] lib: Extend the definition of the ACPI table FADT Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 06/27] devicetree: Check if fdt is NULL before returning that a DT is available Nikos Nikoleris
2022-07-01 9:55 ` Andrew Jones
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 07/27] arm/arm64: Add support for setting up the PSCI conduit through ACPI Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 08/27] arm/arm64: Add support for discovering the UART " Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 09/27] arm/arm64: Add support for timer initialization " Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 10/27] arm/arm64: Add support for cpu " Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 11/27] arm/arm64: Add support for gic " Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 12/27] lib/printf: Support for precision modifier in printf Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 13/27] lib/printf: Add support for printing wide strings Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 14/27] lib/efi: Add support for getting the cmdline Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 15/27] arm/arm64: mmu_disable: Clean and invalidate before disabling Nikos Nikoleris
2022-06-30 10:20 ` Alexandru Elisei
2022-06-30 11:08 ` Nikos Nikoleris
2022-06-30 11:24 ` Alexandru Elisei
2022-06-30 15:16 ` Nikos Nikoleris
2022-06-30 15:57 ` Alexandru Elisei
2022-07-01 9:12 ` Andrew Jones
2022-07-01 10:24 ` Alexandru Elisei
2022-07-01 11:16 ` Andrew Jones
2022-07-11 14:23 ` Alexandru Elisei
2022-07-01 11:34 ` Nikos Nikoleris
2022-07-01 14:39 ` Alexandru Elisei
2022-07-01 10:36 ` Andrew Jones
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 16/27] arm/arm64: Rename etext to _etext Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 17/27] lib: Avoid ms_abi for calls related to EFI on arm64 Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 18/27] arm64: Add a new type of memory type flag MR_F_RESERVED Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 19/27] arm/arm64: Add a setup sequence for systems that boot through EFI Nikos Nikoleris
2022-06-30 10:54 ` Alexandru Elisei
2022-07-19 14:08 ` Alexandru Elisei
2022-08-12 14:34 ` Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 20/27] arm64: Copy code from GNU-EFI Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 21/27] arm64: Change GNU-EFI imported file to use defined types Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 22/27] arm64: Use code from the gnu-efi when booting with EFI Nikos Nikoleris
2022-07-01 0:43 ` Ricardo Koller
2022-07-04 9:18 ` Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 23/27] lib: Avoid external dependency in libelf Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 24/27] x86: Move x86_64-specific EFI CFLAGS to x86_64 Makefile Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 25/27] arm64: Add support for efi in Makefile Nikos Nikoleris
2022-07-12 13:39 ` Alexandru Elisei
2022-07-12 20:50 ` Nikos Nikoleris
2022-07-13 8:46 ` Alexandru Elisei
2022-07-13 9:17 ` Nikos Nikoleris
2022-07-15 13:59 ` Nikos Nikoleris
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 26/27] lib: arm: Print test exit status Nikos Nikoleris
2022-07-01 10:48 ` Andrew Jones
2022-06-30 10:03 ` [kvm-unit-tests PATCH v3 27/27] arm64: Add an efi/run script Nikos Nikoleris
2022-07-19 15:28 ` Alexandru Elisei [this message]
2022-07-22 10:57 ` [kvm-unit-tests PATCH v3 00/27] EFI and ACPI support for arm64 Nikos Nikoleris
2022-07-22 14:41 ` Alexandru Elisei
2022-08-01 18:23 ` Nikos Nikoleris
2022-08-02 10:19 ` Alexandru Elisei
2022-08-02 10:46 ` Andrew Jones
2022-08-03 12:51 ` Nikos Nikoleris
2022-08-09 11:16 ` Alexandru Elisei
2022-08-09 15:29 ` Sean Christopherson
2022-08-10 9:17 ` Alexandru Elisei
2022-08-10 14:58 ` Sean Christopherson
2022-08-10 15:04 ` Alexandru Elisei
2022-08-09 16:09 ` Nikos Nikoleris
2022-08-12 14:55 ` Alexandru Elisei
2022-08-12 15:49 ` Nikos Nikoleris
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=YtbNin3VTyIT/yYF@monolith.localdoman \
--to=alexandru.elisei@arm.com \
--cc=andrew.jones@linux.dev \
--cc=jade.alglave@arm.com \
--cc=kvm@vger.kernel.org \
--cc=nikos.nikoleris@arm.com \
--cc=pbonzini@redhat.com \
--cc=ricarkol@google.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;
as well as URLs for NNTP newsgroup(s).