From: Alexander Graf <graf@amazon.com>
To: <qemu-devel@nongnu.org>
Cc: qemu-block@nongnu.org, qemu-arm@nongnu.org,
"Cameron Esfahani" <dirty@apple.com>,
"Stefan Hajnoczi" <stefanha@redhat.com>,
"Michael S . Tsirkin" <mst@redhat.com>,
"Kevin Wolf" <kwolf@redhat.com>,
"Hanna Reitz" <hreitz@redhat.com>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Paolo Bonzini" <pbonzini@redhat.com>,
"Peter Maydell" <peter.maydell@linaro.org>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Mads Ynddal" <mads@ynddal.dk>,
"Daniel P . Berrangé" <berrange@redhat.com>,
"Bernhard Beschow" <shentey@gmail.com>,
"Gerd Hoffmann" <kraxel@redhat.com>
Subject: [PATCH v2 00/12] Introduce new vmapple machine type
Date: Wed, 30 Aug 2023 16:14:13 +0000 [thread overview]
Message-ID: <20230830161425.91946-1-graf@amazon.com> (raw)
This patch set introduces a new ARM and HVF specific machine type
called "vmapple". It mimicks the device model that Apple's proprietary
Virtualization.Framework exposes, but implements it in QEMU.
With this new machine type, you can run macOS guests on Apple Silicon
systems via HVF. To do so, you need to first install macOS using
Virtualization.Framework onto a virtual disk image using a tool like
macosvm (https://github.com/s-u/macosvm)
$ macosvm --disk disk.img,size=32g --aux aux.img \
--restore UniversalMac_12.0.1_21A559_Restore.ipsw vm.json
Then, extract the ECID from the installed VM:
$ cat "$DIR/macosvm.json" | python3 -c \
'import json,sys;obj=json.load(sys.stdin);print(obj["machineId"]) | \
base64 -d | plutil -extract ECID raw -
In addition, cut off the first 16kb of the aux.img:
$ dd if=aux.img of=aux.img.trimmed bs=$(( 0x4000 )) skip=1
Now, you can just launch QEMU with the bits generated above:
$ qemu-system-aarch64 -serial mon:stdio \
-m 4G \
-M vmapple,uuid=6240349656165161789 \
-bios /Sys*/Lib*/Fra*/Virtualization.f*/R*/AVPBooter.vmapple2.bin \
-pflash aux.img.trimmed \
-pflash disk.img \
-drive file=disk.img,if=none,id=root \
-device vmapple-virtio-root,drive=root \
-drive file=aux.img.trimmed,if=none,id=aux \
-device vmapple-virtio-aix,drive=aux \
-accel hvf
There are a few limitations with this implementation:
- Only runs on macOS because it relies on
ParavirtualizesGraphics.Framework
- Something is not fully correct on interrupt delivery or
similar - the keyboard does not work
- No Rosetta in the guest because we lack the private
entitlement to enable TSO
Over time, I hope that some of the limitations above could cease to exist.
This device model would enable very nice use cases with KVM on an Asahi
Linux device.
Please beware that the vmapple device model only works with macOS 12 guests
for now. Newer guests run into Hypervisor.Framework incompatibilities.
---
v1 -> v2:
- Adapt to system_ss meson.build target
- Add documentation
- Rework virtio-blk patch to make all vmapple virtio-blk logic subclasses
- Add log message on write
- Move max slot number to define
- Use SPDX header
- Remove useless includes
Alexander Graf (12):
build: Only define OS_OBJECT_USE_OBJC with gcc
hw/misc/pvpanic: Add MMIO interface
hvf: Increase number of possible memory slots
hvf: arm: Ignore writes to CNTP_CTL_EL0
hw: Add vmapple subdir
gpex: Allow more than 4 legacy IRQs
hw/vmapple/aes: Introduce aes engine
hw/vmapple/bdif: Introduce vmapple backdoor interface
hw/vmapple/cfg: Introduce vmapple cfg region
hw/vmapple/apple-gfx: Introduce ParavirtualizedGraphics.Framework
support
hw/vmapple/virtio-blk: Add support for apple virtio-blk
hw/vmapple/vmapple: Add vmapple machine type
MAINTAINERS | 7 +
docs/system/arm/vmapple.rst | 68 ++++
docs/system/target-arm.rst | 1 +
meson.build | 9 +-
hw/vmapple/trace.h | 1 +
include/hw/misc/pvpanic.h | 1 +
include/hw/pci-host/gpex.h | 7 +-
include/hw/pci/pci_ids.h | 1 +
include/hw/virtio/virtio-blk.h | 11 +-
include/hw/vmapple/bdif.h | 31 ++
include/hw/vmapple/cfg.h | 68 ++++
include/hw/vmapple/virtio-blk.h | 39 ++
include/sysemu/hvf_int.h | 4 +-
accel/hvf/hvf-accel-ops.c | 2 +-
hw/arm/sbsa-ref.c | 2 +-
hw/arm/virt.c | 2 +-
hw/block/virtio-blk.c | 18 +-
hw/i386/microvm.c | 2 +-
hw/loongarch/virt.c | 2 +-
hw/mips/loongson3_virt.c | 2 +-
hw/misc/pvpanic-mmio.c | 61 +++
hw/openrisc/virt.c | 12 +-
hw/pci-host/gpex.c | 36 +-
hw/riscv/virt.c | 12 +-
hw/vmapple/aes.c | 583 ++++++++++++++++++++++++++++
hw/vmapple/bdif.c | 245 ++++++++++++
hw/vmapple/cfg.c | 105 +++++
hw/vmapple/virtio-blk.c | 212 ++++++++++
hw/vmapple/vmapple.c | 661 ++++++++++++++++++++++++++++++++
hw/xtensa/virt.c | 2 +-
target/arm/hvf/hvf.c | 9 +
hw/Kconfig | 1 +
hw/meson.build | 1 +
hw/misc/Kconfig | 4 +
hw/misc/meson.build | 1 +
hw/vmapple/Kconfig | 33 ++
hw/vmapple/apple-gfx.m | 578 ++++++++++++++++++++++++++++
hw/vmapple/meson.build | 6 +
hw/vmapple/trace-events | 47 +++
39 files changed, 2852 insertions(+), 35 deletions(-)
create mode 100644 docs/system/arm/vmapple.rst
create mode 100644 hw/vmapple/trace.h
create mode 100644 include/hw/vmapple/bdif.h
create mode 100644 include/hw/vmapple/cfg.h
create mode 100644 include/hw/vmapple/virtio-blk.h
create mode 100644 hw/misc/pvpanic-mmio.c
create mode 100644 hw/vmapple/aes.c
create mode 100644 hw/vmapple/bdif.c
create mode 100644 hw/vmapple/cfg.c
create mode 100644 hw/vmapple/virtio-blk.c
create mode 100644 hw/vmapple/vmapple.c
create mode 100644 hw/vmapple/Kconfig
create mode 100644 hw/vmapple/apple-gfx.m
create mode 100644 hw/vmapple/meson.build
create mode 100644 hw/vmapple/trace-events
--
2.39.2 (Apple Git-143)
Amazon Development Center Germany GmbH
Krausenstr. 38
10117 Berlin
Geschaeftsfuehrung: Christian Schlaeger, Jonathan Weiss
Eingetragen am Amtsgericht Charlottenburg unter HRB 149173 B
Sitz: Berlin
Ust-ID: DE 289 237 879
next reply other threads:[~2023-08-30 16:18 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-30 16:14 Alexander Graf [this message]
2023-08-30 16:14 ` [PATCH v2 01/12] build: Only define OS_OBJECT_USE_OBJC with gcc Alexander Graf
2023-08-31 8:12 ` Philippe Mathieu-Daudé
2023-08-31 8:53 ` Akihiko Odaki
2023-08-31 8:59 ` Alexander Graf
2023-08-31 10:45 ` Akihiko Odaki
2023-08-30 16:14 ` [PATCH v2 02/12] hw/misc/pvpanic: Add MMIO interface Alexander Graf
2023-09-01 5:19 ` Mark Cave-Ayland
2023-08-30 16:14 ` [PATCH v2 03/12] hvf: Increase number of possible memory slots Alexander Graf
2023-08-30 16:14 ` [PATCH v2 04/12] hvf: arm: Ignore writes to CNTP_CTL_EL0 Alexander Graf
2023-08-31 8:13 ` Philippe Mathieu-Daudé
2023-08-30 16:14 ` [PATCH v2 05/12] hw: Add vmapple subdir Alexander Graf
2023-08-30 16:14 ` [PATCH v2 06/12] gpex: Allow more than 4 legacy IRQs Alexander Graf
2023-08-30 16:14 ` [PATCH v2 07/12] hw/vmapple/aes: Introduce aes engine Alexander Graf
2023-09-01 5:34 ` Mark Cave-Ayland
2023-08-30 16:14 ` [PATCH v2 08/12] hw/vmapple/bdif: Introduce vmapple backdoor interface Alexander Graf
2023-08-31 19:46 ` Stefan Hajnoczi
2023-09-01 5:40 ` Mark Cave-Ayland
2023-08-30 16:14 ` [PATCH v2 09/12] hw/vmapple/cfg: Introduce vmapple cfg region Alexander Graf
2023-09-01 5:46 ` Mark Cave-Ayland
2023-08-30 16:14 ` [PATCH v2 10/12] hw/vmapple/apple-gfx: Introduce ParavirtualizedGraphics.Framework support Alexander Graf
2023-09-23 21:04 ` Phil Dennis-Jordan
2023-08-30 16:14 ` [PATCH v2 11/12] hw/vmapple/virtio-blk: Add support for apple virtio-blk Alexander Graf
2023-08-31 20:03 ` Stefan Hajnoczi
2023-08-31 20:34 ` Philippe Mathieu-Daudé
2023-09-01 6:53 ` Mark Cave-Ayland
2023-08-30 16:14 ` [PATCH v2 12/12] hw/vmapple/vmapple: Add vmapple machine type Alexander Graf
2023-09-01 7:07 ` Mark Cave-Ayland
2023-10-12 11:46 ` Francesco Cagnin
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=20230830161425.91946-1-graf@amazon.com \
--to=graf@amazon.com \
--cc=berrange@redhat.com \
--cc=dirty@apple.com \
--cc=hreitz@redhat.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=mads@ynddal.dk \
--cc=marcel.apfelbaum@gmail.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=philmd@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=shentey@gmail.com \
--cc=stefanha@redhat.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).