mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
qemu: add ibmvscsi controller model
KVM will be able to use a PCI SCSI controller even on POWER. Let the user specify the vSCSI controller by other means than a default. After this patch, the QEMU driver will actually look at the model and reject anything but auto, lsilogic and ibmvscsi. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
c972237ee1
commit
7b345b69f2
@ -1541,8 +1541,8 @@
|
|||||||
attributes <code>ports</code> and <code>vectors</code>, which
|
attributes <code>ports</code> and <code>vectors</code>, which
|
||||||
control how many devices can be connected through the
|
control how many devices can be connected through the
|
||||||
controller. A "scsi" controller has an optional
|
controller. A "scsi" controller has an optional
|
||||||
attribute <code>model</code>, which is one of "auto",
|
attribute <code>model</code>, which is one of "auto", "buslogic",
|
||||||
"buslogic", "lsilogic", "lsias1068", or "vmpvscsi".
|
"ibmvscsi", "lsilogic", "lsias1068" or "vmpvscsi".
|
||||||
A "usb" controller has an optional attribute <code>model</code>,
|
A "usb" controller has an optional attribute <code>model</code>,
|
||||||
which is one of "piix3-uhci", "piix4-uhci", "ehci",
|
which is one of "piix3-uhci", "piix4-uhci", "ehci",
|
||||||
"ich9-ehci1", "ich9-uhci1", "ich9-uhci2", "ich9-uhci3",
|
"ich9-ehci1", "ich9-uhci1", "ich9-uhci2", "ich9-uhci3",
|
||||||
|
@ -1081,6 +1081,7 @@
|
|||||||
<value>lsilogic</value>
|
<value>lsilogic</value>
|
||||||
<value>lsisas1068</value>
|
<value>lsisas1068</value>
|
||||||
<value>vmpvscsi</value>
|
<value>vmpvscsi</value>
|
||||||
|
<value>ibmvscsi</value>
|
||||||
<value>piix3-uhci</value>
|
<value>piix3-uhci</value>
|
||||||
<value>piix4-uhci</value>
|
<value>piix4-uhci</value>
|
||||||
<value>ehci</value>
|
<value>ehci</value>
|
||||||
|
@ -234,7 +234,8 @@ VIR_ENUM_IMPL(virDomainControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAS
|
|||||||
"buslogic",
|
"buslogic",
|
||||||
"lsilogic",
|
"lsilogic",
|
||||||
"lsisas1068",
|
"lsisas1068",
|
||||||
"vmpvscsi")
|
"vmpvscsi",
|
||||||
|
"ibmvscsi");
|
||||||
|
|
||||||
VIR_ENUM_IMPL(virDomainControllerModelUSB, VIR_DOMAIN_CONTROLLER_MODEL_USB_LAST,
|
VIR_ENUM_IMPL(virDomainControllerModelUSB, VIR_DOMAIN_CONTROLLER_MODEL_USB_LAST,
|
||||||
"piix3-uhci",
|
"piix3-uhci",
|
||||||
|
@ -422,6 +422,7 @@ enum virDomainControllerModelSCSI {
|
|||||||
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC,
|
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC,
|
||||||
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068,
|
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068,
|
||||||
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI,
|
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI,
|
||||||
|
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI,
|
||||||
|
|
||||||
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST
|
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST
|
||||||
};
|
};
|
||||||
|
@ -2288,14 +2288,30 @@ qemuBuildControllerDevStr(virDomainDefPtr domainDef,
|
|||||||
int *nusbcontroller)
|
int *nusbcontroller)
|
||||||
{
|
{
|
||||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||||
|
int model;
|
||||||
|
|
||||||
switch (def->type) {
|
switch (def->type) {
|
||||||
case VIR_DOMAIN_CONTROLLER_TYPE_SCSI:
|
case VIR_DOMAIN_CONTROLLER_TYPE_SCSI:
|
||||||
if (STREQ(domainDef->os.arch, "ppc64") &&
|
model = def->model;
|
||||||
STREQ(domainDef->os.machine, "pseries")) {
|
if (model == -1 || model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_AUTO) {
|
||||||
virBufferAddLit(&buf, "spapr-vscsi");
|
if (STREQ(domainDef->os.arch, "ppc64") &&
|
||||||
} else {
|
STREQ(domainDef->os.machine, "pseries")) {
|
||||||
|
model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI;
|
||||||
|
} else {
|
||||||
|
model = VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (model) {
|
||||||
|
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC:
|
||||||
virBufferAddLit(&buf, "lsi");
|
virBufferAddLit(&buf, "lsi");
|
||||||
|
break;
|
||||||
|
case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI:
|
||||||
|
virBufferAddLit(&buf, "spapr-vscsi");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||||
|
_("Unsupported controller model: %s"),
|
||||||
|
virDomainControllerModelSCSITypeToString(model));
|
||||||
}
|
}
|
||||||
virBufferAsprintf(&buf, ",id=scsi%d", def->idx);
|
virBufferAsprintf(&buf, ",id=scsi%d", def->idx);
|
||||||
break;
|
break;
|
||||||
|
@ -481,16 +481,17 @@ def->parallels[0]...
|
|||||||
#define VMX_BUILD_NAME(_suffix) \
|
#define VMX_BUILD_NAME(_suffix) \
|
||||||
VMX_BUILD_NAME_EXTRA(_suffix, #_suffix)
|
VMX_BUILD_NAME_EXTRA(_suffix, #_suffix)
|
||||||
|
|
||||||
/* directly map the virDomainControllerModel to virVMXSCSIControllerModel,
|
/* directly map the virDomainControllerModel to virVMXSCSIControllerModel.
|
||||||
* this is good enough for now because all virDomainControllerModel values
|
* Using an uppercase name for unused values ensures that they will never
|
||||||
* are actually SCSI controller models in the ESX case */
|
* be used. */
|
||||||
VIR_ENUM_DECL(virVMXControllerModelSCSI)
|
VIR_ENUM_DECL(virVMXControllerModelSCSI)
|
||||||
VIR_ENUM_IMPL(virVMXControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST,
|
VIR_ENUM_IMPL(virVMXControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST,
|
||||||
"auto", /* just to match virDomainControllerModel, will never be used */
|
"auto", /* just to match virDomainControllerModel, will never be used */
|
||||||
"buslogic",
|
"buslogic",
|
||||||
"lsilogic",
|
"lsilogic",
|
||||||
"lsisas1068",
|
"lsisas1068",
|
||||||
"pvscsi");
|
"pvscsi",
|
||||||
|
"UNUSED ibmvscsi");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
8
tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.args
Normal file
8
tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.args
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M \
|
||||||
|
pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults -monitor \
|
||||||
|
unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -device spapr-vscsi,id=scsi0,\
|
||||||
|
bus=pci.0,addr=0x3 -drive file=/dev/HostVG/QEMUGuest1,if=none,\
|
||||||
|
id=drive-ide0-0-0 -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,\
|
||||||
|
id=ide0-0-0 -drive file=/tmp/scsidisk.img,if=none,id=drive-scsi0-0-0 -device \
|
||||||
|
scsi-disk,bus=scsi0.0,scsi-id=0,drive=drive-scsi0-0-0,id=scsi0-0-0 -usb \
|
||||||
|
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x4
|
31
tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.xml
Normal file
31
tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.xml
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<domain type='qemu'>
|
||||||
|
<name>QEMUGuest1</name>
|
||||||
|
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||||
|
<memory>219136</memory>
|
||||||
|
<currentMemory>219136</currentMemory>
|
||||||
|
<vcpu>1</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='i686' machine='pc'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<clock offset='utc'/>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/bin/qemu</emulator>
|
||||||
|
<disk type='block' device='disk'>
|
||||||
|
<source dev='/dev/HostVG/QEMUGuest1'/>
|
||||||
|
<target dev='hda' bus='ide'/>
|
||||||
|
<address type='drive' controller='0' bus='0' unit='0'/>
|
||||||
|
</disk>
|
||||||
|
<disk type='file' device='disk'>
|
||||||
|
<source file='/tmp/scsidisk.img'/>
|
||||||
|
<target dev='sda' bus='scsi'/>
|
||||||
|
<address type='drive' controller='0' bus='0' unit='0'/>
|
||||||
|
</disk>
|
||||||
|
<controller type='ide' index='0'/>
|
||||||
|
<controller type='scsi' index='0' model='ibmvscsi'/>
|
||||||
|
<memballoon model='virtio'/>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
@ -429,6 +429,8 @@ mymain(void)
|
|||||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||||
DO_TEST("disk-scsi-device-auto", false,
|
DO_TEST("disk-scsi-device-auto", false,
|
||||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||||
|
DO_TEST("disk-scsi-vscsi", false,
|
||||||
|
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG);
|
||||||
DO_TEST("disk-sata-device", false,
|
DO_TEST("disk-sata-device", false,
|
||||||
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE,
|
QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE,
|
||||||
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_ICH9_AHCI);
|
QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_ICH9_AHCI);
|
||||||
|
@ -139,6 +139,7 @@ mymain(void)
|
|||||||
DO_TEST("disk-drive-cache-v1-wb");
|
DO_TEST("disk-drive-cache-v1-wb");
|
||||||
DO_TEST("disk-drive-cache-v1-none");
|
DO_TEST("disk-drive-cache-v1-none");
|
||||||
DO_TEST("disk-scsi-device");
|
DO_TEST("disk-scsi-device");
|
||||||
|
DO_TEST("disk-scsi-vscsi");
|
||||||
DO_TEST("graphics-listen-network");
|
DO_TEST("graphics-listen-network");
|
||||||
DO_TEST("graphics-vnc");
|
DO_TEST("graphics-vnc");
|
||||||
DO_TEST("graphics-vnc-sasl");
|
DO_TEST("graphics-vnc-sasl");
|
||||||
|
Loading…
Reference in New Issue
Block a user