
On Mon, Jul 15, 2013 at 18:24:47 +0200, Peter Krempa wrote:
https://bugzilla.redhat.com/show_bug.cgi?id=799354
Until now, the "host-model" cpu mode couldn't be influenced. This patch allows to use the <feature> elements to either enable or disable specific CPU flags. This can be used to force flags that can be emulated even if the host CPU doesn't support them. ... diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index 928a67b..ec99106 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -1739,6 +1739,41 @@ cleanup: return ret; }
+ +static int +x86UpdateHostModel(virCPUDefPtr guest, + const virCPUDefPtr host) +{ + virCPUDefPtr oldguest; + size_t i; + + guest->match = VIR_CPU_MATCH_EXACT; + + /* no updates are required */ + if (guest->nfeatures == 0) { + virCPUDefFreeModel(guest); + return virCPUDefCopyModel(guest, host, true); + } + + /* update the host model according to the desired configuration */ + if (!(oldguest = virCPUDefCopy(guest))) + return -1; + + virCPUDefFreeModel(guest); + if (virCPUDefCopyModel(guest, host, true) < 0) + return -1; + + for (i = 0; i < oldguest->nfeatures; i++) { + if (virCPUDefUpdateFeature(guest, + oldguest->features[i].name, + oldguest->features[i].policy) < 0) + return -1; + } + + return 0; +} + + static int x86Update(virCPUDefPtr guest, const virCPUDefPtr host) @@ -1748,11 +1783,11 @@ x86Update(virCPUDefPtr guest, return x86UpdateCustom(guest, host);
case VIR_CPU_MODE_HOST_MODEL: + return x86UpdateHostModel(guest, host); + +
Too many empty lines :-)
case VIR_CPU_MODE_HOST_PASSTHROUGH: - if (guest->mode == VIR_CPU_MODE_HOST_MODEL) - guest->match = VIR_CPU_MATCH_EXACT; - else - guest->match = VIR_CPU_MATCH_MINIMUM; + guest->match = VIR_CPU_MATCH_MINIMUM; virCPUDefFreeModel(guest); return virCPUDefCopyModel(guest, host, true);
ACK Jirka