Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753159AbdL1CHN (ORCPT ); Wed, 27 Dec 2017 21:07:13 -0500 Received: from mail-ot0-f194.google.com ([74.125.82.194]:34368 "EHLO mail-ot0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753129AbdL1CHL (ORCPT ); Wed, 27 Dec 2017 21:07:11 -0500 X-Google-Smtp-Source: ACJfBov7gluLWcnB/6zy3Yb1h0w/MLR/xTzRbGPfwhE4SqYFYi/wNptxgi8Dh8ajKWLCh2lRT0BIYxZneQHWI/mY8hc= MIME-Version: 1.0 In-Reply-To: <66175f1a-ba57-f08b-5ba7-e4fe42f14f7a@redhat.com> References: <1513860222-40944-1-git-send-email-pbonzini@redhat.com> <1513860222-40944-5-git-send-email-pbonzini@redhat.com> <66175f1a-ba57-f08b-5ba7-e4fe42f14f7a@redhat.com> From: Wanpeng Li Date: Thu, 28 Dec 2017 10:07:10 +0800 Message-ID: Subject: Re: [PATCH 4/4] KVM: nVMX: initialize more non-shadowed fields in prepare_vmcs02_full To: Paolo Bonzini Cc: linux-kernel@vger.kernel.org, kvm Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1384 Lines: 31 2017-12-27 17:54 GMT+08:00 Paolo Bonzini : > On 25/12/2017 04:09, Wanpeng Li wrote: >> 2017-12-21 20:43 GMT+08:00 Paolo Bonzini : >>> These fields are also simple copies of the data in the vmcs12 struct. >>> For some of them, prepare_vmcs02 was skipping the copy when the field >>> was unused. In prepare_vmcs02_full, we copy them always as long as the >>> field exists on the host, because the corresponding execution control >>> might be one of the shadowed fields. >> >> Why we don't need to copy them always before the patchset? > > Before these patches, we only copy them if the corresponding processor > control is enabled. For example, we only copy the EOI exit bitmap if > APICv is enabled by L1. Here we could have > > write to EOI exit bitmap > vmlaunch (calls prepare_vmcs02_full) > enable APICv (but EOI exit bitmap fields are clean) > vmresume (doesn't call prepare_vmcs02_full) > > The vmresume doesn't call prepare_vmcs02_full, so the EOI exit bitmap > must be copied every time prepare_vmcs02_full runs. I see, what about my question to patch 2/4? Writing to vmcs fields always causes vmexit if enable_shadow_vmcs == false and vmx->nested.dirty_vmcs12 is false for "shadow vmcs fields", this can result in prepare_vmcs02_full() is not called even if some processor controls are modified. Regards, Wanpeng Li