Bug 217485

Summary: kernel >= v6.2 no longer boots on Apple's Virtualization.framework (x86_64); mix of ACPICA regression and EFISTUB regression
Product: EFI Reporter: Akihiro Suda (suda.kyoto)
Component: BootAssignee: acpi_acpica-core (acpi_acpica-core)
Status: RESOLVED CODE_FIX    
Severity: blocking CC: bagasdotme, chenhuacai, r.smith, rjw, suda.kyoto
Priority: P3    
Hardware: Intel   
OS: Linux   
URL: https://github.com/lima-vm/lima/issues/1577
Kernel Version: v6.2 Subsystem:
Regression: Yes Bisected commit-id: 5c62d5aab8752e5ee7bfbe75ed6060db1c787f98 (ACPICA) AND e346bebbd36b1576a3335331fed61bb48c6d8823 (EFISTUB)
Attachments: initrd-example.txt
dmesg-v6.1.txt

Description Akihiro Suda 2023-05-25 11:19:41 UTC
Created attachment 304320 [details]
initrd-example.txt

Linux kernel >= v6.2 no longer boots on Apple's Virtualization.framework (x86_64).

It is reported that the issue is not reproducible on ARM64: https://github.com/lima-vm/lima/issues/1577#issuecomment-1561577694


## Reproduction
- Checkout the kernel repo, and run `make defconfig bzImage`.

- Create an initrd (see the attached `initrd-example.txt`)

- Transfer the bzImage and initrd to an Intel Mac.

- On Mac, download `RunningLinuxInAVirtualMachine.zip` from https://developer.apple.com/documentation/virtualization/running_linux_in_a_virtual_machine , and build the `LinuxVirtualMachine` binary with Xcode.
  Building this binary with Xcode requires logging in to Apple.
  If you do not like logging in, a third party equivalent such as https://github.com/Code-Hex/vz/blob/v3.0.6/example/linux/main.go can be used.

- Run `LinuxVirtualMachine /tmp/bzImage /tmp/initrd.img`.
  v6.1 successfully boots into the busybox shell.
  v6.2 just hangs before printing something in the console.


## Tested versions
```
v6.1: OK
...
v6.1.0-rc2-00002-g60f2096b59bc (included in v6.2-rc1): OK
v6.1.0-rc2-00003-g5c62d5aab875 (included in v6.2-rc1): NG <-- This commit caused a regression
...
v6.2-rc1: NG
...
v6.2: NG
...
v6.3.0-rc7-00181-g8e41e0a57566 (included in v6.3): NG     <-- Reverts 5c62d5aab875 but still NG
...
v6.3: NG
v6.4-rc3: NG
```

Tested on MacBookPro 2020 (Intel(R) Core(TM) i7-1068NG7 CPU @ 2.30GHz) running macOS 13.4.


The issue seems a regression in [5c62d5aab8752e5ee7bfbe75ed6060db1c787f98](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5c62d5aab8752e5ee7bfbe75ed6060db1c787f98) "ACPICA: Events: Support fixed PCIe wake event".

This commit was introduced in v6.2-rc1, and apparently reverted in v6.3 ([8e41e0a575664d26bb87e012c39435c4c3914ed9](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8e41e0a575664d26bb87e012c39435c4c3914ed9)).
However, v6.3 and the latest v6.4-rc3 still don't boot.
Comment 1 Bagas Sanjaya 2023-05-25 12:15:14 UTC
(In reply to Akihiro Suda from comment #0)
> ## Reproduction
> - Checkout the kernel repo, and run `make defconfig bzImage`.
> 

But where is your kernel .config? What distro are you running?
What is your hardware setup?

> - Create an initrd (see the attached `initrd-example.txt`)
> 

You generate initrd by installing busybox on it?

> - Transfer the bzImage and initrd to an Intel Mac.
> 
> - On Mac, download `RunningLinuxInAVirtualMachine.zip` from
> https://developer.apple.com/documentation/virtualization/
> running_linux_in_a_virtual_machine , and build the `LinuxVirtualMachine`
> binary with Xcode.
>   Building this binary with Xcode requires logging in to Apple.
>   If you do not like logging in, a third party equivalent such as
> https://github.com/Code-Hex/vz/blob/v3.0.6/example/linux/main.go can be used.
> 
> - Run `LinuxVirtualMachine /tmp/bzImage /tmp/initrd.img`.
>   v6.1 successfully boots into the busybox shell.
>   v6.2 just hangs before printing something in the console.
> 

What hypervisor? KVM/qemu? Or Virtualbox/vmware?
Comment 2 Akihiro Suda 2023-05-25 12:22:15 UTC
(In reply to Bagas Sanjaya from comment #1)

> But where is your kernel .config? 

defconfig.

> What distro are you running?

Just bare vmlinuz with busybox-only initrd.

> What is your hardware setup?

Apple's Virtualization.framework on macOS 13.4 on MacBookPro 2020 (Intel(R) Core(TM) i7-1068NG7 CPU @ 2.30GHz)

> You generate initrd by installing busybox on it?

Yes.
But the initrd doesn't really matter here, as the kernel hangs before running init.

> What hypervisor? KVM/qemu? Or Virtualbox/vmware?

Apple's Virtualization.framework.
Comment 3 Bagas Sanjaya 2023-05-25 12:33:06 UTC
Can you provide dmesg?
Comment 4 Akihiro Suda 2023-05-25 12:40:43 UTC
(In reply to Bagas Sanjaya from comment #3)
> Can you provide dmesg?

Unfortunately no, as it just hangs before printing something in the console
Comment 5 Akihiro Suda 2023-05-25 13:02:03 UTC
Created attachment 304323 [details]
dmesg-v6.1.txt

dmesg output from v6.1. This version works fine.
I'm unable to get the dmesg output from v6.2, as it just hangs before printing something.
Comment 6 Akihiro Suda 2023-05-27 17:45:31 UTC
Turned out that this is a mixture of an ACPICA issue and an EFISTUB issue.

Kernel v6.2 can boot by reverting the *both* of the following two commits:
- 5c62d5aab8752e5ee7bfbe75ed6060db1c787f98 "ACPICA: Events: Support fixed PCIe wake event"
- e346bebbd36b1576a3335331fed61bb48c6d8823 "efi: libstub: Always enable initrd command line loader and bump version"

Kernel v6.3 can boot by just reverting e346bebb, as 5c62d5a has been already reverted in 8e41e0a575664d26bb87e012c39435c4c3914ed9.
The situation is same for v6.4-rc3 too.

Note that in my test I let Virtualization.framework directly load bzImage without GRUB (akin to `qemu-system-x86_64 -kernel bzImage`).
Apparently, reverting e346bebb is not necessary for loading bzImage via GRUB.
( So, Lima can just boot unmodified v6.3 and v6.4-rc3: https://github.com/lima-vm/lima/issues/1577#issuecomment-1562649337 )
Comment 8 Akihiro Suda 2023-06-02 19:56:05 UTC
Fixed in 36e4fc57fc1619f462e669e939209c45763bc8f5