kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alexandru Elisei <alexandru.elisei@arm.com>
To: Andrew Jones <andrew.jones@linux.dev>
Cc: Nikos Nikoleris <nikos.nikoleris@arm.com>,
	kvm@vger.kernel.org, kvmarm@lists.linux.dev, pbonzini@redhat.com,
	ricarkol@google.com
Subject: Re: [PATCH v4 30/30] arm64: Add an efi/run script
Date: Tue, 28 Mar 2023 10:03:14 +0100	[thread overview]
Message-ID: <ZCKtUvJbSTLcerCc@monolith.localdoman> (raw)
In-Reply-To: <20230323175256.bjd4p7apnuyzynpg@orel>

Hi,

Just a thought, but if the page allocator is giving you trouble, you could
try using the physical allocator instead, like I tried to do in my cache
maintenance series [1] (requires this patch [2] to change how the idmap is
allocated, to use pgd_alloc() instead of page_alloc()).

That patch also moves the point where the MMU is enabled to earlier in the
boot process, which might be too invasive for this series. In theory, it
shouldn't cause any problems, but that's just in theory.

[1] https://gitlab.arm.com/linux-arm/kvm-unit-tests-ae/-/commit/3385347b8157d72ea1f2b83afe0026305d89a9ea
[2] https://gitlab.arm.com/linux-arm/kvm-unit-tests-ae/-/commit/6faa52530b6a1c150dca4bb7e7caae6c70b162ee

Thanks,
Alex

