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:
Jiri Denemark 2012-12-19 12:08:32 +01:00
parent 642261a866
commit 16c6b60cbd
4 changed files with 28 additions and 24 deletions

View File

@ -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;
}

View File

@ -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__ */

View File

@ -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 ||

View File

@ -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,