Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S936739AbdLSMiH (ORCPT ); Tue, 19 Dec 2017 07:38:07 -0500 Received: from mx1.redhat.com ([209.132.183.28]:58894 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935074AbdLSMiD (ORCPT ); Tue, 19 Dec 2017 07:38:03 -0500 Subject: Re: [PATCH RFC 2/7] KVM: nVMX: modify vmcs12 fields to match Hyper-V enlightened VMCS To: Vitaly Kuznetsov , Jim Mattson Cc: kvm list , the arch/x86 maintainers , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , "K. Y. Srinivasan" , Haiyang Zhang , Stephen Hemminger , "Michael Kelley (EOSG)" , Mohammed Gamal , Cathy Avery , Bandan Das , Roman Kagan , LKML , devel@linuxdriverproject.org References: <20171218171742.5765-1-vkuznets@redhat.com> <20171218171742.5765-3-vkuznets@redhat.com> <87zi6elxaw.fsf@vitty.brq.redhat.com> From: Paolo Bonzini Message-ID: Date: Tue, 19 Dec 2017 13:37:49 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: <87zi6elxaw.fsf@vitty.brq.redhat.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Tue, 19 Dec 2017 12:38:03 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1866 Lines: 42 On 19/12/2017 13:25, Vitaly Kuznetsov wrote: > >> At this point in time, I don't think you can just blithely change the >> virtual VMCS layout and revision number. Existing VMs using the old >> layout and revision number must continue to work on versions of kvm >> past this point. You could tie the layout and revision number changes >> to KVM_CAP_HYPERV_ENLIGHTENED_VMCS if you like, but kvm must be able >> to continue to service VMs using the previous layout and revision >> number in perpetuity. >> > I see what you mean. In case we need to keep migration of nested > workloads working between KVMs of different versions we can't (ever) > touch vmcs12. Actually we can, for two reasons. First, the active VMCS is stored in host RAM (not in guest RAM). This means there are clear points where to do the translation, namely vmptrld and the (not yet upstream) ioctl to set VMX state. Therefore you only need to keep an (offset, type) map from old to new layout map; at those two points if you detect an old VMCS12_REVISION you copy the fields one by one instead of doing a memcpy. The next vmclear or vmptrld or get-VMX-state ioctl will automatically update to the new VMCS12_REVISION. Of course, this is a one-way street unless you also add support for writing old VMCS12_REVISIONs. But, second, VMX state migration is not upstream yet, so nested hypervisors are currently not migratable: the active VMCS12 state will not be migrated at all! So in upstream KVM we wouldn't even need to upgrade the VMCS12_REVISION to make changes to vmcs12. That said... > The way to go in this case, I think, is to create a completely separate > enlightened_vmcs12 struct and use it when appropriate. We can't possibly > support migrating workloads which use enlightened VMCS to an old KVM > which doesn't support it. ... this is probably a good idea as well. Paolo