mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 22:25:25 +00:00
cpu: Introduce cpuModelIsAllowed internal API
The API can be used to check if the model is on the supported models list, which needs to be done in several places.
This commit is contained in:
parent
642261a866
commit
16c6b60cbd
@ -442,3 +442,20 @@ cpuHasFeature(virArch arch,
|
||||
|
||||
return driver->hasFeature(data, feature);
|
||||
}
|
||||
|
||||
bool
|
||||
cpuModelIsAllowed(const char *model,
|
||||
const char **models,
|
||||
unsigned int nmodels)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
if (!models || !nmodels)
|
||||
return true;
|
||||
|
||||
for (i = 0; i < nmodels; i++) {
|
||||
if (models[i] && STREQ(models[i], model))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -163,4 +163,9 @@ cpuHasFeature(virArch arch,
|
||||
const char *feature);
|
||||
|
||||
|
||||
bool
|
||||
cpuModelIsAllowed(const char *model,
|
||||
const char **models,
|
||||
unsigned int nmodels);
|
||||
|
||||
#endif /* __VIR_CPU_H__ */
|
||||
|
@ -123,20 +123,11 @@ genericBaseline(virCPUDefPtr *cpus,
|
||||
unsigned int count;
|
||||
unsigned int i, j;
|
||||
|
||||
if (models) {
|
||||
bool found = false;
|
||||
for (i = 0; i < nmodels; i++) {
|
||||
if (STREQ(cpus[0]->model, models[i])) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("CPU model '%s' is not support by hypervisor"),
|
||||
cpus[0]->model);
|
||||
goto error;
|
||||
}
|
||||
if (!cpuModelIsAllowed(cpus[0]->model, models, nmodels)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
_("CPU model %s is not supported by hypervisor"),
|
||||
cpus[0]->model);
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (VIR_ALLOC(cpu) < 0 ||
|
||||
|
@ -1317,16 +1317,7 @@ x86Decode(virCPUDefPtr cpu,
|
||||
|
||||
candidate = map->models;
|
||||
while (candidate != NULL) {
|
||||
bool allowed = (models == NULL);
|
||||
|
||||
for (i = 0; i < nmodels; i++) {
|
||||
if (models && models[i] && STREQ(models[i], candidate->name)) {
|
||||
allowed = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!allowed) {
|
||||
if (!cpuModelIsAllowed(candidate->name, models, nmodels)) {
|
||||
if (preferred && STREQ(candidate->name, preferred)) {
|
||||
if (cpu->fallback != VIR_CPU_FALLBACK_ALLOW) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
|
||||
|
Loading…
Reference in New Issue
Block a user