> From: Claudio Miranda <quadsi...@gmail.com>
> Date: Wed, 19 Oct 2022 12:07:50 -0400
> 
> Greetings,
> 
> I'm getting a kernel panic on a Dell Precision T1600 with BIOS A21
> which is the latest revision from Dell for this system. This all
> started as of the #793 snapshot of -current on Monday, October 17 at
> 10:16:43 MDT. I've attached pictures of the kernel panic on boot as
> well as the panic info, trace info, and dmesg info. Prior to this
> snapshot, the system was booting OpenBSD without issue. Unfortunately,
> I'm only able to provide pictures of the information needed. Any help
> is greatly appreciated.
> 
> Thanks,
> 
> Claudio

Wow:

  efi0 at bios0: UEFI 2.0

that is ancient.  I also found

  https://docs.oracle.com/cd/E26502_01/html/E28978/hardw.html

so clearly the UEFI BIOS has bugs.  Using UEFI instead of the legacy
BIOS on a machine that old may not be the wisest choice.  But I think
we can just avoid using UEFI in the kernel in this case.

Diff below should fix it.

ok?


Index: arch/amd64/amd64/efi_machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/efi_machdep.c,v
retrieving revision 1.1
diff -u -p -r1.1 efi_machdep.c
--- arch/amd64/amd64/efi_machdep.c      16 Oct 2022 15:03:39 -0000      1.1
+++ arch/amd64/amd64/efi_machdep.c      19 Oct 2022 17:18:19 -0000
@@ -112,6 +112,10 @@ efi_attach(struct device *parent, struct
                printf(".%d", minor % 10);
        printf("\n");
 
+       /* Early implementations can be buggy. */
+       if (major < 2 || (major == 2 && minor < 10))
+               return;
+
        if ((bios_efiinfo->flags & BEI_64BIT) == 0)
                return;
 
Index: arch/arm64/dev/efi_machdep.c
===================================================================
RCS file: /cvs/src/sys/arch/arm64/dev/efi_machdep.c,v
retrieving revision 1.2
diff -u -p -r1.2 efi_machdep.c
--- arch/arm64/dev/efi_machdep.c        12 Oct 2022 13:39:50 -0000      1.2
+++ arch/arm64/dev/efi_machdep.c        19 Oct 2022 17:18:19 -0000
@@ -118,6 +118,10 @@ efi_attach(struct device *parent, struct
                printf(".%d", minor % 10);
        printf("\n");
 
+       /* Early implementations can be buggy. */
+       if (major < 2 || (major == 2 && minor < 10))
+               return;
+
        efi_map_runtime(sc);
 
        /*

Reply via email to