Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[macOS] Boot stuck on PCI configuration PCI0 when using libvirt #127

Closed
timoxa0 opened this issue Sep 29, 2024 · 8 comments
Closed

[macOS] Boot stuck on PCI configuration PCI0 when using libvirt #127

timoxa0 opened this issue Sep 29, 2024 · 8 comments
Assignees
Labels
Bug Something isn't working Help Wanted Extra attention is needed Investigating The reported issue is under investigation Workaround A known temporary way around an issue

Comments

@timoxa0
Copy link

timoxa0 commented Sep 29, 2024

Describe the Issue

macOS stuck at boot when booting using libvirtd

Reproduce the Issue

  1. Use Autopilot
  2. Boot and install macOS using qemu
  3. Convert boot.sh to boot.xml and inport it
  4. Try too boot it

Expectation

No response

Screenshots

No response

Operating System

Cachy OS

Kernel

6.6.51-1-cachyos-lts-lto

Processor

AMD Ryzen 7 PRO 3700

RAM (in GB)

32GB

GPU(s)

No response

Version

v0.12.4

Branch

main

Generated Script File

#!/usr/bin/env bash
# shellcheck disable=SC2054

#
#   APC-RUN_29-09-2024_11-52-28
#
#   THIS FILE WAS GENERATED USING AUTOPILOT.
#
#   To boot this script, run the following command:
#   $ ./boot.sh
#

#
#	boot.sh
#	Created by Coopydood as part of the ultimate-macOS-KVM project.
#
#	Profile: https://github.com/Coopydood
#	Repo: https://github.com/Coopydood/ultimate-macOS-KVM
#
#	Adapted from OSX-KVM among others.
#	Greetz to TheNickDude, Dortania, khoalia, foxlet, and other contributors :]
#


ID="macOS"
NAME="macOS 15"
FILE="boot.sh"

ULTMOS=0.12.4
IGNORE_FILE=0
REQUIRES_SUDO=0
VFIO_PTA=0
VFIO_DEVICES=0
GEN_EPOCH=1727592748
FEATURE_LEVEL=7
VERBOSE=1
DISCORD_RPC=1
DISCORD_RPC_IMG="default"

SCREEN_RES="1280x720"

ALLOCATED_RAM="4G"
CPU_SOCKETS="1"
CPU_CORES="2"
CPU_THREADS="4"
CPU_MODEL="Cascadelake-Server"
CPU_FEATURE_ARGS="+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check,+avx2"

REPO_PATH="/home/timoxa0/ultimate-macOS-KVM"
OVMF_DIR="/home/timoxa0/ultimate-macOS-KVM/ovmf"

VFIO_ID_0="$USR_VFIO_ID_0"
VFIO_ID_1="$USR_VFIO_ID_1"
VFIO_ROM="$USR_VFIO_ROM"

USB_DEVICES="$USR_USB_DEVICES"

NETWORK_DEVICE="vmxnet3"
MAC_ADDRESS="00:16:cb:00:21:09"

OS_ID="Sequoia"

HDD_PATH="$REPO_PATH/HDD.qcow2"
DISK_TYPE="SSD"

#   You should not have to touch anything below this line, especially if you
#   don't really know what you're doing. It'll probably break something.

args=(
-global ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off
-enable-kvm -m "$ALLOCATED_RAM" -cpu "$CPU_MODEL",kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,"$CPU_FEATURE_ARGS"
-machine q35
-boot menu=on,splash-time=5
#-device usb-ehci,id=ehci
#-device qemu-xhci,id=xhci
-usb -device usb-kbd -device usb-tablet 
#USB_DEV_BEGIN
#USB_DEV_END
-smp "$CPU_THREADS",cores="$CPU_CORES",sockets="$CPU_SOCKETS"
-device pcie-root-port,bus=pcie.0,slot=1,x-speed=16,x-width=32
#VFIO_DEV_BEGIN
#VFIO_DEV_END
-device isa-applesmc,osk="ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"
-drive if=pflash,format=raw,readonly=on,file="$OVMF_DIR/OVMF_CODE.fd"
-drive if=pflash,format=raw,file="$OVMF_DIR/OVMF_VARS.fd"
-smbios type=2
-device ich9-intel-hda -device hda-duplex
-device ich9-ahci,id=sata
-drive id=OpenCore,if=none,format=qcow2,file="$REPO_PATH/boot/OpenCore.qcow2"
-drive id=HDD,if=none,file="$HDD_PATH",format=qcow2
-device ide-hd,bus=sata.2,drive=OpenCore,bootindex=1
-device ide-hd,bus=sata.3,drive=HDD,rotation_rate=1

############## REMOVE THESE LINES AFTER MACOS INSTALLATION ###############
-drive id=BaseSystem,if=none,file="$REPO_PATH/BaseSystem.img",format=raw
-device ide-hd,bus=sata.4,drive=BaseSystem
##########################################################################

-netdev user,id=net0 -device "$NETWORK_DEVICE",netdev=net0,id=net0,mac="$MAC_ADDRESS"
-device qxl-vga,vgamem_mb=128,vram_size_mb=128    
-monitor stdio
#-display none
#-vga qxl

################ UNCOMMENT IF YOU WANT TO USE VNC MONITOR ################
#-vnc 0.0.0.0:1,password=on -k en-us
##########################################################################

)

