From: christoffer.dall@linaro.org (Christoffer Dall)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH] arm/arm64: KVM: allow the use of THP on 2MB aligned memslots
Date: Thu, 12 Dec 2013 17:36:21 -0800 [thread overview]
Message-ID: <20131213013621.GS2871@cbox> (raw)
In-Reply-To: <1386859881-13482-1-git-send-email-marc.zyngier@arm.com>
On Thu, Dec 12, 2013 at 02:51:21PM +0000, Marc Zyngier wrote:
> The THP code in KVM/ARM is a bit restrictive in not allowing a THP
> to be used if the VMA is not 2MB aligned. Actually, it is not so much
> the VMA that matters, but the associated memslot:
>
> A process can perfectly mmap a region with no particular alignment
> restriction, and then pass a 2MB aligned address to KVM. In this
> case, KVM will only use this 2MB aligned region, and will ignore
> the range between vma->vm_start and memslot->userspace_addr.
>
> The fix is then to check the alignment of memslot->userspace_addr.
That's more correct, but I'm wondering if it's enough.
What happens if the base_gfn is not aligned to a 2MB region, will we not
be mapping something completely bogus here?
>
> Cc: Christoffer Dall <christoffer.dall@linaro.org>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
> ---
> arch/arm/kvm/mmu.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
> index 5809069..cec641a 100644
> --- a/arch/arm/kvm/mmu.c
> +++ b/arch/arm/kvm/mmu.c
> @@ -667,14 +667,14 @@ static int user_mem_abort(struct kvm_vcpu *vcpu, phys_addr_t fault_ipa,
> gfn = (fault_ipa & PMD_MASK) >> PAGE_SHIFT;
> } else {
> /*
> - * Pages belonging to VMAs not aligned to the PMD mapping
> + * Pages belonging to memslots not aligned to the PMD mapping
> * granularity cannot be mapped using block descriptors even
> * if the pages belong to a THP for the process, because the
> * stage-2 block descriptor will cover more than a single THP
> * and we loose atomicity for unmapping, updates, and splits
> * of the THP or other pages in the stage-2 block range.
> */
> - if (vma->vm_start & ~PMD_MASK)
> + if (memslot->userspace_addr & ~PMD_MASK)
> force_pte = true;
> }
> up_read(¤t->mm->mmap_sem);
> --
> 1.8.2.3
>
>
--
Christoffer
next prev parent reply other threads:[~2013-12-13 1:36 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-12-12 14:51 [RFC PATCH] arm/arm64: KVM: allow the use of THP on 2MB aligned memslots Marc Zyngier
2013-12-13 1:36 ` Christoffer Dall [this message]
2013-12-13 8:34 ` Marc Zyngier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131213013621.GS2871@cbox \
--to=christoffer.dall@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.