Message ID | 8d00898f91834454a4daf5c4944ddace9c6866f4.1473975914.git-series.james.hogan@imgtec.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Thu, Sep 15, 2016 at 10:51:27PM +0100, James Hogan wrote:
> commit ba913e4f72fc9cfd03dad968dfb110eb49211d80 upstream.
(...)
Queued for 3.10, thank you James.
Willy
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
On Fri, Sep 16, 2016 at 12:08:29AM +0200, Willy Tarreau wrote: > On Thu, Sep 15, 2016 at 10:51:27PM +0100, James Hogan wrote: > > commit ba913e4f72fc9cfd03dad968dfb110eb49211d80 upstream. > (...) > > Queued for 3.10, thank you James. And 3.18 + 4.1. Thanks James!
On 09/15/2016, 11:51 PM, James Hogan wrote: > commit ba913e4f72fc9cfd03dad968dfb110eb49211d80 upstream. > > When mapping a page into the guest we error check using is_error_pfn(), > however this doesn't detect a value of KVM_PFN_NOSLOT, indicating an > error HVA for the page. This can only happen on MIPS right now due to > unusual memslot management (e.g. being moved / removed / resized), or > with an Enhanced Virtual Memory (EVA) configuration where the default > KVM_HVA_ERR_* and kvm_is_error_hva() definitions are unsuitable (fixed > in a later patch). This case will be treated as a pfn of zero, mapping > the first page of physical memory into the guest. > > It would appear the MIPS KVM port wasn't updated prior to being merged > (in v3.10) to take commit 81c52c56e2b4 ("KVM: do not treat noslot pfn as > a error pfn") into account (merged v3.8), which converted a bunch of > is_error_pfn() calls to is_error_noslot_pfn(). Switch to using > is_error_noslot_pfn() instead to catch this case properly. > > Fixes: 858dd5d45733 ("KVM/MIPS32: MMU/TLB operations for the Guest.") Applied to 3.12, thanks!
diff --git a/arch/mips/kvm/kvm_tlb.c b/arch/mips/kvm/kvm_tlb.c index 8a5a700ad8de..16cac5b9c604 100644 --- a/arch/mips/kvm/kvm_tlb.c +++ b/arch/mips/kvm/kvm_tlb.c @@ -155,7 +155,7 @@ static int kvm_mips_map_page(struct kvm *kvm, gfn_t gfn) srcu_idx = srcu_read_lock(&kvm->srcu); pfn = kvm_mips_gfn_to_pfn(kvm, gfn); - if (kvm_mips_is_error_pfn(pfn)) { + if (is_error_noslot_pfn(pfn)) { kvm_err("Couldn't get pfn for gfn %#" PRIx64 "!\n", gfn); err = -EFAULT; goto out;