From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christoffer Dall Subject: Re: [PATCH 1/2] arm/arm64: kvm: drop inappropriate use of kvm_is_mmio_pfn() Date: Mon, 10 Nov 2014 11:57:04 +0100 Message-ID: <20141110105704.GB7544@cbox> References: <1415608436-5127-1-git-send-email-ard.biesheuvel@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: magnus.karlsson@avagotech.com, pbonzini@redhat.com, m.smarduch@samsung.com, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, marc.zyngier@arm.com To: Ard Biesheuvel Return-path: Received: from mail-lb0-f171.google.com ([209.85.217.171]:65259 "EHLO mail-lb0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751928AbaKJK4y (ORCPT ); Mon, 10 Nov 2014 05:56:54 -0500 Received: by mail-lb0-f171.google.com with SMTP id b6so5527983lbj.2 for ; Mon, 10 Nov 2014 02:56:52 -0800 (PST) Content-Disposition: inline In-Reply-To: <1415608436-5127-1-git-send-email-ard.biesheuvel@linaro.org> Sender: kvm-owner@vger.kernel.org List-ID: On Mon, Nov 10, 2014 at 09:33:55AM +0100, Ard Biesheuvel wrote: > Instead of using kvm_is_mmio_pfn() to decide whether a host region > should be stage 2 mapped with device attributes, add a new static > function kvm_is_device_pfn() that disregards RAM pages with the > reserved bit set, as those should usually not be mapped as device > memory. > > Signed-off-by: Ard Biesheuvel > --- > arch/arm/kvm/mmu.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c > index 57a403a5c22b..b007438242e2 100644 > --- a/arch/arm/kvm/mmu.c > +++ b/arch/arm/kvm/mmu.c > @@ -834,6 +834,11 @@ static bool kvm_is_write_fault(struct kvm_vcpu *vcpu) > return kvm_vcpu_dabt_iswrite(vcpu); > } > > +static bool kvm_is_device_pfn(unsigned long pfn) > +{ > + return !pfn_valid(pfn); > +} So this works for Magnus' use case, because a device tree memreserve results in reserved, but valid, existing pages being backed by a struct page? > + > static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, > struct kvm_memory_slot *memslot, unsigned long hva, > unsigned long fault_status) > @@ -904,7 +909,7 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa, > if (is_error_pfn(pfn)) > return -EFAULT; > > - if (kvm_is_mmio_pfn(pfn)) > + if (kvm_is_device_pfn(pfn)) > mem_type = PAGE_S2_DEVICE; > > spin_lock(&kvm->mmu_lock); > -- > 1.8.3.2 > If my understanding above is correct, then: Acked-by: Christoffer Dall