
Oops, I started looking at this patch the moment you sent it but got distracted and never finished the review. Sorry about this. On Thu, Feb 19, 2015 at 16:22:38 +0100, Ján Tomko wrote:
Filter out non-migratable features if VIR_CONNECT_BASELINE_CPU_MIGRATABLE was specified. --- v2: use the existing migrate_blocker field This removes the need for patch 1/5. ... diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 45be262..2a568aa 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c ... @@ -1633,6 +1634,21 @@ x86Decode(virCPUDefPtr cpu, goto out; }
+ /* Remove non-migratable features by default
Well, the features are removed on request rather than by default.
+ * Note: this only works as long as no CPU model contains non-migratable + * features directly */ + if (flags & VIR_CONNECT_BASELINE_CPU_MIGRATABLE) { + for (i = 0; i < cpuModel->nfeatures; i++) { + const struct x86_feature *feat; + for (feat = map->migrate_blockers; feat; feat = feat->next) { + if (STREQ(feat->name, cpuModel->features[i].name)) { + VIR_FREE(cpuModel->features[i].name); + VIR_DELETE_ELEMENT_INPLACE(cpuModel->features, i, cpuModel->nfeatures); + } + } + } + } + if (flags & VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES) { if (!(copy = x86DataCopy(cpuData)) || !(features = x86DataFromCPUFeatures(cpuModel, map))) @@ -1915,6 +1931,9 @@ x86Baseline(virCPUDefPtr *cpus, const char *modelName; bool matchingNames = true;
+ virCheckFlags(VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES | + VIR_CONNECT_BASELINE_CPU_MIGRATABLE, NULL); + if (!(map = virCPUx86GetMap())) goto error;
@@ -1996,7 +2015,9 @@ x86Baseline(virCPUDefPtr *cpus, if (vendor && virCPUx86DataAddCPUID(base_model->data, &vendor->cpuid) < 0) goto error;
- if (x86Decode(cpu, base_model->data, models, nmodels, modelName, flags) < 0) + if (x86Decode(cpu, base_model->data, models, nmodels, modelName, + flags & (VIR_CONNECT_BASELINE_CPU_EXPAND_FEATURES | + VIR_CONNECT_BASELINE_CPU_MIGRATABLE)) < 0)
No need to filter the features as x86Baseline does not support any additional feature. Looks like a leftover from v1.
goto error;
if (STREQ_NULLABLE(cpu->model, modelName))
ACK with the nits fixed. Jirka