* [PATCH] arm/arm64: KVM: relax the requirements of VMA alignment for THP
@ 2013-12-13 16:56 Marc Zyngier
2013-12-13 17:20 ` Christoffer Dall
0 siblings, 1 reply; 3+ messages in thread
From: Marc Zyngier @ 2013-12-13 16:56 UTC (permalink / raw)
To: linux-arm-kernel
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.
It can also choose to place this memslot at whatever alignment it
wants in the IPA space. In the end, what matters is the relative
alignment of the user space and IPA mappings with respect to a
2M page. They absolutely must be the same if you want to use THP.
Cc: Christoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
---
arch/arm/kvm/mmu.c | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)
diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
index 5809069..9cad7a9 100644
--- a/arch/arm/kvm/mmu.c
+++ b/arch/arm/kvm/mmu.c
@@ -667,14 +667,16 @@ 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
- * 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.
+ * Pages belonging to memslots that don't have the same
+ * alignment for userspace and IPA 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) !=
+ ((memslot->base_gfn << PAGE_SHIFT) & ~PMD_MASK))
force_pte = true;
}
up_read(¤t->mm->mmap_sem);
--
1.8.2.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH] arm/arm64: KVM: relax the requirements of VMA alignment for THP
2013-12-13 16:56 [PATCH] arm/arm64: KVM: relax the requirements of VMA alignment for THP Marc Zyngier
@ 2013-12-13 17:20 ` Christoffer Dall
2013-12-13 17:27 ` Marc Zyngier
0 siblings, 1 reply; 3+ messages in thread
From: Christoffer Dall @ 2013-12-13 17:20 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, Dec 13, 2013 at 04:56:06PM +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.
>
> It can also choose to place this memslot at whatever alignment it
> wants in the IPA space. In the end, what matters is the relative
> alignment of the user space and IPA mappings with respect to a
> 2M page. They absolutely must be the same if you want to use THP.
Looks good to me:
Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
>
> Cc: Christoffer Dall <christoffer.dall@linaro.org>
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
> ---
> arch/arm/kvm/mmu.c | 16 +++++++++-------
> 1 file changed, 9 insertions(+), 7 deletions(-)
>
> diff --git a/arch/arm/kvm/mmu.c b/arch/arm/kvm/mmu.c
> index 5809069..9cad7a9 100644
> --- a/arch/arm/kvm/mmu.c
> +++ b/arch/arm/kvm/mmu.c
> @@ -667,14 +667,16 @@ 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
> - * 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.
> + * Pages belonging to memslots that don't have the same
> + * alignment for userspace and IPA 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) !=
> + ((memslot->base_gfn << PAGE_SHIFT) & ~PMD_MASK))
> force_pte = true;
> }
> up_read(¤t->mm->mmap_sem);
> --
> 1.8.2.3
>
>
--
Christoffer
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH] arm/arm64: KVM: relax the requirements of VMA alignment for THP
2013-12-13 17:20 ` Christoffer Dall
@ 2013-12-13 17:27 ` Marc Zyngier
0 siblings, 0 replies; 3+ messages in thread
From: Marc Zyngier @ 2013-12-13 17:27 UTC (permalink / raw)
To: linux-arm-kernel
On 13/12/13 17:20, Christoffer Dall wrote:
> On Fri, Dec 13, 2013 at 04:56:06PM +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.
>>
>> It can also choose to place this memslot at whatever alignment it
>> wants in the IPA space. In the end, what matters is the relative
>> alignment of the user space and IPA mappings with respect to a
>> 2M page. They absolutely must be the same if you want to use THP.
>
> Looks good to me:
>
> Acked-by: Christoffer Dall <christoffer.dall@linaro.org>
Thanks for the review!
M.
--
Jazz is not dead. It just smells funny...
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2013-12-13 17:27 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-13 16:56 [PATCH] arm/arm64: KVM: relax the requirements of VMA alignment for THP Marc Zyngier
2013-12-13 17:20 ` Christoffer Dall
2013-12-13 17:27 ` Marc Zyngier
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).