From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paolo Bonzini Subject: Re: [PATCH v3 01/10] KVM: MMU: fix decoding cache type from MTRR Date: Mon, 13 Jul 2015 09:32:06 +0200 Message-ID: <55A36976.6090807@redhat.com> References: <1431499348-25188-1-git-send-email-guangrong.xiao@linux.intel.com> <1431499348-25188-2-git-send-email-guangrong.xiao@linux.intel.com> <1436722432.1391.347.camel@redhat.com> <55A2B8F7.1050805@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: gleb@kernel.org, mtosatti@redhat.com, kvm@vger.kernel.org, linux-kernel@vger.kernel.org To: Xiao Guangrong , Alex Williamson Return-path: In-Reply-To: <55A2B8F7.1050805@linux.intel.com> Sender: linux-kernel-owner@vger.kernel.org List-Id: kvm.vger.kernel.org On 12/07/2015 20:59, Xiao Guangrong wrote: > > > On 07/13/2015 01:33 AM, Alex Williamson wrote: >> On Wed, 2015-05-13 at 14:42 +0800, Xiao Guangrong wrote: >>> There are some bugs in current get_mtrr_type(); >>> 1: bit 1 of mtrr_state->enabled is corresponding bit 11 of >>> IA32_MTRR_DEF_TYPE MSR which completely control MTRR's enablement >>> that means other bits are ignored if it is cleared >>> >>> 2: the fixed MTRR ranges are controlled by bit 0 of >>> mtrr_state->enabled (bit 10 of IA32_MTRR_DEF_TYPE) >>> >>> 3: if MTRR is disabled, UC is applied to all of physical memory rather >>> than mtrr_state->def_type >>> >>> Signed-off-by: Xiao Guangrong >>> --- >>> arch/x86/kvm/mmu.c | 14 ++++++-------- >>> 1 file changed, 6 insertions(+), 8 deletions(-) >> >> >> I'm seeing a significant regression in boot performance on Intel >> hardware with assigned devices that bisects back to this patch. There's >> a long delay with Seabios between the version splash and execution of >> option ROMs, and a _very_ long delay with OVMF before the display is >> initialized. The delay is long enough that users are reporting their >> previously working VM is hung with 100% CPU usage on v4.2-rc1. Thanks, >> > > Alex, thanks for your report. I will try to reproduce and fix it asap. The code that Bandan pointed out + /* MTRR is completely disabled, use UC for all of physical memory. */ + if (!(mtrr_state->enabled & 0x2)) + return MTRR_TYPE_UNCACHABLE; actually disappears in commit fa61213746a7 (KVM: MTRR: simplify kvm_mtrr_get_guest_memory_type, 2015-06-15). Should mtrr_default_type actually be something like this: static u8 mtrr_default_type(struct kvm_mtrr *mtrr_state) { if (mtrr_is_enabled(mtrr_state)) return mtrr_state->deftype & IA32_MTRR_DEF_TYPE_TYPE_MASK; else return MTRR_TYPE_UNCACHABLE; } ? Then it's easy to add a quirk that makes the default WRITEBACK until MTRRs are enabled. Paolo