On Thu, Mar 23, 2023 at 06:52:56PM +0100, Andrew Jones wrote:
> On Wed, Mar 22, 2023 at 07:09:23PM +0000, Nikos Nikoleris wrote:
> > On 22/03/2023 12:32, Andrew Jones wrote:
> > > On Wed, Mar 22, 2023 at 11:57:17AM +0000, Nikos Nikoleris wrote:
> > > > On 22/03/2023 11:24, Andrew Jones wrote:
> > > > > On Wed, Mar 22, 2023 at 10:02:35AM +0000, Nikos Nikoleris wrote:
> > > > > > Hi Drew,
> > > > > > 
> > > > > > On 21/03/2023 18:41, Andrew Jones wrote:
> > > > > > > On Mon, Feb 13, 2023 at 10:17:59AM +0000, Nikos Nikoleris wrote:
> > > > > > > > This change adds a efi/run script inspired by the one in x86. This
> > > > > > > > script will setup a folder with the test compiled as an EFI app and a
> > > > > > > > startup.nsh script. The script launches QEMU providing an image with
> > > > > > > > EDKII and the path to the folder with the test which is executed
> > > > > > > > automatically.
> > > > > > > > 
> > > > > > > > For example:
> > > > > > > > 
> > > > > > > > $> ./arm/efi/run ./arm/selftest.efi setup smp=2 mem=256
> > > > > > > 
> > > > > > > This should be
> > > > > > > 
> > > > > > > ./arm/efi/run ./arm/selftest.efi -append "setup smp=2 mem=256" -smp 2 -m 256
> > > > > > > 
> > > > > > 
> > > > > > Indeed, I will update the commit message.
> > > > > > 
> > > > > > > but I can't get any tests to run through ./arm/efi/run. All of them
> > > > > > > immediately die with a DABT_EL1. I can get the tests to run (and pass) by
> > > > > > > manually booting into UEFI with the FAT partition pointing at the parent
> > > > > > > directory
> > > > > > > 
> > > > > > 
> > > > > > I suppose the DABT_EL1 is happening after the test has started and not while
> > > > > > the UEFI interactive shell starts?
> > > > > 
> > > > > The countdown completes and the startup script runs (I can add an echo to
> > > > > check it). So it must be the test that fails.
> > > > > 
> > > > > > 
> > > > > > >     $QEMU -nodefaults -machine virt -accel tcg -cpu cortex-a57 \
> > > > > > >           -device pci-testdev -display none -serial stdio \
> > > > > > >           -bios /usr/share/edk2/aarch64/QEMU_EFI.silent.fd \
> > > > > > >           -drive file.dir=efi-tests/,file.driver=vvfat,file.rw=on,format=raw,if=virtio
> > > > > > > 
> > > > > > 
> > > > > > Do you hit the DABT_EL1 if you let it automatically start using the
> > > > > > startup.nsh prepared by the ./arm/efi/run script? Meaning change the above
> > > > > > command if you provided -drive file.dir=efi-tests/timer instead:
> > > > > > 
> > > > > >    $QEMU -nodefaults -machine virt -accel tcg -cpu cortex-a57 \
> > > > > >          -device pci-testdev -display none -serial stdio \
> > > > > >          -bios /usr/share/edk2/aarch64/QEMU_EFI.silent.fd \
> > > > > >          -drive file.dir=efi
> > > > > > tests/timer,file.driver=vvfat,file.rw=on,format=raw,if=virtio
> > > > > 
> > > > > Yes, this is what ./arm/efi/run does, and it doesn't help to use the
> > > > > command line directly.
> > > > > 
> > > > > > 
> > > > > > Thanks for reviewing this!
> > > > > > 
> > > > > > Nikos
> > > > > > 
> > > > > > > and then, for example for the timer test, doing
> > > > > > > 
> > > > > > >     fs0:
> > > > > > >     cd timer
> > > > > > >     timer.efi
> > > > > 
> > > > > This actually doesn't work. I was actually doing
> > > > > 
> > > > >    fs0:
> > > > >    cd timer
> > > > >    ls
> > > > >    timer.efi
> > > > > 
> > > > > and, believe it or not, without the 'ls' I get the dabt, with the 'ls' the
> > > > > test runs and passes. Adding an 'ls' to the startup script doesn't help
> > > > > the automatic execution though.
> > > > > 
> > > > > Which versions of QEMU and edk2 are you using? And what file system do you
> > > > > have the efi-tests directory on?
> > > > > 
> > > > 
> > > > I am using the QEMU_EFI.fd image that comes with Ubuntu 20.04.6
> > > > (0~20191122.bd85bf54-2ubuntu3.4)
> > > > https://packages.ubuntu.com/focal-updates/qemu-efi-aarch64
> > > > 
> > > > and I've tried two different versions of QEMU
> > > > 
> > > > $> qemu-system-aarch64 --version
> > > > 
> > > > QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.24)
> > > > Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers
> > > > 
> > > > $> ../qemu/build/qemu-system-aarch64 --version
> > > > QEMU emulator version 7.0.0 (v7.0.0-dirty)
> > > > Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers
> > > > 
> > > > efi-tests is on ext4
> > > > 
> > > > I am happy to have a closer look if you help me reproduce your environment.
> > > 
> > > I'm on Fedora 36 and the file system used for this is XFS. My QEMU version
> > > was something pretty recent, but I didn't remember what, so I just updated
> > > to latest master (which happens to be the same as v8.0.0-rc1 right now).
> > > My edk2 is the one packaged with F36,
> > > edk2-aarch64-20221117gitfff6d81270b5-14.fc36.noarch
> > > 
> > > The QEMU update to v8.0.0-rc1 didn't change anything for me (still same
> > > failure and still same "fix" of running the test manually after doing
> > > a manual 'ls').
> > > 
> > 
> > Thanks Drew!
> > 
> > I managed to hit the DABT_EL1 when I switched to the F36 edk2. The problem
> > seems to be with the initialization of the page allocation mechanism.
> > mmu_idmap is allocated at 0x80000000 and phys_alloc_show() prints
> > 
> > phys_alloc minimum alignment: 0x40
> > 0000000048000000-000000007c590fff [USED]
> > 000000007c591000-000000007c590fff [FREE]
> > 
> > Am I wrong to expect that the address that page_alloc() returns for
> > mmu_idmap should be within the [USED] range?
> 
> You're not wrong. That's what I would expect as well from the sequence
> of allocator initializations and allocations, and that's indeed how it
> works for the non-uefi case.
> 
> > 
> > I'll have a closer look into this but I just wanted to check as I am not
> > sure I fully understand the code/logic of lib/alloc_page.{c,h}
> 
> I'll also try to find time to take a look. TBH, I never completely grokked
> the new allocator either. If it gets in our way, then we could add a
> simpler allocator implementation (just a linked list like it was before)
> as an alternative and then use that instead.
> 
> Thanks,
> drew
> 

      reply	other threads:[~2023-03-28  9:03 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-13 10:17 [PATCH v4 00/30] EFI and ACPI support for arm64 Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 01/30] lib: Move acpi header and implementation to lib Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 02/30] x86: Move x86_64-specific EFI CFLAGS to x86_64 Makefile Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 03/30] arm/Makefile.common: Compile lib/acpi.c if CONFIG_EFI=y Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 04/30] lib: Apply Lindent to acpi.{c,h} Nikos Nikoleris
