diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index d0c1741050..e78fb26568 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -3355,8 +3355,8 @@
(starting with 0x) or octal (starting with 0) form.
For PCI devices the element carries 4 attributes allowing to designate
the device as can be found with the lspci
or
- with virsh
- nodedev-list
. See above for
+ with virsh nodedev-list
. For SCSI devices a 'drive'
+ address type must be used. See above for
more details on the address element.
driver
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index f0951209d7..78142ce1ac 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -4029,7 +4029,7 @@ static int
virDomainDeviceDefPostParseInternal(virDomainDeviceDefPtr dev,
const virDomainDef *def,
virCapsPtr caps ATTRIBUTE_UNUSED,
- virDomainXMLOptionPtr xmlopt ATTRIBUTE_UNUSED)
+ virDomainXMLOptionPtr xmlopt)
{
if (dev->type == VIR_DOMAIN_DEVICE_CHR) {
virDomainChrDefPtr chr = dev->data.chr;
@@ -4117,6 +4117,18 @@ virDomainDeviceDefPostParseInternal(virDomainDeviceDefPtr dev,
video->vram = VIR_ROUND_UP_POWER_OF_TWO(video->vram);
}
+ if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
+ virDomainHostdevDefPtr hdev = dev->data.hostdev;
+
+ if (hdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
+ hdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI &&
+ hdev->info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
+ virDomainHostdevAssignAddress(xmlopt, def, hdev) < 0) {
+ virReportError(VIR_ERR_XML_ERROR, "%s",
+ _("Cannot assign SCSI host device address"));
+ return -1;
+ }
+ }
return 0;
}
@@ -11887,8 +11899,8 @@ virDomainVideoDefParseXML(xmlNodePtr node,
}
static virDomainHostdevDefPtr
-virDomainHostdevDefParseXML(virDomainXMLOptionPtr xmlopt,
- const virDomainDef *vmdef,
+virDomainHostdevDefParseXML(virDomainXMLOptionPtr xmlopt ATTRIBUTE_UNUSED,
+ const virDomainDef *vmdef ATTRIBUTE_UNUSED,
xmlNodePtr node,
xmlXPathContextPtr ctxt,
virHashTablePtr bootHash,
@@ -11949,11 +11961,11 @@ virDomainHostdevDefParseXML(virDomainXMLOptionPtr xmlopt,
}
break;
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
- if (def->info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
- virDomainHostdevAssignAddress(xmlopt, vmdef, def) < 0) {
-
+ if (def->info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
+ def->info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) {
virReportError(VIR_ERR_XML_ERROR, "%s",
- _("SCSI host devices must have address specified"));
+ _("SCSI host device must use 'drive' "
+ "address type"));
goto error;
}
@@ -15995,9 +16007,6 @@ virDomainDefParseXML(xmlDocPtr xml,
}
def->hostdevs[def->nhostdevs++] = hostdev;
-
- if (virDomainDefMaybeAddHostdevSCSIcontroller(def) < 0)
- goto error;
}
VIR_FREE(nodes);