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 <guangrong.x...@linux.intel.com> >>> --- >>> 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 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/