while getopts d: flag
do
    case "${flag}" in
        d) DISCORD_RPC=${OPTARG};;
    esac
done

if [ $VERBOSE = 1 ]
then
echo
echo \ \ \──────────────────────────────────────────────
echo \ \ \ \ \ $FILE
echo \ \ \ \ \ $ID $OS_ID
echo
echo \ \ \ \ \ Built with ULTMOS v$ULTMOS
echo \ \ \ \ \ Using $CPU_MODEL CPU model
if [ $REQUIRES_SUDO = 1 ]
then
echo \ \ \ \ \ Superuser privileges enabled
fi
if [ $VFIO_PTA = 1 ]
then
echo \ \ \ \ \ Passthrough enabled
else
echo \ \ \ \ \ Passthrough disabled
fi
if [ $DISCORD_RPC = 1 ]
then
echo \ \ \ \ \ Discord RPC enabled
else
echo \ \ \ \ \ Discord RPC disabled
fi
echo \ \ \──────────────────────────────────────────────
echo
fi

if [ $DISCORD_RPC = 1 ]
then
"$REPO_PATH/scripts/drpc.py" --os "$OS_ID" --pt $VFIO_DEVICES --wd "$REPO_PATH" --show "$DISCORD_RPC_IMG" &
fi

qemu-system-x86_64 "${args[@]}"

if [ $DISCORD_RPC = 1 ]
then
pkill -f drpc.py
fi

Generated XML File (if applicable)

<!--
	 
	    APC-RUN_29-09-2024_13-48-28
 
    THIS FILE WAS GENERATED USING AUTOPILOT.
				 
     To be used with virsh / virt-manager.
	 
	
	boot.xml	
	Created by Coopydood as part of the ultimate-macOS-KVM project.
	
	Profile: https://github.com/Coopydood
	Repo: https://github.com/Coopydood/ultimate-macOS-KVM

-->

<domain xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0" type="kvm">
  <name>ultmos-15</name>
  <title>macOS Sequoia (ULTMOS)</title>
  <description>  macOS Sequoia
  Converted from boot.sh 

  This virtual machine was created using ultimate-macOS-KVM, a project by Coopydood.
  Visit https://github.com/Coopydood/ultimate-macOS-KVM for help and support, or provide some feedback!

  DEBUG
  ULTMOS: v0.12.4
  XML: boot.xml
  AP: boot.sh
  APFLOW: No
  AUTO: Yes
  USEBLOBS: Yes
  RUNTIME: 13:48:28 29/09/2024
  </description>
  <uuid>c1c11372-9bfc-4815-8672-4b6072517604</uuid>
  <memory unit="KiB">4194304</memory>
  <currentMemory unit="KiB">4194304</currentMemory>
  <vcpu placement="static">4</vcpu>
  <os>
    <type arch="x86_64" machine="pc-q35-4.2">hvm</type>
    <loader readonly="yes" type="pflash">/home/timoxa0/ultimate-macOS-KVM/ovmf/OVMF_CODE.fd</loader>
    <nvram>/home/timoxa0/ultimate-macOS-KVM/ovmf/OVMF_VARS.fd</nvram>
    <boot dev="hd"/>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode="host-passthrough" check="none" migratable="on">
    <topology sockets="1" dies="1" cores="2" threads="2"/>
  </cpu>
  <clock offset="utc">
    <timer name="rtc" tickpolicy="catchup"/>
    <timer name="pit" tickpolicy="delay"/>
    <timer name="hpet" present="no"/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type="file" device="disk">
      <driver name="qemu" type="qcow2"/>
      <source file="/home/timoxa0/ultimate-macOS-KVM/boot/OpenCore.qcow2"/>
      <target dev="sda" bus="sata"/>
      <address type="drive" controller="0" bus="0" target="0" unit="0"/>
    </disk>
    <disk type="file" device="disk"> <!-- HDD HEADER -->
      <driver name="qemu" type="qcow2"/>
      <source file="/home/timoxa0/ultimate-macOS-KVM/HDD.qcow2"/>
      <target dev="sdb" bus="sata" rotation_rate="1"/>
      <address type="drive" controller="0" bus="0" target="0" unit="1"/>
    </disk> <!-- HDD FOOTER -->

