mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-03 03:25:20 +00:00
conf: Change when virDomainHostdevAssignAddress is called
Rather than calling virDomainHostdevAssignAddress during the parsing of the XML, move the setting of a default hostdev address to domain/ device post processing. Since the parse code no longer generates an address, we can remove the virDomainDefMaybeAddHostdevSCSIcontroller since the call to virDomainHostdevAssignAddress will attempt to add the controllers that were not already defined in the XML. This patch will also enforce that the address type is type 'drive' when a SCSI subsystem <hostdev> element is provided with an <address>. Signed-off-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
parent
0785966d03
commit
0d8b24f6b6
@ -3355,8 +3355,8 @@
|
|||||||
(starting with 0x) or octal (starting with 0) form.
|
(starting with 0x) or octal (starting with 0) form.
|
||||||
For PCI devices the element carries 4 attributes allowing to designate
|
For PCI devices the element carries 4 attributes allowing to designate
|
||||||
the device as can be found with the <code>lspci</code> or
|
the device as can be found with the <code>lspci</code> or
|
||||||
with <code>virsh
|
with <code>virsh nodedev-list</code>. For SCSI devices a 'drive'
|
||||||
nodedev-list</code>. <a href="#elementsAddress">See above</a> for
|
address type must be used. <a href="#elementsAddress">See above</a> for
|
||||||
more details on the address element.</dd>
|
more details on the address element.</dd>
|
||||||
<dt><code>driver</code></dt>
|
<dt><code>driver</code></dt>
|
||||||
<dd>
|
<dd>
|
||||||
|
@ -4029,7 +4029,7 @@ static int
|
|||||||
virDomainDeviceDefPostParseInternal(virDomainDeviceDefPtr dev,
|
virDomainDeviceDefPostParseInternal(virDomainDeviceDefPtr dev,
|
||||||
const virDomainDef *def,
|
const virDomainDef *def,
|
||||||
virCapsPtr caps ATTRIBUTE_UNUSED,
|
virCapsPtr caps ATTRIBUTE_UNUSED,
|
||||||
virDomainXMLOptionPtr xmlopt ATTRIBUTE_UNUSED)
|
virDomainXMLOptionPtr xmlopt)
|
||||||
{
|
{
|
||||||
if (dev->type == VIR_DOMAIN_DEVICE_CHR) {
|
if (dev->type == VIR_DOMAIN_DEVICE_CHR) {
|
||||||
virDomainChrDefPtr chr = dev->data.chr;
|
virDomainChrDefPtr chr = dev->data.chr;
|
||||||
@ -4117,6 +4117,18 @@ virDomainDeviceDefPostParseInternal(virDomainDeviceDefPtr dev,
|
|||||||
video->vram = VIR_ROUND_UP_POWER_OF_TWO(video->vram);
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -11887,8 +11899,8 @@ virDomainVideoDefParseXML(xmlNodePtr node,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static virDomainHostdevDefPtr
|
static virDomainHostdevDefPtr
|
||||||
virDomainHostdevDefParseXML(virDomainXMLOptionPtr xmlopt,
|
virDomainHostdevDefParseXML(virDomainXMLOptionPtr xmlopt ATTRIBUTE_UNUSED,
|
||||||
const virDomainDef *vmdef,
|
const virDomainDef *vmdef ATTRIBUTE_UNUSED,
|
||||||
xmlNodePtr node,
|
xmlNodePtr node,
|
||||||
xmlXPathContextPtr ctxt,
|
xmlXPathContextPtr ctxt,
|
||||||
virHashTablePtr bootHash,
|
virHashTablePtr bootHash,
|
||||||
@ -11949,11 +11961,11 @@ virDomainHostdevDefParseXML(virDomainXMLOptionPtr xmlopt,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
|
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI:
|
||||||
if (def->info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
|
if (def->info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE &&
|
||||||
virDomainHostdevAssignAddress(xmlopt, vmdef, def) < 0) {
|
def->info->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE) {
|
||||||
|
|
||||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||||
_("SCSI host devices must have address specified"));
|
_("SCSI host device must use 'drive' "
|
||||||
|
"address type"));
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -15995,9 +16007,6 @@ virDomainDefParseXML(xmlDocPtr xml,
|
|||||||
}
|
}
|
||||||
|
|
||||||
def->hostdevs[def->nhostdevs++] = hostdev;
|
def->hostdevs[def->nhostdevs++] = hostdev;
|
||||||
|
|
||||||
if (virDomainDefMaybeAddHostdevSCSIcontroller(def) < 0)
|
|
||||||
goto error;
|
|
||||||
}
|
}
|
||||||
VIR_FREE(nodes);
|
VIR_FREE(nodes);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user