On 09/29/2014 10:27 AM, Ján Tomko wrote: > https://bugzilla.redhat.com/show_bug.cgi?id=1147584 Could this be expanded a bit - so one doesn't have to chase into the bz in order to understand what is/was being fixed? > --- > src/cpu/cpu_x86.c | 14 ++++++-------- > 1 file changed, 6 insertions(+), 8 deletions(-) > > diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c > index a98a847..57f343c 100644 > --- a/src/cpu/cpu_x86.c > +++ b/src/cpu/cpu_x86.c > @@ -2068,7 +2068,8 @@ x86UpdateCustom(virCPUDefPtr guest, > > static int > x86UpdateHostModel(virCPUDefPtr guest, > - const virCPUDef *host) > + const virCPUDef *host, > + bool passthrough) > { > virCPUDefPtr oldguest = NULL; > const struct x86_map *map; > @@ -2076,8 +2077,6 @@ x86UpdateHostModel(virCPUDefPtr guest, > size_t i; > int ret = -1; > > - guest->match = VIR_CPU_MATCH_EXACT; > - > if (!(map = virCPUx86GetMap())) > goto cleanup; > > @@ -2100,8 +2099,7 @@ x86UpdateHostModel(virCPUDefPtr guest, > } > } > } So if I understand correctly the above loop removes not migrate-able features - from the passed in migrated cpu and the loop below is updating features for anything left. So given my question from patch 1/2 - it seems if features weren't allowed for host-passthrough, well then neither of these would be necessary. In any case - even if we added something that removed features, the incoming, saved/restore, etc. guest with host-passthrough could still have it so this would be necessary - which I guess means it's an ACK (typing and thinking). John > - > - for (i = 0; i < oldguest->nfeatures; i++) { > + for (i = 0; !passthrough && i < oldguest->nfeatures; i++) { > if (virCPUDefUpdateFeature(guest, > oldguest->features[i].name, > oldguest->features[i].policy) < 0) > @@ -2125,12 +2123,12 @@ x86Update(virCPUDefPtr guest, > return x86UpdateCustom(guest, host); > > case VIR_CPU_MODE_HOST_MODEL: > - return x86UpdateHostModel(guest, host); > + guest->match = VIR_CPU_MATCH_EXACT; > + return x86UpdateHostModel(guest, host, false); > > case VIR_CPU_MODE_HOST_PASSTHROUGH: > guest->match = VIR_CPU_MATCH_MINIMUM; > - virCPUDefFreeModel(guest); > - return virCPUDefCopyModel(guest, host, true); > + return x86UpdateHostModel(guest, host, true); > > case VIR_CPU_MODE_LAST: > break; > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list