From: Laine Stump Date: Sat, 3 Aug 2013 21:37:07 +0000 (-0400) Subject: qemu: enable using implicit sata controller in q35 machines X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=83718cfe230dc4178940571090909b26d7af28d2;p=libvirt.git 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. --- diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index c7e78266e5..a8fce22206 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -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) { diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35.args b/tests/qemuxml2argvdata/qemuxml2argv-q35.args index 5ff4bc7b60..9e67be5660 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-q35.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-q35.args @@ -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 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-q35.xml b/tests/qemuxml2argvdata/qemuxml2argv-q35.xml index 3541b146af..edaf6cbbf0 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-q35.xml +++ b/tests/qemuxml2argvdata/qemuxml2argv-q35.xml @@ -14,6 +14,11 @@ destroy /usr/libexec/qemu-kvm + + + +
+ diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 0068d27ed2..679124e35b 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -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); diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35.xml b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35.xml index 2a86e61f57..96f8eafdce 100644 --- a/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35.xml +++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-q35.xml @@ -14,6 +14,11 @@ destroy /usr/libexec/qemu-kvm + + + +
+