for (i = 0; i < old->nmodels; i++) {
if (virDomainCapsCPUModelsAdd(cpuModels,
old->models[i].name, -1,
- old->models[i].usable) < 0)
+ old->models[i].usable,
+ old->models[i].blockers) < 0)
goto error;
}
if (virDomainCapsCPUModelsAdd(cpuModels,
old->models[i].name, -1,
- old->models[i].usable) < 0)
+ old->models[i].usable,
+ old->models[i].blockers) < 0)
goto error;
}
int
virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels,
char **name,
- virDomainCapsCPUUsable usable)
+ virDomainCapsCPUUsable usable,
+ char ***blockers)
{
if (VIR_RESIZE_N(cpuModels->models, cpuModels->nmodels_max,
cpuModels->nmodels, 1) < 0)
cpuModels->models[cpuModels->nmodels].usable = usable;
VIR_STEAL_PTR(cpuModels->models[cpuModels->nmodels].name, *name);
+
+ if (blockers)
+ VIR_STEAL_PTR(cpuModels->models[cpuModels->nmodels].blockers, *blockers);
+
cpuModels->nmodels++;
return 0;
}
virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels,
const char *name,
ssize_t nameLen,
- virDomainCapsCPUUsable usable)
+ virDomainCapsCPUUsable usable,
+ char **blockers)
{
- char *copy = NULL;
+ char *nameCopy = NULL;
+ char **blockersCopy = NULL;
+
+ if (VIR_STRNDUP(nameCopy, name, nameLen) < 0)
+ goto error;
- if (VIR_STRNDUP(copy, name, nameLen) < 0)
+ if (virStringListCopy(&blockersCopy, (const char **)blockers) < 0)
goto error;
- if (virDomainCapsCPUModelsAddSteal(cpuModels, ©, usable) < 0)
+ if (virDomainCapsCPUModelsAddSteal(cpuModels, &nameCopy,
+ usable, &blockersCopy) < 0)
goto error;
return 0;
error:
- VIR_FREE(copy);
+ VIR_FREE(nameCopy);
+ virStringListFree(blockersCopy);
return -1;
}
struct _virDomainCapsCPUModel {
char *name;
virDomainCapsCPUUsable usable;
+ char **blockers; /* NULL-terminated list of usability blockers */
};
typedef struct _virDomainCapsCPUModels virDomainCapsCPUModels;
const char **blacklist);
int virDomainCapsCPUModelsAddSteal(virDomainCapsCPUModelsPtr cpuModels,
char **name,
- virDomainCapsCPUUsable usable);
+ virDomainCapsCPUUsable usable,
+ char ***blockers);
int virDomainCapsCPUModelsAdd(virDomainCapsCPUModelsPtr cpuModels,
const char *name,
ssize_t nameLen,
- virDomainCapsCPUUsable usable);
+ virDomainCapsCPUUsable usable,
+ char **blockers);
# define VIR_DOMAIN_CAPS_ENUM_SET(capsEnum, ...) \
do { \
}
if (virDomainCapsCPUModelsAdd(cpus, p, len,
- VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
+ VIR_DOMCAPS_CPU_USABLE_UNKNOWN, NULL) < 0)
goto error;
} while ((p = next));
continue;
if (virDomainCapsCPUModelsAdd(cpus, p, t - p - 1,
- VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0)
+ VIR_DOMCAPS_CPU_USABLE_UNKNOWN, NULL) < 0)
goto error;
} while ((p = next));
}
for (i = 0; i < count; i++) {
- if (virDomainCapsCPUModelsAdd(cpus, name[i], -1, usable) < 0)
+ if (virDomainCapsCPUModelsAdd(cpus, name[i], -1, usable, NULL) < 0)
return -1;
}
else if (cpus[i]->usable == VIR_TRISTATE_BOOL_NO)
usable = VIR_DOMCAPS_CPU_USABLE_NO;
- if (virDomainCapsCPUModelsAddSteal(models, &cpus[i]->name, usable) < 0)
+ if (virDomainCapsCPUModelsAddSteal(models, &cpus[i]->name, usable,
+ NULL) < 0)
goto cleanup;
}
goto cleanup;
}
- if (virDomainCapsCPUModelsAddSteal(cpus, &str, usable) < 0)
+ if (virDomainCapsCPUModelsAddSteal(cpus, &str, usable, NULL) < 0)
goto cleanup;
}
cpu->hostModel = virCPUDefCopy(&host);
if (!(cpu->custom = virDomainCapsCPUModelsNew(3)) ||
virDomainCapsCPUModelsAdd(cpu->custom, "Model1", -1,
- VIR_DOMCAPS_CPU_USABLE_UNKNOWN) < 0 ||
+ VIR_DOMCAPS_CPU_USABLE_UNKNOWN, NULL) < 0 ||
virDomainCapsCPUModelsAdd(cpu->custom, "Model2", -1,
- VIR_DOMCAPS_CPU_USABLE_NO) < 0 ||
+ VIR_DOMCAPS_CPU_USABLE_NO, NULL) < 0 ||
virDomainCapsCPUModelsAdd(cpu->custom, "Model3", -1,
- VIR_DOMCAPS_CPU_USABLE_YES) < 0)
+ VIR_DOMCAPS_CPU_USABLE_YES, NULL) < 0)
return -1;
disk->supported = true;