(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 <code>lspci</code> or
- with <code>virsh
- nodedev-list</code>. <a href="#elementsAddress">See above</a> for
+ with <code>virsh nodedev-list</code>. For SCSI devices a 'drive'
+ address type must be used. <a href="#elementsAddress">See above</a> for
more details on the address element.</dd>
<dt><code>driver</code></dt>
<dd>
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;
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;
}
}
static virDomainHostdevDefPtr
-virDomainHostdevDefParseXML(virDomainXMLOptionPtr xmlopt,
- const virDomainDef *vmdef,
+virDomainHostdevDefParseXML(virDomainXMLOptionPtr xmlopt ATTRIBUTE_UNUSED,
+ const virDomainDef *vmdef ATTRIBUTE_UNUSED,
xmlNodePtr node,
xmlXPathContextPtr ctxt,
virHashTablePtr bootHash,
}
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;
}
}
def->hostdevs[def->nhostdevs++] = hostdev;
-
- if (virDomainDefMaybeAddHostdevSCSIcontroller(def) < 0)
- goto error;
}
VIR_FREE(nodes);