2023-03-09  7:11   ` Shaoqin Huang
2023-03-21 17:32     ` Andrew Jones
2023-03-22 10:05       ` Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 05/30] lib: Fix style for acpi.{c,h} Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 06/30] lib/acpi: Convert table names to Linux style Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 07/30] x86: Avoid references to fields of ACPI tables Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 08/30] lib/acpi: Ensure all struct definition for ACPI tables are packed Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 09/30] lib/acpi: Add support for the XSDT table Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 10/30] lib/acpi: Extend the definition of the FADT table Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 11/30] devicetree: Check that fdt is not NULL in dt_available() Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 12/30] arm64: Add support for setting up the PSCI conduit through ACPI Nikos Nikoleris
2023-03-21 17:31   ` Andrew Jones
2023-02-13 10:17 ` [PATCH v4 13/30] arm64: Add support for discovering the UART " Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 14/30] arm64: Add support for timer initialization " Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 15/30] arm64: Add support for cpu " Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 16/30] arm64: Add support for gic " Nikos Nikoleris
2023-03-30  6:46   ` Shaoqin Huang
2023-02-13 10:17 ` [PATCH v4 17/30] lib/printf: Support for precision modifier in printf Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 18/30] lib/printf: Add support for printing wide strings Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 19/30] lib/efi: Add support for getting the cmdline Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 20/30] arm/arm64: Rename etext to _etext Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 21/30] lib: Avoid ms_abi for calls related to EFI on arm64 Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 22/30] arm64: Add a new type of memory type flag MR_F_RESERVED Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 23/30] arm64: Add a setup sequence for systems that boot through EFI Nikos Nikoleris
2023-04-25  7:04   ` Shaoqin Huang
2023-04-25  9:09     ` Nikos Nikoleris
2023-04-25 18:31       ` Andrew Jones
2023-02-13 10:17 ` [PATCH v4 24/30] arm64: Copy code from GNU-EFI Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 25/30] arm64: Change GNU-EFI imported code to use defined types Nikos Nikoleris
2023-03-30  6:49   ` Shaoqin Huang
2023-02-13 10:17 ` [PATCH v4 26/30] arm64: Use code from the gnu-efi when booting with EFI Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 27/30] lib: Avoid external dependency in libelf Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 28/30] arm64: Add support for efi in Makefile Nikos Nikoleris
2023-03-21 18:21   ` Andrew Jones
2023-02-13 10:17 ` [PATCH v4 29/30] lib: arm: Print test exit status Nikos Nikoleris
2023-02-13 10:17 ` [PATCH v4 30/30] arm64: Add an efi/run script Nikos Nikoleris
2023-03-21 18:41   ` Andrew Jones
2023-03-22 10:02     ` Nikos Nikoleris
2023-03-22 11:24       ` Andrew Jones
2023-03-22 11:57         ` Nikos Nikoleris
2023-03-22 12:32           ` Andrew Jones
2023-03-22 19:09             ` Nikos Nikoleris
2023-03-23 17:52               ` Andrew Jones
2023-03-28  9:03                 ` Alexandru Elisei [this message]

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=ZCKtUvJbSTLcerCc@monolith.localdoman \
    --to=alexandru.elisei@arm.com \
    --cc=andrew.jones@linux.dev \
    --cc=kvm@vger.kernel.org \
    --cc=kvmarm@lists.linux.dev \
    --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).