At the moment, all VirtIO devices support model=virtio except
for SCSI controllers where model=virtio-scsi must be used
instead: get rid of this inconsistency by providing an alias
at the parser level, so that existing code keeps working but
using the same values across the board is also optionally
possible.
Tweak one of the test cases to show that the new value is
accepted transparently, without altering any of the output
files in the process.
Signed-off-by: Andrea Bolognani <abologna(a)redhat.com>
---
docs/schemas/domaincommon.rng | 1 +
src/conf/domain_conf.c | 16 ++++++++++------
.../qemuxml2argvdata/controller-virtio-scsi.xml | 2 +-
3 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index 80f9f84f70..8981eda4b7 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -2156,6 +2156,7 @@
<value>ibmvscsi</value>
<value>virtio-scsi</value>
<value>lsisas1078</value>
+ <value>virtio</value>
<value>virtio-transitional</value>
<value>virtio-non-transitional</value>
</choice>
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 0c0e422889..cde10598f9 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -10320,16 +10320,20 @@ static int
virDomainControllerModelTypeFromString(const virDomainControllerDef *def,
const char *model)
{
- if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI)
- return virDomainControllerModelSCSITypeFromString(model);
- else if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_USB)
+ if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_SCSI) {
+ if (STREQ_NULLABLE(model, "virtio"))
+ return VIR_DOMAIN_CONTROLLER_MODEL_SCSI_VIRTIO;
+ else
+ return virDomainControllerModelSCSITypeFromString(model);
+ } else if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_USB) {
return virDomainControllerModelUSBTypeFromString(model);
- else if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI)
+ } else if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_PCI) {
return virDomainControllerModelPCITypeFromString(model);
- else if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_IDE)
+ } else if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_IDE) {
return virDomainControllerModelIDETypeFromString(model);
- else if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL)
+ } else if (def->type == VIR_DOMAIN_CONTROLLER_TYPE_VIRTIO_SERIAL) {
return virDomainControllerModelVirtioSerialTypeFromString(model);
+ }
return -1;
}
diff --git a/tests/qemuxml2argvdata/controller-virtio-scsi.xml
b/tests/qemuxml2argvdata/controller-virtio-scsi.xml
index 844e4ad397..861121821c 100644
--- a/tests/qemuxml2argvdata/controller-virtio-scsi.xml
+++ b/tests/qemuxml2argvdata/controller-virtio-scsi.xml
@@ -47,7 +47,7 @@
<controller type='scsi' index='2' model='virtio-scsi'>
<driver cmd_per_lun='50'/>
</controller>
- <controller type='scsi' index='3' model='virtio-scsi'>
+ <controller type='scsi' index='3' model='virtio'>
<driver max_sectors='512'/>
</controller>
<controller type='scsi' index='4' model='virtio-scsi'>
--
2.20.1