<!--############# REMOVE THESE LINES AFTER MACOS INSTALLATION #############-->

    <disk type="file" device="disk"> 
      <driver name="qemu" type="raw"/>
      <source file="/home/timoxa0/ultimate-macOS-KVM/BaseSystem.img"/>
      <target dev="sdc" bus="sata"/>
      <address type="drive" controller="0" bus="0" target="0" unit="2"/>
	  </disk> 

<!--#######################################################################-->

    <controller type="sata" index="0">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x1f" function="0x2"/>
    </controller>
    <controller type="pci" index="0" model="pcie-root"/>
    <controller type="pci" index="1" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="1" port="0x8"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x0" multifunction="on"/>
    </controller>
    <controller type="pci" index="2" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="2" port="0x9"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
    </controller>
    <controller type="pci" index="3" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="3" port="0xa"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x2"/>
    </controller>
    <controller type="pci" index="4" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="4" port="0xb"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x3"/>
    </controller>
    <controller type="pci" index="5" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="5" port="0xc"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x4"/>
    </controller>
    <controller type="pci" index="6" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="6" port="0xd"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x5"/>
    </controller>
    <controller type="pci" index="7" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="7" port="0xe"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x6"/>
    </controller>
    <controller type="pci" index="8" model="pcie-root-port">
      <model name="pcie-root-port"/>
      <target chassis="8" port="0xf"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x7"/>
    </controller>
    <controller type="pci" index="9" model="pcie-to-pci-bridge">
      <model name="pcie-pci-bridge"/>
      <address type="pci" domain="0x0000" bus="0x01" slot="0x00" function="0x0"/>
    </controller>
    <controller type="usb" index="0" model="ich9-ehci1">
      <address type="pci" domain="0x0000" bus="0x00" slot="0x1d" function="0x7"/>
    </controller>
    <controller type="usb" index="0" model="ich9-uhci1">
      <master startport="0"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x1d" function="0x0" multifunction="on"/>
    </controller>
    <controller type="usb" index="0" model="ich9-uhci2">
      <master startport="2"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x1d" function="0x1"/>
    </controller>
    <controller type="usb" index="0" model="ich9-uhci3">
      <master startport="4"/>
      <address type="pci" domain="0x0000" bus="0x00" slot="0x1d" function="0x2"/>
    </controller>
    <interface type="network">
      <mac address="00:16:cb:00:21:09"/>
      <source network="default"/>
      <model type="vmxnet3"/>
      <address type="pci" domain="0x0000" bus="0x09" slot="0x02" function="0x0"/>
    </interface>
    <serial type="pty">
      <target type="isa-serial" port="0">
        <model name="isa-serial"/>
      </target>
    </serial>
    <console type="pty">
      <target type="serial" port="0"/>
    </console>
    <input type="mouse" bus="ps2"/>
    <input type="keyboard" bus="ps2"/>
    <input type="keyboard" bus="usb">
      <address type="usb" bus="0" port="3"/>
    </input>
    <input type="mouse" bus="usb">
      <address type="usb" bus="0" port="4"/>
    </input>
    <graphics type="spice">
      <listen type="none"/>
    </graphics>
    <sound model="ich9">
	  <address type="pci" domain="0x0000" bus="0x00" slot="0x1b" function="0x0"/>
	</sound>
    <audio id="1" type="none"/>
    <video>
      <model type="vga" vram="16384" heads="1" primary="yes"/>
      <address type="pci" domain="0x0000" bus="0x09" slot="0x01" function="0x0"/>
    </video>
    <!-- VFIO-PCI HEADER -->
    <!-- USB HEADER -->
    <!--<watchdog model="itco" action="reset"/> -->
    <memballoon model="none"/>
  </devices>
  <qemu:commandline>
    <qemu:arg value="-global"/>
    <qemu:arg value="ICH9-LPC.acpi-pci-hotplug-with-bridge-support=off"/>
    <qemu:arg value="-device"/>
    <qemu:arg value="isa-applesmc,osk=ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc"/>
    <qemu:arg value="-smbios"/>
    <qemu:arg value="type=2"/>
    <qemu:arg value="-cpu"/>
    <qemu:arg value="Cascadelake-Server,kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on,+ssse3,+sse4.2,+popcnt,+avx,+aes,+xsave,+xsaveopt,check,+avx2"/>
    <qemu:arg value="-global"/>
    <qemu:arg value="nec-usb-xhci.msi=off"/>
    <!-- NVME HEADER -->
  </qemu:commandline>
