cpu: Introduce virCPUValidateFeatures

This new API may be used to check whether all features used in a CPU
definition are valid (e.g., libvirt knows their name, their policy is
supported, etc.). Leaving this API unimplemented in an arch subdriver
means libvirt does not restrict CPU features usable on the associated
architectures.

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
This commit is contained in:
Jiri Denemark 2017-09-14 16:04:13 +02:00
parent 2ba32a86dd
commit 6ef9c202f2
3 changed files with 39 additions and 0 deletions

View File

@ -1076,3 +1076,32 @@ virCPUCopyMigratable(virArch arch,
else
return virCPUDefCopy(cpu);
}
/**
* virCPUValidateFeatures:
*
* @arch: CPU architecture
* @cpu: CPU definition to be checked
*
* Checks whether all CPU features specified in @cpu are valid.
*
* Returns 0 on success (all features are valid), -1 on error.
*/
int
virCPUValidateFeatures(virArch arch,
virCPUDefPtr cpu)
{
struct cpuArchDriver *driver;
VIR_DEBUG("arch=%s, cpu=%p, nfeatures=%zu",
virArchToString(arch), cpu, cpu->nfeatures);
if (!(driver = cpuGetSubDriver(arch)))
return -1;
if (driver->validateFeatures)
return driver->validateFeatures(cpu);
else
return 0;
}

View File

@ -121,6 +121,9 @@ typedef int
typedef virCPUDefPtr
(*virCPUArchCopyMigratable)(virCPUDefPtr cpu);
typedef int
(*virCPUArchValidateFeatures)(virCPUDefPtr cpu);
struct cpuArchDriver {
const char *name;
const virArch *arch;
@ -142,6 +145,7 @@ struct cpuArchDriver {
virCPUArchConvertLegacy convertLegacy;
virCPUArchExpandFeatures expandFeatures;
virCPUArchCopyMigratable copyMigratable;
virCPUArchValidateFeatures validateFeatures;
};
@ -258,6 +262,11 @@ virCPUDefPtr
virCPUCopyMigratable(virArch arch,
virCPUDefPtr cpu);
int
virCPUValidateFeatures(virArch arch,
virCPUDefPtr cpu)
ATTRIBUTE_NONNULL(2);
/* virCPUDataFormat and virCPUDataParse are implemented for unit tests only and
* have no real-life usage
*/

View File

@ -1097,6 +1097,7 @@ virCPUProbeHost;
virCPUTranslate;
virCPUUpdate;
virCPUUpdateLive;
virCPUValidateFeatures;
# cpu/cpu_x86.h