提交 16c6b60c 编写于 作者: J Jiri Denemark

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.
上级 642261a8
......@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册