</domain>

Generated Log File

No response

Additional Information

No response

2024-09-29-140450_hyprshot

@timoxa0 timoxa0 added Bug Something isn't working Pending The issue or pull request is being reviewed labels Sep 29, 2024
@Danie10
Copy link

Danie10 commented Oct 4, 2024

I seem to be stuck at the identical place with same screen display if I boot with libvirtd. I did notice when I tried to use the boot.sh to install, it went further and started installing, but it was not showing my /dev/disk/by-id drive to install to. I'm suspecting in my case that something was not right with that mapping I did during the setup - in my case I was trying to point it to my /dev/sdc3 partition using the /dev/disk/by-id long name.

@rocketraman
Copy link

I can't get my VM to boot with libvirt either. Booting the vm with ./boot.sh works fine, but when trying to use libvirt it hangs at almost exactly the same place.

image

@Coopydood
Copy link
Owner

I think this might be an issue with verbose boot.

Try using the macOS Boot Argument editor (Main menu > Extras) to remove the -v from the boot args, and try again.

Cheers

@rocketraman
Copy link

I think this might be an issue with verbose boot.

Try using the macOS Boot Argument editor (Main menu > Extras) to remove the -v from the boot args, and try again.

Wow, that worked. Thank you. Can you explain why it fails via libvirt but works when using qemu directly?

@Coopydood
Copy link
Owner

Honestly, I have no idea...

My educated guess would be a slightly different feature set / layers of functions, but that wouldn't explain why it works without verbose boot.

As a general rule of thumb:

  • If NOT using GPU passthrough, use the QEMU script
  • If you ARE using GPU passthrough, use the VFIO Passthrough Assistant (Main menu > Passthrough tools), then convert to XML, import, and use libvirt.

TL;DR: No passthrough = QEMU script, Passthrough = Libvirt / virt-manager

@Coopydood Coopydood added Help Wanted Extra attention is needed Investigating The reported issue is under investigation Workaround A known temporary way around an issue and removed Pending The issue or pull request is being reviewed labels Oct 17, 2024
@timoxa0
Copy link
Author

timoxa0 commented Oct 18, 2024

Thank you, disabling verbose mode solved the problem.

@timoxa0 timoxa0 closed this as completed Oct 18, 2024
@eversiege eversiege pinned this issue Oct 18, 2024
@eversiege
Copy link
Collaborator

Pinning until resolved without workarounds

@xdien
Copy link

xdien commented Dec 13, 2024

TL;DR: No passthrough = QEMU script, Passthrough = Libvirt / virt-manager

I encountered the same problem as follows.

  • When running with the script, the gpu passthough it works fine
  • But when configuring with xml, then adding gpu this situation will happen.

Cause

  • machine q35 has a pcie-root address at 0x00
  • But when trying to connect the GPU, the address can be 0x02, 0x03...
  • hackintosh cannot detect or configure compatibility with that pcie address due to main configuration
<hostdev mode="subsystem" type="pci" managed="yes">
  <source>
    <address domain="0x0000" bus="0x04" slot="0x00" function="0x0"/>
  </source>
  <address type="pci" domain="0x0000" bus="0x02" slot="0x00" function="0x0" multifunction="on"/>
</hostdev>

bus="0x02" slot="0x00"
-> Guest will dectect as 02:00.0

Resolve

  • Change to
<hostdev mode="subsystem" type="pci" managed="yes">
  <source>
    <address domain="0x0000" bus="0x04" slot="0x00" function="0x0"/>
  </source>
  <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0" multifunction="on"/>
</hostdev>

bus="0x00" slot="0x02"
-> 00:02.0 in guest

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Bug Something isn't working Help Wanted Extra attention is needed Investigating The reported issue is under investigation Workaround A known temporary way around an issue
Projects
None yet
Development

No branches or pull requests

6 participants