Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756554AbcDLOSa (ORCPT ); Tue, 12 Apr 2016 10:18:30 -0400 Received: from mx1.redhat.com ([209.132.183.28]:34084 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756190AbcDLOS1 (ORCPT ); Tue, 12 Apr 2016 10:18:27 -0400 Date: Tue, 12 Apr 2016 16:18:21 +0200 From: Radim =?utf-8?B?S3LEjW3DocWZ?= To: Suravee Suthikulpanit Cc: pbonzini@redhat.com, joro@8bytes.org, bp@alien8.de, gleb@kernel.org, alex.williamson@redhat.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, wei@redhat.com, sherry.hurwitz@amd.com Subject: Re: [PART1 RFC v4 10/11] svm: Do not intercept CR8 when enable AVIC Message-ID: <20160412141820.GB6762@potion.brq.redhat.com> References: <1460017232-17429-1-git-send-email-Suravee.Suthikulpanit@amd.com> <1460017232-17429-11-git-send-email-Suravee.Suthikulpanit@amd.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1460017232-17429-11-git-send-email-Suravee.Suthikulpanit@amd.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1531 Lines: 37 2016-04-07 03:20-0500, Suravee Suthikulpanit: > When enable AVIC: > * Do not intercept CR8 since this should be handled by AVIC HW. > * Also, we don't need to sync cr8/V_TPR and APIC backing page. > > Signed-off-by: Suravee Suthikulpanit > --- > diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c > @@ -4069,7 +4070,8 @@ static void update_cr8_intercept(struct kvm_vcpu *vcpu, int tpr, int irr) > - if (is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK)) > + if ((is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK)) || > + svm_vcpu_avic_enabled(svm)) > @@ -4255,14 +4257,15 @@ static inline void sync_cr8_to_lapic(struct kvm_vcpu *vcpu) > static inline void sync_lapic_to_cr8(struct kvm_vcpu *vcpu) > { > struct vcpu_svm *svm = to_svm(vcpu); > - u64 cr8; > + struct kvm_lapic *apic = vcpu->arch.apic; > > - if (is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK)) > + if (is_guest_mode(vcpu) && (vcpu->arch.hflags & HF_VINTR_MASK) && Should be "||" at the end of line, like above. (Naming this condition would reduce the chance of errors.) > + svm_vcpu_avic_enabled(svm)) > return; > > - cr8 = kvm_get_cr8(vcpu); > svm->vmcb->control.int_ctl &= ~V_TPR_MASK; > - svm->vmcb->control.int_ctl |= cr8 & V_TPR_MASK; > + svm->vmcb->control.int_ctl |= (kvm_apic_get_reg(apic, > + APIC_TASKPRI) >> 4) & V_TPR_MASK; kvm_get_cr8 takes a different path without lapic_in_kernel (when avic cannot be enabled), so the original code was better.