Re: git: bcd763b642ab - main - Move the arm64 DMAP creation to C

From: Kyle Evans <kevans_at_freebsd.org>
Date: Sat, 09 Apr 2022 05:31:09 UTC
On Wed, Apr 6, 2022 at 8:24 AM Andrew Turner <andrew@freebsd.org> wrote:
>
> The branch main has been updated by andrew:
>
> URL: https://cgit.FreeBSD.org/src/commit/?id=bcd763b642abb4b236902e84184c579225265fb7
>
> commit bcd763b642abb4b236902e84184c579225265fb7
> Author:     Andrew Turner <andrew@FreeBSD.org>
> AuthorDate: 2022-03-15 17:05:48 +0000
> Commit:     Andrew Turner <andrew@FreeBSD.org>
> CommitDate: 2022-04-06 13:09:49 +0000
>
>     Move the arm64 DMAP creation to C
>
>     To simplify the creation of the direct map (DMAP) region on arm64 move
>     it from the pre-C code into pmap. This simplifies the DMAP creation
>     as we can use the notmal index macros, and should reduce the number
>     of pages needed to hold the level 1 tables to just those needed.
>
>     Reviewed by:    alc, dch
>     Tested by:      dch, kevans
>     Sponsored by:   The FreeBSD Foundation
>     Differential Revision: https://reviews.freebsd.org/D34568

Our Ampere boxes were fine with this, but this seems to tickle
something on this M1 mini that I have. Specifically, we end up dying
while probing UEFI stuff, here:

https://cgit.freebsd.org/src/tree/sys/dev/efidev/efirt.c#n183

efi_systbl_phys == 0x9e0979f30, efi_systbl == 0xffffa001e0979f30
Fatal data abort:
...
  sp: ffff000000fb79b0
  lr: ffff000000157ae0 (efirt_modevents + 94)
 elr: ffff000000157ae8 (efirt_modevents + 9c)
spsr:         604000c5
 far: ffffa001e0979f30
 esr:         96000007
panic: vm_fault failed: ffff000000157ae8 error 1
cpuid = 0
time = 1
KDB: stack backtrace:
db_trace_self() at db_trace_self
db_trace_self_wrapper() at db_trace_self_wrapper+0x30
vpanic() at vpanic+0x174
panic() at panic+0x44
data_abort() at data_abort+0x2f0
handle_el1h_sync() at handle_el1h_sync+0x10
--- exception, esr 0x96000007
efirt_modevents() at efirt_modevents+0x9c
module_register_init() at module_register_init+0xc4
mi_startup() at mi_startup+0x284
virtdone() at virtdone+0x7c