mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-22 04:25:18 +00:00
conf: ensure only one vgpu has ramfb enabled
Validate the domain configuration to ensure that if there are more than one vgpu assigned to a domain, only one of them has 'ramfb' enabled. This was never a supported configuration. QEMU failed confusingly when attempting to start a domain with this configuration. This change attempts to provide better information about the error. https://bugzilla.redhat.com/show_bug.cgi?id=2079760 Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com> Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
55c3e969cf
commit
728c75b93f
@ -1228,20 +1228,33 @@ virDomainDefDuplicateDiskInfoValidate(const virDomainDef *def)
|
||||
}
|
||||
|
||||
static int
|
||||
virDomainDefDuplicateHostdevInfoValidate(const virDomainDef *def)
|
||||
virDomainDefHostdevValidate(const virDomainDef *def)
|
||||
{
|
||||
size_t i;
|
||||
size_t j;
|
||||
bool ramfbEnabled = false;
|
||||
|
||||
for (i = 0; i < def->nhostdevs; i++) {
|
||||
virDomainHostdevDef *dev = def->hostdevs[i];
|
||||
|
||||
for (j = i + 1; j < def->nhostdevs; j++) {
|
||||
if (virDomainHostdevMatch(def->hostdevs[i],
|
||||
if (virDomainHostdevMatch(dev,
|
||||
def->hostdevs[j])) {
|
||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||
_("Hostdev already exists in the domain configuration"));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
if (dev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV &&
|
||||
dev->source.subsys.u.mdev.ramfb == VIR_TRISTATE_SWITCH_ON) {
|
||||
if (ramfbEnabled) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("Only one vgpu device can have 'ramfb' enabled"));
|
||||
return -1;
|
||||
}
|
||||
ramfbEnabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -1698,7 +1711,7 @@ virDomainDefValidateInternal(const virDomainDef *def,
|
||||
if (virDomainDefDuplicateDiskInfoValidate(def) < 0)
|
||||
return -1;
|
||||
|
||||
if (virDomainDefDuplicateHostdevInfoValidate(def) < 0)
|
||||
if (virDomainDefHostdevValidate(def) < 0)
|
||||
return -1;
|
||||
|
||||
if (virDomainDefDuplicateDriveAddressesValidate(def) < 0)
|
||||
|
@ -0,0 +1 @@
|
||||
unsupported configuration: Only one vgpu device can have 'ramfb' enabled
|
@ -0,0 +1,38 @@
|
||||
<domain type='qemu'>
|
||||
<name>QEMUGuest2</name>
|
||||
<uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
|
||||
<memory unit='KiB'>219136</memory>
|
||||
<currentMemory unit='KiB'>219136</currentMemory>
|
||||
<vcpu placement='static'>1</vcpu>
|
||||
<os>
|
||||
<type arch='x86_64' 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-system-x86_64</emulator>
|
||||
<controller type='usb' index='0'>
|
||||
</controller>
|
||||
<controller type='pci' index='0' model='pci-root'/>
|
||||
<controller type='ide' index='0'>
|
||||
</controller>
|
||||
<graphics type='vnc'/>
|
||||
<hostdev mode='subsystem' type='mdev' model='vfio-pci' display='on' ramfb='on'>
|
||||
<source>
|
||||
<address uuid='53764d0e-85a0-42b4-af5c-2046b460b1dc'/>
|
||||
</source>
|
||||
</hostdev>
|
||||
<hostdev mode='subsystem' type='mdev' model='vfio-pci' display='on' ramfb='on'>
|
||||
<source>
|
||||
<address uuid='53764d0e-85a0-42b4-af5c-2046b460b1dd'/>
|
||||
</source>
|
||||
</hostdev>
|
||||
<video>
|
||||
<model type='qxl' heads='1'/>
|
||||
</video>
|
||||
<memballoon model='none'/>
|
||||
</devices>
|
||||
</domain>
|
@ -1897,6 +1897,7 @@ mymain(void)
|
||||
QEMU_CAPS_DEVICE_VFIO_PCI,
|
||||
QEMU_CAPS_VFIO_PCI_DISPLAY);
|
||||
DO_TEST_CAPS_LATEST("hostdev-mdev-display-ramfb");
|
||||
DO_TEST_CAPS_LATEST_PARSE_ERROR("hostdev-mdev-display-ramfb-multiple");
|
||||
DO_TEST_PARSE_ERROR("hostdev-vfio-zpci-wrong-arch",
|
||||
QEMU_CAPS_DEVICE_VFIO_PCI);
|
||||
DO_TEST("hostdev-vfio-zpci",
|
||||
|
Loading…
x
Reference in New Issue
Block a user