Hi Paolo, Something bad happened to this patch. This is the version I provided Tested-by for: On Thu, 2015-07-16 at 03:25 +0800, Xiao Guangrong wrote: > From: Xiao Guangrong <guangrong.xiao@xxxxxxxxx> > > kvm_mtrr_get_guest_memory_type never returns -1 which is implied > in the current code since if @type = -1 (means no MTRR contains the > range), iter.partial_map must be true > > Simplify the code to indicate this fact > > Signed-off-by: Xiao Guangrong <guangrong.xiao@xxxxxxxxx> > --- > arch/x86/kvm/mtrr.c | 19 ++++++++++--------- > 1 file changed, 10 insertions(+), 9 deletions(-) > > diff --git a/arch/x86/kvm/mtrr.c b/arch/x86/kvm/mtrr.c > index e275013..9e8bf13 100644 > --- a/arch/x86/kvm/mtrr.c > +++ b/arch/x86/kvm/mtrr.c > @@ -672,15 +672,16 @@ u8 kvm_mtrr_get_guest_memory_type(struct kvm_vcpu *vcpu, gfn_t gfn) > if (iter.mtrr_disabled) > return mtrr_disabled_type(); > > - /* It is not covered by MTRRs. */ > - if (iter.partial_map) { > - /* > - * We just check one page, partially covered by MTRRs is > - * impossible. > - */ > - WARN_ON(type != -1); > - type = mtrr_default_type(mtrr_state); > - } > + /* not contained in any MTRRs. */ > + if (type == -1) > + return mtrr_default_type(mtrr_state); > + > + /* > + * We just check one page, partially covered by MTRRs is > + * impossible. > + */ > + WARN_ON(iter.partial_map); > + > return type; > } > EXPORT_SYMBOL_GPL(kvm_mtrr_get_guest_memory_type); This is the version that was committed for v4.2-rc4: commit 3e5d2fdceda172554e681b68c853bf5d08205bbf Author: Xiao Guangrong <guangrong.xiao@xxxxxxxxx> Date: Thu Jul 16 03:25:55 2015 +0800 KVM: MTRR: simplify kvm_mtrr_get_guest_memory_type kvm_mtrr_get_guest_memory_type never returns -1 which is implied in the current code since if @type = -1 (means no MTRR contains the range), iter.partial_map must be true Simplify the code to indicate this fact Signed-off-by: Xiao Guangrong <guangrong.xiao@xxxxxxxxx> Tested-by: Alex Williamson <alex.williamson@xxxxxxxxxx> Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> diff --git a/arch/x86/kvm/mtrr.c b/arch/x86/kvm/mtrr.c index e275013..dc0a84a 100644 --- a/arch/x86/kvm/mtrr.c +++ b/arch/x86/kvm/mtrr.c @@ -672,15 +672,16 @@ u8 kvm_mtrr_get_guest_memory_type(struct kvm_vcpu *vcpu, gfn_t gfn) if (iter.mtrr_disabled) return mtrr_disabled_type(); - /* It is not covered by MTRRs. */ - if (iter.partial_map) { - /* - * We just check one page, partially covered by MTRRs is - * impossible. - */ - WARN_ON(type != -1); - type = mtrr_default_type(mtrr_state); - } + /* + * We just check one page, partially covered by MTRRs is + * impossible. + */ + WARN_ON(iter.partial_map); + + /* not contained in any MTRRs. */ + if (type == -1) + return mtrr_default_type(mtrr_state); + return type; } EXPORT_SYMBOL_GPL(kvm_mtrr_get_guest_memory_type); The WARN_ON() now comes before the type == -1 test and I hit that at *very* high frequency when trying to test device assignment. Restoring the ordering to what Xiao originally proposed resolves the problem. Thanks, Alex -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html