On 2026/09/16 19:00, Mohamed Mediouni wrote:
Otherwise, a newer macOS version with FileVault
disabled in the guest does not boot.
Signed-off-by: Mohamed Mediouni <[email protected]>
---
hw/vmapple/virtio-blk.c | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/hw/vmapple/virtio-blk.c b/hw/vmapple/virtio-blk.c
index 9de9aaae0b..906c2b2ec8 100644
--- a/hw/vmapple/virtio-blk.c
+++ b/hw/vmapple/virtio-blk.c
@@ -119,12 +119,17 @@ static const Property vmapple_virtio_blk_pci_properties[]
= {
VM_APPLE_VIRTIO_BLK_VARIANT_UNSPECIFIED),
};
+#define VMAPPLE_PCI_VNDR_SIZE 14
+/* Disable requirement for FileVault to be enabled on the guest */
+#define VMAPPLE_PCI_VNDR_LEGACY_FEATURES_DISABLE_ENCRYPTION (1 << 0)
+
static void vmapple_virtio_blk_pci_realize(VirtIOPCIProxy *vpci_dev, Error
**errp)
{
ERRP_GUARD();
VMAppleVirtIOBlkPCI *dev = VMAPPLE_VIRTIO_BLK_PCI(vpci_dev);
DeviceState *vdev = DEVICE(&dev->vdev);
VirtIOBlkConf *conf = &dev->vdev.parent_obj.conf;
+ int offset;
if (dev->variant == VM_APPLE_VIRTIO_BLK_VARIANT_UNSPECIFIED) {
error_setg(errp, "vmapple virtio block device variant unspecified");
@@ -162,6 +167,19 @@ static void vmapple_virtio_blk_pci_realize(VirtIOPCIProxy
*vpci_dev, Error **err
pci_config_set_vendor_id(vpci_dev->pci_dev.config, PCI_VENDOR_ID_APPLE);
pci_config_set_device_id(vpci_dev->pci_dev.config,
PCI_DEVICE_ID_APPLE_VIRTIO_BLK);
+
+ offset = pci_add_capability(&vpci_dev->pci_dev, PCI_CAP_ID_VNDR, 0,
+ VMAPPLE_PCI_VNDR_SIZE, errp);
This exhausts conventional PCI capability space behind a PCIe root port
with modern-pio-notify=on and MSI-X enabled. Existing capabilities
consume 188 of 192 bytes; adding 14 calls pci_find_space(), which
returns zero and triggers assert(offset). The negative-result check
cannot handle this. Default root-bus placement fits.
Regards,
Akihiko Odaki
+ if (offset < 0) {
+ return;
+ }
+
+ pci_set_byte(vpci_dev->pci_dev.config + offset + 2,
+ VMAPPLE_PCI_VNDR_SIZE);
+ pci_set_byte(vpci_dev->pci_dev.config + offset + 3, 9);
+ pci_set_word(vpci_dev->pci_dev.config + offset + 4, PCI_VENDOR_ID_APPLE);
+ pci_set_byte(vpci_dev->pci_dev.config + offset + 6,
+ VMAPPLE_PCI_VNDR_LEGACY_FEATURES_DISABLE_ENCRYPTION);
}
static void vmapple_virtio_blk_pci_class_init(ObjectClass *klass,