mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06:00
qemu: enable using implicit sata controller in q35 machines
q35 machines have an implicit ahci (sata) controller at 00:1F.2 which has no "id" associated with it. For this reason, we can't refer to it as "ahci0". Instead, we don't give an id on the commandline, which qemu interprets as "use the first ahci controller". We then need to specify the unit with "unit=%d" rather than adding it onto the bus arg.
This commit is contained in:
parent
5de58d87c8
commit
83718cfe23
@ -4211,9 +4211,26 @@ qemuBuildDriveDevStr(virDomainDefPtr def,
|
||||
virBufferAddLit(&opt, "ide-drive");
|
||||
}
|
||||
|
||||
virBufferAsprintf(&opt, ",bus=ahci%d.%d",
|
||||
disk->info.addr.drive.controller,
|
||||
disk->info.addr.drive.unit);
|
||||
if (qemuDomainMachineIsQ35(def) &&
|
||||
disk->info.addr.drive.controller == 0) {
|
||||
/* Q35 machines have an implicit ahci (sata) controller at
|
||||
* 00:1F.2 which has no "id" associated with it. For this
|
||||
* reason, we can't refer to it as "ahci0". Instead, we
|
||||
* don't give an id, which qemu interprets as "use the
|
||||
* first ahci controller". We then need to specify the
|
||||
* unit with "unit=%d" rather than adding it onto the bus
|
||||
* arg.
|
||||
*/
|
||||
virBufferAsprintf(&opt, ",unit=%d", disk->info.addr.drive.unit);
|
||||
} else {
|
||||
/* All other ahci controllers have been created by
|
||||
* libvirt, so they *do* have an id, and we can identify
|
||||
* them that way.
|
||||
*/
|
||||
virBufferAsprintf(&opt, ",bus=ahci%d.%d",
|
||||
disk->info.addr.drive.controller,
|
||||
disk->info.addr.drive.unit);
|
||||
}
|
||||
break;
|
||||
case VIR_DOMAIN_DISK_BUS_VIRTIO:
|
||||
if (disk->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) {
|
||||
|
@ -3,4 +3,6 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test \
|
||||
-monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c \
|
||||
-device i82801b11-bridge,id=pci.1,bus=pcie.0,addr=0x2 \
|
||||
-device pci-bridge,chassis_nr=2,id=pci.2,bus=pci.1,addr=0x1 \
|
||||
-drive file=/dev/HostVG/QEMUGuest1,if=none,id=drive-sata0-0-0 \
|
||||
-device ide-drive,unit=0,drive=drive-sata0-0-0,id=sata0-0-0 \
|
||||
-vga qxl -global qxl.ram_size=67108864 -global qxl.vram_size=18874368
|
||||
|
@ -14,6 +14,11 @@
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/libexec/qemu-kvm</emulator>
|
||||
<disk type='block' device='disk'>
|
||||
<source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
<target dev='sda' bus='sata'/>
|
||||
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pcie-root'/>
|
||||
<controller type='pci' index='1' model='dmi-to-pci-bridge'/>
|
||||
<controller type='pci' index='2' model='pci-bridge'/>
|
||||
|
@ -1001,7 +1001,7 @@ mymain(void)
|
||||
DO_TEST("q35",
|
||||
QEMU_CAPS_DEVICE, QEMU_CAPS_DEVICE_PCI_BRIDGE,
|
||||
QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE,
|
||||
QEMU_CAPS_ICH9_AHCI,
|
||||
QEMU_CAPS_DRIVE, QEMU_CAPS_ICH9_AHCI,
|
||||
QEMU_CAPS_VGA, QEMU_CAPS_DEVICE_VIDEO_PRIMARY,
|
||||
QEMU_CAPS_VGA, QEMU_CAPS_VGA_QXL, QEMU_CAPS_DEVICE_QXL);
|
||||
|
||||
|
@ -14,6 +14,11 @@
|
||||
<on_crash>destroy</on_crash>
|
||||
<devices>
|
||||
<emulator>/usr/libexec/qemu-kvm</emulator>
|
||||
<disk type='block' device='disk'>
|
||||
<source dev='/dev/HostVG/QEMUGuest1'/>
|
||||
<target dev='sda' bus='sata'/>
|
||||
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
|
||||
</disk>
|
||||
<controller type='pci' index='0' model='pcie-root'/>
|
||||
<controller type='pci' index='1' model='dmi-to-pci-bridge'/>
|
||||
<controller type='pci' index='2' model='pci-bridge'/>
|
||||
|
Loading…
Reference in New Issue
Block a user