mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-10-05 05:45:46 +00:00
qemu: command: move NVRAM validation to qemu_domain.c
A new function qemuDomainDeviceDefValidateNVRAM() was created to validate the NVRAM in domain define time. Unit test was adjusted to account for the extra QEMU_CAPS_DEVICE_NVRAM required during domain define. Reviewed-by: Cole Robinson <crobinso@redhat.com> Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
This commit is contained in:
parent
62065a6cb5
commit
4fb58a365d
@ -4098,15 +4098,8 @@ qemuBuildNVRAMDevStr(virDomainNVRAMDefPtr dev)
|
|||||||
{
|
{
|
||||||
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
|
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
|
||||||
|
|
||||||
if (dev->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO &&
|
virBufferAsprintf(&buf, "spapr-nvram.reg=0x%llx",
|
||||||
dev->info.addr.spaprvio.has_reg) {
|
dev->info.addr.spaprvio.reg);
|
||||||
virBufferAsprintf(&buf, "spapr-nvram.reg=0x%llx",
|
|
||||||
dev->info.addr.spaprvio.reg);
|
|
||||||
} else {
|
|
||||||
virReportError(VIR_ERR_XML_ERROR, "%s",
|
|
||||||
_("nvram address type must be spaprvio"));
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return virBufferContentAndReset(&buf);
|
return virBufferContentAndReset(&buf);
|
||||||
}
|
}
|
||||||
@ -4114,31 +4107,19 @@ qemuBuildNVRAMDevStr(virDomainNVRAMDefPtr dev)
|
|||||||
|
|
||||||
static int
|
static int
|
||||||
qemuBuildNVRAMCommandLine(virCommandPtr cmd,
|
qemuBuildNVRAMCommandLine(virCommandPtr cmd,
|
||||||
const virDomainDef *def,
|
const virDomainDef *def)
|
||||||
virQEMUCapsPtr qemuCaps)
|
|
||||||
{
|
{
|
||||||
|
g_autofree char *optstr = NULL;
|
||||||
|
|
||||||
if (!def->nvram)
|
if (!def->nvram)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (qemuDomainIsPSeries(def)) {
|
virCommandAddArg(cmd, "-global");
|
||||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVRAM)) {
|
optstr = qemuBuildNVRAMDevStr(def->nvram);
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
if (!optstr)
|
||||||
_("nvram device is not supported by "
|
|
||||||
"this QEMU binary"));
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_autofree char *optstr = NULL;
|
|
||||||
virCommandAddArg(cmd, "-global");
|
|
||||||
optstr = qemuBuildNVRAMDevStr(def->nvram);
|
|
||||||
if (!optstr)
|
|
||||||
return -1;
|
|
||||||
virCommandAddArg(cmd, optstr);
|
|
||||||
} else {
|
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
|
||||||
_("nvram device is only supported for PPC64"));
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
|
virCommandAddArg(cmd, optstr);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -10266,7 +10247,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
|
|||||||
chardevStdioLogd) < 0)
|
chardevStdioLogd) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (qemuBuildNVRAMCommandLine(cmd, def, qemuCaps) < 0)
|
if (qemuBuildNVRAMCommandLine(cmd, def) < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
if (qemuBuildVMCoreInfoCommandLine(cmd, def, qemuCaps) < 0)
|
if (qemuBuildVMCoreInfoCommandLine(cmd, def, qemuCaps) < 0)
|
||||||
|
@ -5312,6 +5312,39 @@ qemuDomainValidateCpuCount(const virDomainDef *def,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
qemuDomainDeviceDefValidateNVRAM(virDomainNVRAMDefPtr nvram,
|
||||||
|
const virDomainDef *def,
|
||||||
|
virQEMUCapsPtr qemuCaps)
|
||||||
|
{
|
||||||
|
if (!nvram)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (qemuDomainIsPSeries(def)) {
|
||||||
|
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_NVRAM)) {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
|
_("nvram device is not supported by "
|
||||||
|
"this QEMU binary"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
|
_("nvram device is only supported for PPC64"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(nvram->info.type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_SPAPRVIO &&
|
||||||
|
nvram->info.addr.spaprvio.has_reg)) {
|
||||||
|
|
||||||
|
virReportError(VIR_ERR_XML_ERROR, "%s",
|
||||||
|
_("nvram address type must be spaprvio"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
qemuDomainDefValidate(const virDomainDef *def,
|
qemuDomainDefValidate(const virDomainDef *def,
|
||||||
void *opaque)
|
void *opaque)
|
||||||
@ -7774,10 +7807,13 @@ qemuDomainDeviceDefValidate(const virDomainDeviceDef *dev,
|
|||||||
ret = qemuDomainDeviceDefValidateFS(dev->data.fs, def, qemuCaps);
|
ret = qemuDomainDeviceDefValidateFS(dev->data.fs, def, qemuCaps);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_DEVICE_NVRAM:
|
||||||
|
ret = qemuDomainDeviceDefValidateNVRAM(dev->data.nvram, def, qemuCaps);
|
||||||
|
break;
|
||||||
|
|
||||||
case VIR_DOMAIN_DEVICE_LEASE:
|
case VIR_DOMAIN_DEVICE_LEASE:
|
||||||
case VIR_DOMAIN_DEVICE_SOUND:
|
case VIR_DOMAIN_DEVICE_SOUND:
|
||||||
case VIR_DOMAIN_DEVICE_HUB:
|
case VIR_DOMAIN_DEVICE_HUB:
|
||||||
case VIR_DOMAIN_DEVICE_NVRAM:
|
|
||||||
case VIR_DOMAIN_DEVICE_SHMEM:
|
case VIR_DOMAIN_DEVICE_SHMEM:
|
||||||
case VIR_DOMAIN_DEVICE_MEMORY:
|
case VIR_DOMAIN_DEVICE_MEMORY:
|
||||||
case VIR_DOMAIN_DEVICE_PANIC:
|
case VIR_DOMAIN_DEVICE_PANIC:
|
||||||
|
@ -562,7 +562,8 @@ mymain(void)
|
|||||||
QEMU_CAPS_DEVICE_VIRTIO_RNG);
|
QEMU_CAPS_DEVICE_VIRTIO_RNG);
|
||||||
|
|
||||||
DO_TEST("pseries-nvram",
|
DO_TEST("pseries-nvram",
|
||||||
QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
|
QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE,
|
||||||
|
QEMU_CAPS_DEVICE_NVRAM);
|
||||||
DO_TEST("pseries-panic-missing",
|
DO_TEST("pseries-panic-missing",
|
||||||
QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
|
QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE);
|
||||||
DO_TEST("pseries-panic-no-address",
|
DO_TEST("pseries-panic-no-address",
|
||||||
|
Loading…
Reference in New Issue
Block a user