Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752712AbcCYNnJ (ORCPT ); Fri, 25 Mar 2016 09:43:09 -0400 Received: from mga03.intel.com ([134.134.136.65]:50866 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751091AbcCYNnH (ORCPT ); Fri, 25 Mar 2016 09:43:07 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.24,391,1455004800"; d="scan'208";a="675521735" Subject: Re: [PATCH 1/4] KVM: MMU: fix permission_fault() To: Paolo Bonzini References: <1458911978-19430-1-git-send-email-guangrong.xiao@linux.intel.com> <56F53E87.6010304@redhat.com> Cc: gleb@kernel.org, mtosatti@redhat.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org From: Xiao Guangrong Message-ID: <56F54027.3050001@linux.intel.com> Date: Fri, 25 Mar 2016 21:41:59 +0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1 MIME-Version: 1.0 In-Reply-To: <56F53E87.6010304@redhat.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1637 Lines: 46 On 03/25/2016 09:35 PM, Paolo Bonzini wrote: > > > On 25/03/2016 14:19, Xiao Guangrong wrote: >> kvm-unit-tests complained about the PFEC is not set properly, e.g,: >> test pte.rw pte.d pte.nx pde.p pde.rw pde.pse user fetch: FAIL: error code 15 >> expected 5 >> Dump mapping: address: 0x123400000000 >> ------L4: 3e95007 >> ------L3: 3e96007 >> ------L2: 2000083 > > What's the command line for the reproducer? QEMU=/home/eric/qemu/x86_64-softmmu/qemu-system-x86_64 ./x86-run x86/access.flat > >> diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h >> index b70df72..81bffd1 100644 >> --- a/arch/x86/kvm/mmu.h >> +++ b/arch/x86/kvm/mmu.h >> @@ -154,7 +154,7 @@ static inline u8 permission_fault(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, >> unsigned pfec) >> { >> int cpl = kvm_x86_ops->get_cpl(vcpu); >> - unsigned long rflags = kvm_x86_ops->get_rflags(vcpu); >> + unsigned long errcode, rflags = kvm_x86_ops->get_rflags(vcpu); >> >> /* >> * If CPL < 3, SMAP prevention are disabled if EFLAGS.AC = 1. >> @@ -175,7 +175,7 @@ static inline u8 permission_fault(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, >> bool fault = (mmu->permissions[index] >> pte_access) & 1; >> >> WARN_ON(pfec & (PFERR_PK_MASK | PFERR_RSVD_MASK)); >> - pfec |= PFERR_PRESENT_MASK; >> + errcode = PFERR_PRESENT_MASK; > > So is this patch doing the same as "KVM: MMU: precompute page fault > error code"? It was necessary after all. :) Sorry for my mistake... I missed the logic you changed :( I still prefer to calculating the error code on the fault path which is rare, or think a way to encapsulate it to permission_fault()...