[libvirt] [PATCH 0/2] add ibmvscsi and virtio-scsi controller models

Hi, these patches let you specify explicitly all supported controller models for QEMU, and add the new virtio-scsi model. Paolo Bonzini (2): qemu: add ibmvscsi controller model qemu: add virtio-scsi controller model docs/formatdomain.html.in | 4 +- docs/schemas/domaincommon.rng | 2 + src/conf/domain_conf.c | 4 ++- src/conf/domain_conf.h | 2 + src/qemu/qemu_command.c | 26 ++++++++++++++-- src/vmx/vmx.c | 10 ++++-- .../qemuxml2argv-disk-scsi-virtio-scsi.args | 9 ++++++ .../qemuxml2argv-disk-scsi-virtio-scsi.xml | 31 ++++++++++++++++++++ .../qemuxml2argv-disk-scsi-vscsi.args | 8 +++++ .../qemuxml2argv-disk-scsi-vscsi.xml | 31 ++++++++++++++++++++ tests/qemuxml2argvtest.c | 4 ++ tests/qemuxml2xmltest.c | 2 + 12 files changed, 123 insertions(+), 10 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.xml create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.xml -- 1.7.7.1

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> --- docs/formatdomain.html.in | 4 +- docs/schemas/domaincommon.rng | 1 + src/conf/domain_conf.c | 3 +- src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 23 +++++++++++++-- src/vmx/vmx.c | 9 +++-- .../qemuxml2argv-disk-scsi-vscsi.args | 8 +++++ .../qemuxml2argv-disk-scsi-vscsi.xml | 31 ++++++++++++++++++++ tests/qemuxml2argvtest.c | 2 + tests/qemuxml2xmltest.c | 1 + 10 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.xml diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index 4b31e2a..e7ba566 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1541,8 +1541,8 @@ attributes <code>ports</code> and <code>vectors</code>, which control how many devices can be connected through the controller. A "scsi" controller has an optional - attribute <code>model</code>, which is one of "auto", - "buslogic", "lsilogic", "lsias1068", or "vmpvscsi". + attribute <code>model</code>, which is one of "auto", "buslogic", + "ibmvscsi", "lsilogic", "lsias1068" or "vmpvscsi". A "usb" controller has an optional attribute <code>model</code>, which is one of "piix3-uhci", "piix4-uhci", "ehci", "ich9-ehci1", "ich9-uhci1", "ich9-uhci2", "ich9-uhci3", diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index fdcbc28..5f67a6f 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -1081,6 +1081,7 @@ <value>lsilogic</value> <value>lsisas1068</value> <value>vmpvscsi</value> + <value>ibmvscsi</value> <value>piix3-uhci</value> <value>piix4-uhci</value> <value>ehci</value> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d474551..f01650a 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -234,7 +234,8 @@ VIR_ENUM_IMPL(virDomainControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAS "buslogic", "lsilogic", "lsisas1068", - "vmpvscsi") + "vmpvscsi", + "ibmvscsi"); VIR_ENUM_IMPL(virDomainControllerModelUSB, VIR_DOMAIN_CONTROLLER_MODEL_USB_LAST, "piix3-uhci", diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index bac5a87..c6c4e27 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -422,6 +422,7 @@ enum virDomainControllerModelSCSI { VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI, + VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST }; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 1bd1f37..f908742 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2288,14 +2288,30 @@ qemuBuildControllerDevStr(virDomainDefPtr domainDef, int *nusbcontroller) { virBuffer buf = VIR_BUFFER_INITIALIZER; + int model; switch (def->type) { case VIR_DOMAIN_CONTROLLER_TYPE_SCSI: - if (STREQ(domainDef->os.arch, "ppc64") && - STREQ(domainDef->os.machine, "pseries")) { - virBufferAddLit(&buf, "spapr-vscsi"); - } else { + model = def->model; + if (model == -1 || model == VIR_DOMAIN_CONTROLLER_MODEL_SCSI_AUTO) { + if (STREQ(domainDef->os.arch, "ppc64") && + 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"); + 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); break; diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index c250aee..6ac500c 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -481,16 +481,17 @@ def->parallels[0]... #define VMX_BUILD_NAME(_suffix) \ VMX_BUILD_NAME_EXTRA(_suffix, #_suffix) -/* directly map the virDomainControllerModel to virVMXSCSIControllerModel, - * this is good enough for now because all virDomainControllerModel values - * are actually SCSI controller models in the ESX case */ +/* directly map the virDomainControllerModel to virVMXSCSIControllerModel. + * Using an uppercase name for unused values ensures that they will never + * be used. */ VIR_ENUM_DECL(virVMXControllerModelSCSI) VIR_ENUM_IMPL(virVMXControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST, "auto", /* just to match virDomainControllerModel, will never be used */ "buslogic", "lsilogic", "lsisas1068", - "pvscsi"); + "pvscsi", + "UNUSED ibmvscsi"); diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.args new file mode 100644 index 0000000..799eb92 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.args @@ -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 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.xml new file mode 100644 index 0000000..7cf5798 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-vscsi.xml @@ -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> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 30bea37..754d898 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -429,6 +429,8 @@ mymain(void) QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); DO_TEST("disk-scsi-device-auto", false, 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, QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_ICH9_AHCI); diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 2cc1f7d..f35caee 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -139,6 +139,7 @@ mymain(void) DO_TEST("disk-drive-cache-v1-wb"); DO_TEST("disk-drive-cache-v1-none"); DO_TEST("disk-scsi-device"); + DO_TEST("disk-scsi-vscsi"); DO_TEST("graphics-listen-network"); DO_TEST("graphics-vnc"); DO_TEST("graphics-vnc-sasl"); -- 1.7.7.1

On 01/13/2012 05:23 AM, Paolo Bonzini wrote:
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> --- docs/formatdomain.html.in | 4 +- docs/schemas/domaincommon.rng | 1 + src/conf/domain_conf.c | 3 +- src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 23 +++++++++++++-- src/vmx/vmx.c | 9 +++-- .../qemuxml2argv-disk-scsi-vscsi.args | 8 +++++ .../qemuxml2argv-disk-scsi-vscsi.xml | 31 ++++++++++++++++++++ tests/qemuxml2argvtest.c | 2 + tests/qemuxml2xmltest.c | 1 +
Yay - docs and tests all in the same v1 patch! And I didn't find anything suspicious in the patch. ACK and pushed. -- Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org

Adding a new model for virtio-scsi roughly follows the same scheme as the previous patch. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- This is the bare minimum necessary to use virtio-scsi. I'll gladly leave everything else, including support for full SCSI addresses (target/LUN) to Osier. docs/formatdomain.html.in | 2 +- docs/schemas/domaincommon.rng | 1 + src/conf/domain_conf.c | 3 +- src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 3 ++ src/vmx/vmx.c | 3 +- .../qemuxml2argv-disk-scsi-virtio-scsi.args | 9 ++++++ .../qemuxml2argv-disk-scsi-virtio-scsi.xml | 31 ++++++++++++++++++++ tests/qemuxml2argvtest.c | 2 + tests/qemuxml2xmltest.c | 1 + 10 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.xml diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index e7ba566..faf42df 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1542,7 +1542,7 @@ control how many devices can be connected through the controller. A "scsi" controller has an optional attribute <code>model</code>, which is one of "auto", "buslogic", - "ibmvscsi", "lsilogic", "lsias1068" or "vmpvscsi". + "ibmvscsi", "lsilogic", "lsias1068", "virtio-scsi" or "vmpvscsi". A "usb" controller has an optional attribute <code>model</code>, which is one of "piix3-uhci", "piix4-uhci", "ehci", "ich9-ehci1", "ich9-uhci1", "ich9-uhci2", "ich9-uhci3", diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 5f67a6f..db02603 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -1082,6 +1082,7 @@ <value>lsisas1068</value> <value>vmpvscsi</value> <value>ibmvscsi</value> + <value>virtio-scsi</value> <value>piix3-uhci</value> <value>piix4-uhci</value> <value>ehci</value> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index f01650a..cf12606 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -235,7 +235,8 @@ VIR_ENUM_IMPL(virDomainControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAS "lsilogic", "lsisas1068", "vmpvscsi", - "ibmvscsi"); + "ibmvscsi", + "virtio-scsi"); VIR_ENUM_IMPL(virDomainControllerModelUSB, VIR_DOMAIN_CONTROLLER_MODEL_USB_LAST, "piix3-uhci", diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index c6c4e27..20383c2 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -423,6 +423,7 @@ enum virDomainControllerModelSCSI { VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI, + VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST }; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f908742..fede714 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2303,6 +2303,9 @@ qemuBuildControllerDevStr(virDomainDefPtr domainDef, } } switch (model) { + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: + virBufferAddLit(&buf, "virtio-scsi"); + break; case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC: virBufferAddLit(&buf, "lsi"); break; diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 6ac500c..5ebd92a 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -491,7 +491,8 @@ VIR_ENUM_IMPL(virVMXControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST, "lsilogic", "lsisas1068", "pvscsi", - "UNUSED ibmvscsi"); + "UNUSED ibmvscsi", + "UNUSED virtio-scsi"); diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args new file mode 100644 index 0000000..38cf56e --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args @@ -0,0 +1,9 @@ +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 \ +virtio-scsi,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 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.xml new file mode 100644 index 0000000..452ade8 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.xml @@ -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='virtio-scsi'/> + <memballoon model='virtio'/> + </devices> +</domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 754d898..7d09fb8 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -431,6 +431,8 @@ mymain(void) 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-scsi-virtio-scsi", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); DO_TEST("disk-sata-device", false, QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_ICH9_AHCI); diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index f35caee..ad1903b 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -140,6 +140,7 @@ mymain(void) DO_TEST("disk-drive-cache-v1-none"); DO_TEST("disk-scsi-device"); DO_TEST("disk-scsi-vscsi"); + DO_TEST("disk-scsi-virtio-scsi"); DO_TEST("graphics-listen-network"); DO_TEST("graphics-vnc"); DO_TEST("graphics-vnc-sasl"); -- 1.7.7.1

On 01/13/2012 05:23 AM, Paolo Bonzini wrote:
Adding a new model for virtio-scsi roughly follows the same scheme as the previous patch.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> --- This is the bare minimum necessary to use virtio-scsi. I'll gladly leave everything else, including support for full SCSI addresses (target/LUN) to Osier.
docs/formatdomain.html.in | 2 +- docs/schemas/domaincommon.rng | 1 + src/conf/domain_conf.c | 3 +- src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 3 ++ src/vmx/vmx.c | 3 +- .../qemuxml2argv-disk-scsi-virtio-scsi.args | 9 ++++++ .../qemuxml2argv-disk-scsi-virtio-scsi.xml | 31 ++++++++++++++++++++ tests/qemuxml2argvtest.c | 2 + tests/qemuxml2xmltest.c | 1 + 10 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.xml
Looks very similar to the last one, which is a good sign :) ACK and pushed. -- Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org

On 01/13/2012 06:23 AM, Paolo Bonzini wrote:
Adding a new model for virtio-scsi roughly follows the same scheme as the previous patch.
Signed-off-by: Paolo Bonzini<pbonzini@redhat.com>
It should be noted that virtio-scsi has not been merged either in the Linux kernel or in QEMU yet. In particular, this patch assumes that we'll introduce a 'virtio-scsi' alias which I'm planning on objecting strongly too :-) This patch was taken into libvirt after posting the first non-RFC... Hopefully this hasn't hit a libvirt release yet. Regards, Anthony Liguori
--- This is the bare minimum necessary to use virtio-scsi. I'll gladly leave everything else, including support for full SCSI addresses (target/LUN) to Osier.
docs/formatdomain.html.in | 2 +- docs/schemas/domaincommon.rng | 1 + src/conf/domain_conf.c | 3 +- src/conf/domain_conf.h | 1 + src/qemu/qemu_command.c | 3 ++ src/vmx/vmx.c | 3 +- .../qemuxml2argv-disk-scsi-virtio-scsi.args | 9 ++++++ .../qemuxml2argv-disk-scsi-virtio-scsi.xml | 31 ++++++++++++++++++++ tests/qemuxml2argvtest.c | 2 + tests/qemuxml2xmltest.c | 1 + 10 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.xml
diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index e7ba566..faf42df 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -1542,7 +1542,7 @@ control how many devices can be connected through the controller. A "scsi" controller has an optional attribute<code>model</code>, which is one of "auto", "buslogic", - "ibmvscsi", "lsilogic", "lsias1068" or "vmpvscsi". + "ibmvscsi", "lsilogic", "lsias1068", "virtio-scsi" or "vmpvscsi". A "usb" controller has an optional attribute<code>model</code>, which is one of "piix3-uhci", "piix4-uhci", "ehci", "ich9-ehci1", "ich9-uhci1", "ich9-uhci2", "ich9-uhci3", diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 5f67a6f..db02603 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -1082,6 +1082,7 @@ <value>lsisas1068</value> <value>vmpvscsi</value> <value>ibmvscsi</value> +<value>virtio-scsi</value> <value>piix3-uhci</value> <value>piix4-uhci</value> <value>ehci</value> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index f01650a..cf12606 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -235,7 +235,8 @@ VIR_ENUM_IMPL(virDomainControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAS "lsilogic", "lsisas1068", "vmpvscsi", - "ibmvscsi"); + "ibmvscsi", + "virtio-scsi");
VIR_ENUM_IMPL(virDomainControllerModelUSB, VIR_DOMAIN_CONTROLLER_MODEL_USB_LAST, "piix3-uhci", diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index c6c4e27..20383c2 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -423,6 +423,7 @@ enum virDomainControllerModelSCSI { VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSISAS1068, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VMPVSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_IBMVSCSI, + VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI,
VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST }; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index f908742..fede714 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2303,6 +2303,9 @@ qemuBuildControllerDevStr(virDomainDefPtr domainDef, } } switch (model) { + case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO_SCSI: + virBufferAddLit(&buf, "virtio-scsi"); + break; case VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LSILOGIC: virBufferAddLit(&buf, "lsi"); break; diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 6ac500c..5ebd92a 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -491,7 +491,8 @@ VIR_ENUM_IMPL(virVMXControllerModelSCSI, VIR_DOMAIN_CONTROLLER_MODEL_SCSI_LAST, "lsilogic", "lsisas1068", "pvscsi", - "UNUSED ibmvscsi"); + "UNUSED ibmvscsi", + "UNUSED virtio-scsi");
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args new file mode 100644 index 0000000..38cf56e --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.args @@ -0,0 +1,9 @@ +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 \ +virtio-scsi,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 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.xml new file mode 100644 index 0000000..452ade8 --- /dev/null +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-virtio-scsi.xml @@ -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='virtio-scsi'/> +<memballoon model='virtio'/> +</devices> +</domain> diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 754d898..7d09fb8 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -431,6 +431,8 @@ mymain(void) 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-scsi-virtio-scsi", false, + QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG); DO_TEST("disk-sata-device", false, QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_NODEFCONFIG, QEMU_CAPS_ICH9_AHCI); diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index f35caee..ad1903b 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -140,6 +140,7 @@ mymain(void) DO_TEST("disk-drive-cache-v1-none"); DO_TEST("disk-scsi-device"); DO_TEST("disk-scsi-vscsi"); + DO_TEST("disk-scsi-virtio-scsi"); DO_TEST("graphics-listen-network"); DO_TEST("graphics-vnc"); DO_TEST("graphics-vnc-sasl");

On 02/13/2012 03:15 PM, Anthony Liguori wrote:
It should be noted that virtio-scsi has not been merged either in the Linux kernel or in QEMU yet.
In particular, this patch assumes that we'll introduce a 'virtio-scsi' alias which I'm planning on objecting strongly too :-)
This patch was taken into libvirt after posting the first non-RFC...
Hopefully this hasn't hit a libvirt release yet.
We just backed it out of 0.9.10. :) Paolo

On 02/13/2012 08:35 AM, Paolo Bonzini wrote:
On 02/13/2012 03:15 PM, Anthony Liguori wrote:
It should be noted that virtio-scsi has not been merged either in the Linux kernel or in QEMU yet.
In particular, this patch assumes that we'll introduce a 'virtio-scsi' alias which I'm planning on objecting strongly too :-)
This patch was taken into libvirt after posting the first non-RFC...
Hopefully this hasn't hit a libvirt release yet.
We just backed it out of 0.9.10. :)
Excellent :-) For QMP commands, my recommendation is that libvirt wait for a command to appear in qapi-schema.json. Note that we can add commands to qapi-schema.json without actually implementing them yet (by setting gen=False). For new devices, we could come up with a similar mechanism if that's desirable. Regards, Anthony Liguori
Paolo

On Mon, Feb 13, 2012 at 08:51:17AM -0600, Anthony Liguori wrote:
On 02/13/2012 08:35 AM, Paolo Bonzini wrote:
On 02/13/2012 03:15 PM, Anthony Liguori wrote:
It should be noted that virtio-scsi has not been merged either in the Linux kernel or in QEMU yet.
In particular, this patch assumes that we'll introduce a 'virtio-scsi' alias which I'm planning on objecting strongly too :-)
This patch was taken into libvirt after posting the first non-RFC...
Hopefully this hasn't hit a libvirt release yet.
We just backed it out of 0.9.10. :)
Excellent :-)
For QMP commands, my recommendation is that libvirt wait for a command to appear in qapi-schema.json. Note that we can add commands to qapi-schema.json without actually implementing them yet (by setting gen=False).
For new devices, we could come up with a similar mechanism if that's desirable.
Our general rule is that the QEMU patch must be committed, not merely posted, before we apply the corresponding libvirt patch. For some reason we slipped up & didn't follow our own rules with this particular patch. Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|
participants (4)
-
Anthony Liguori
-
Daniel P. Berrange
-
Eric Blake
-
Paolo Bonzini