From: Marc Zyngier <maz@kernel.org>
To: Gavin Shan <gshan@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
kvmarm@lists.cs.columbia.edu,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v4 2/2] kvm/arm64: Try stage2 block mapping for host device MMIO
Date: Thu, 22 Apr 2021 07:51:36 +0100 [thread overview]
Message-ID: <87tunyq0av.wl-maz@kernel.org> (raw)
In-Reply-To: <46606f3e-ef41-6520-6647-88c0f76a83e0@redhat.com>
On Thu, 22 Apr 2021 03:25:23 +0100,
Gavin Shan <gshan@redhat.com> wrote:
>
> Hi Keqian,
>
> On 4/21/21 4:36 PM, Keqian Zhu wrote:
> > On 2021/4/21 15:52, Gavin Shan wrote:
> >> On 4/16/21 12:03 AM, Keqian Zhu wrote:
> >>> The MMIO region of a device maybe huge (GB level), try to use
> >>> block mapping in stage2 to speedup both map and unmap.
> >>>
> >>> Compared to normal memory mapping, we should consider two more
> >>> points when try block mapping for MMIO region:
> >>>
> >>> 1. For normal memory mapping, the PA(host physical address) and
> >>> HVA have same alignment within PUD_SIZE or PMD_SIZE when we use
> >>> the HVA to request hugepage, so we don't need to consider PA
> >>> alignment when verifing block mapping. But for device memory
> >>> mapping, the PA and HVA may have different alignment.
> >>>
> >>> 2. For normal memory mapping, we are sure hugepage size properly
> >>> fit into vma, so we don't check whether the mapping size exceeds
> >>> the boundary of vma. But for device memory mapping, we should pay
> >>> attention to this.
> >>>
> >>> This adds get_vma_page_shift() to get page shift for both normal
> >>> memory and device MMIO region, and check these two points when
> >>> selecting block mapping size for MMIO region.
> >>>
> >>> Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com>
> >>> ---
> >>> arch/arm64/kvm/mmu.c | 61 ++++++++++++++++++++++++++++++++++++--------
> >>> 1 file changed, 51 insertions(+), 10 deletions(-)
> >>>
> >>> diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
> >>> index c59af5ca01b0..5a1cc7751e6d 100644
> >>> --- a/arch/arm64/kvm/mmu.c
> >>> +++ b/arch/arm64/kvm/mmu.c
> >>> @@ -738,6 +738,35 @@ transparent_hugepage_adjust(struct kvm_memory_slot *memslot,
> >>> return PAGE_SIZE;
> >>> }
> >>> +static int get_vma_page_shift(struct vm_area_struct *vma, unsigned long hva)
> >>> +{
> >>> + unsigned long pa;
> >>> +
> >>> + if (is_vm_hugetlb_page(vma) && !(vma->vm_flags & VM_PFNMAP))
> >>> + return huge_page_shift(hstate_vma(vma));
> >>> +
> >>> + if (!(vma->vm_flags & VM_PFNMAP))
> >>> + return PAGE_SHIFT;
> >>> +
> >>> + VM_BUG_ON(is_vm_hugetlb_page(vma));
> >>> +
> >>
> >> I don't understand how VM_PFNMAP is set for hugetlbfs related vma.
> >> I think they are exclusive, meaning the flag is never set for
> >> hugetlbfs vma. If it's true, VM_PFNMAP needn't be checked on hugetlbfs
> >> vma and the VM_BUG_ON() becomes unnecessary.
> > Yes, but we're not sure all drivers follow this rule. Add a BUG_ON() is
> > a way to catch issue.
> >
>
> I think I didn't make things clear. What I meant is VM_PFNMAP can't
> be set for hugetlbfs VMAs. So the checks here can be simplified as
> below if you agree:
>
> if (is_vm_hugetlb_page(vma))
> return huge_page_shift(hstate_vma(vma));
>
> if (!(vma->vm_flags & VM_PFNMAP))
> return PAGE_SHIFT;
>
> VM_BUG_ON(is_vm_hugetlb_page(vma)); /* Can be dropped */
No. If this case happens, I want to see it. I have explicitly asked
for it, and this check stays.
M.
--
Without deviation from the norm, progress is not possible.
_______________________________________________
kvmarm mailing list
kvmarm@lists.cs.columbia.edu
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <maz@kernel.org>
To: Gavin Shan <gshan@redhat.com>
Cc: Keqian Zhu <zhukeqian1@huawei.com>,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org,
kvmarm@lists.cs.columbia.edu, wanghaibin.wang@huawei.com
Subject: Re: [PATCH v4 2/2] kvm/arm64: Try stage2 block mapping for host device MMIO
Date: Thu, 22 Apr 2021 07:51:36 +0100 [thread overview]
Message-ID: <87tunyq0av.wl-maz@kernel.org> (raw)
In-Reply-To: <46606f3e-ef41-6520-6647-88c0f76a83e0@redhat.com>
On Thu, 22 Apr 2021 03:25:23 +0100,
Gavin Shan <gshan@redhat.com> wrote:
>
> Hi Keqian,
>
> On 4/21/21 4:36 PM, Keqian Zhu wrote:
> > On 2021/4/21 15:52, Gavin Shan wrote:
> >> On 4/16/21 12:03 AM, Keqian Zhu wrote:
> >>> The MMIO region of a device maybe huge (GB level), try to use
> >>> block mapping in stage2 to speedup both map and unmap.
> >>>
> >>> Compared to normal memory mapping, we should consider two more
> >>> points when try block mapping for MMIO region:
> >>>
> >>> 1. For normal memory mapping, the PA(host physical address) and
> >>> HVA have same alignment within PUD_SIZE or PMD_SIZE when we use
> >>> the HVA to request hugepage, so we don't need to consider PA
> >>> alignment when verifing block mapping. But for device memory
> >>> mapping, the PA and HVA may have different alignment.
> >>>
> >>> 2. For normal memory mapping, we are sure hugepage size properly
> >>> fit into vma, so we don't check whether the mapping size exceeds
> >>> the boundary of vma. But for device memory mapping, we should pay
> >>> attention to this.
> >>>
> >>> This adds get_vma_page_shift() to get page shift for both normal
> >>> memory and device MMIO region, and check these two points when
> >>> selecting block mapping size for MMIO region.
> >>>
> >>> Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com>
> >>> ---
> >>> arch/arm64/kvm/mmu.c | 61 ++++++++++++++++++++++++++++++++++++--------
> >>> 1 file changed, 51 insertions(+), 10 deletions(-)
> >>>
> >>> diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
> >>> index c59af5ca01b0..5a1cc7751e6d 100644
> >>> --- a/arch/arm64/kvm/mmu.c
> >>> +++ b/arch/arm64/kvm/mmu.c
> >>> @@ -738,6 +738,35 @@ transparent_hugepage_adjust(struct kvm_memory_slot *memslot,
> >>> return PAGE_SIZE;
> >>> }
> >>> +static int get_vma_page_shift(struct vm_area_struct *vma, unsigned long hva)
> >>> +{
> >>> + unsigned long pa;
> >>> +
> >>> + if (is_vm_hugetlb_page(vma) && !(vma->vm_flags & VM_PFNMAP))
> >>> + return huge_page_shift(hstate_vma(vma));
> >>> +
> >>> + if (!(vma->vm_flags & VM_PFNMAP))
> >>> + return PAGE_SHIFT;
> >>> +
> >>> + VM_BUG_ON(is_vm_hugetlb_page(vma));
> >>> +
> >>
> >> I don't understand how VM_PFNMAP is set for hugetlbfs related vma.
> >> I think they are exclusive, meaning the flag is never set for
> >> hugetlbfs vma. If it's true, VM_PFNMAP needn't be checked on hugetlbfs
> >> vma and the VM_BUG_ON() becomes unnecessary.
> > Yes, but we're not sure all drivers follow this rule. Add a BUG_ON() is
> > a way to catch issue.
> >
>
> I think I didn't make things clear. What I meant is VM_PFNMAP can't
> be set for hugetlbfs VMAs. So the checks here can be simplified as
> below if you agree:
>
> if (is_vm_hugetlb_page(vma))
> return huge_page_shift(hstate_vma(vma));
>
> if (!(vma->vm_flags & VM_PFNMAP))
> return PAGE_SHIFT;
>
> VM_BUG_ON(is_vm_hugetlb_page(vma)); /* Can be dropped */
No. If this case happens, I want to see it. I have explicitly asked
for it, and this check stays.
M.
--
Without deviation from the norm, progress is not possible.
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <maz@kernel.org>
To: Gavin Shan <gshan@redhat.com>
Cc: Keqian Zhu <zhukeqian1@huawei.com>,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org,
kvmarm@lists.cs.columbia.edu, wanghaibin.wang@huawei.com
Subject: Re: [PATCH v4 2/2] kvm/arm64: Try stage2 block mapping for host device MMIO
Date: Thu, 22 Apr 2021 07:51:36 +0100 [thread overview]
Message-ID: <87tunyq0av.wl-maz@kernel.org> (raw)
In-Reply-To: <46606f3e-ef41-6520-6647-88c0f76a83e0@redhat.com>
On Thu, 22 Apr 2021 03:25:23 +0100,
Gavin Shan <gshan@redhat.com> wrote:
>
> Hi Keqian,
>
> On 4/21/21 4:36 PM, Keqian Zhu wrote:
> > On 2021/4/21 15:52, Gavin Shan wrote:
> >> On 4/16/21 12:03 AM, Keqian Zhu wrote:
> >>> The MMIO region of a device maybe huge (GB level), try to use
> >>> block mapping in stage2 to speedup both map and unmap.
> >>>
> >>> Compared to normal memory mapping, we should consider two more
> >>> points when try block mapping for MMIO region:
> >>>
> >>> 1. For normal memory mapping, the PA(host physical address) and
> >>> HVA have same alignment within PUD_SIZE or PMD_SIZE when we use
> >>> the HVA to request hugepage, so we don't need to consider PA
> >>> alignment when verifing block mapping. But for device memory
> >>> mapping, the PA and HVA may have different alignment.
> >>>
> >>> 2. For normal memory mapping, we are sure hugepage size properly
> >>> fit into vma, so we don't check whether the mapping size exceeds
> >>> the boundary of vma. But for device memory mapping, we should pay
> >>> attention to this.
> >>>
> >>> This adds get_vma_page_shift() to get page shift for both normal
> >>> memory and device MMIO region, and check these two points when
> >>> selecting block mapping size for MMIO region.
> >>>
> >>> Signed-off-by: Keqian Zhu <zhukeqian1@huawei.com>
> >>> ---
> >>> arch/arm64/kvm/mmu.c | 61 ++++++++++++++++++++++++++++++++++++--------
> >>> 1 file changed, 51 insertions(+), 10 deletions(-)
> >>>
> >>> diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
> >>> index c59af5ca01b0..5a1cc7751e6d 100644
> >>> --- a/arch/arm64/kvm/mmu.c
> >>> +++ b/arch/arm64/kvm/mmu.c
> >>> @@ -738,6 +738,35 @@ transparent_hugepage_adjust(struct kvm_memory_slot *memslot,
> >>> return PAGE_SIZE;
> >>> }
> >>> +static int get_vma_page_shift(struct vm_area_struct *vma, unsigned long hva)
> >>> +{
> >>> + unsigned long pa;
> >>> +
> >>> + if (is_vm_hugetlb_page(vma) && !(vma->vm_flags & VM_PFNMAP))
> >>> + return huge_page_shift(hstate_vma(vma));
> >>> +
> >>> + if (!(vma->vm_flags & VM_PFNMAP))
> >>> + return PAGE_SHIFT;
> >>> +
> >>> + VM_BUG_ON(is_vm_hugetlb_page(vma));
> >>> +
> >>
> >> I don't understand how VM_PFNMAP is set for hugetlbfs related vma.
> >> I think they are exclusive, meaning the flag is never set for
> >> hugetlbfs vma. If it's true, VM_PFNMAP needn't be checked on hugetlbfs
> >> vma and the VM_BUG_ON() becomes unnecessary.
> > Yes, but we're not sure all drivers follow this rule. Add a BUG_ON() is
> > a way to catch issue.
> >
>
> I think I didn't make things clear. What I meant is VM_PFNMAP can't
> be set for hugetlbfs VMAs. So the checks here can be simplified as
> below if you agree:
>
> if (is_vm_hugetlb_page(vma))
> return huge_page_shift(hstate_vma(vma));
>
> if (!(vma->vm_flags & VM_PFNMAP))
> return PAGE_SHIFT;
>
> VM_BUG_ON(is_vm_hugetlb_page(vma)); /* Can be dropped */
No. If this case happens, I want to see it. I have explicitly asked
for it, and this check stays.
M.
--
Without deviation from the norm, progress is not possible.
next prev parent reply other threads:[~2021-04-22 6:51 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-15 14:03 [PATCH v4 0/2] kvm/arm64: Try stage2 block mapping for host device MMIO Keqian Zhu
2021-04-15 14:03 ` Keqian Zhu
2021-04-15 14:03 ` Keqian Zhu
2021-04-15 14:03 ` [PATCH v4 1/2] kvm/arm64: Remove the creation time's mapping of MMIO regions Keqian Zhu
2021-04-15 14:03 ` Keqian Zhu
2021-04-15 14:03 ` Keqian Zhu
2021-04-21 6:38 ` Gavin Shan
2021-04-21 6:38 ` Gavin Shan
2021-04-21 6:38 ` Gavin Shan
2021-04-21 6:28 ` Keqian Zhu
2021-04-21 6:28 ` Keqian Zhu
2021-04-21 6:28 ` Keqian Zhu
2021-04-22 2:12 ` Gavin Shan
2021-04-22 2:12 ` Gavin Shan
2021-04-22 2:12 ` Gavin Shan
2021-04-22 7:41 ` Keqian Zhu
2021-04-22 7:41 ` Keqian Zhu
2021-04-22 7:41 ` Keqian Zhu
2021-04-23 1:35 ` Gavin Shan
2021-04-23 1:35 ` Gavin Shan
2021-04-23 1:35 ` Gavin Shan
2021-04-23 1:36 ` Keqian Zhu
2021-04-23 1:36 ` Keqian Zhu
2021-04-23 1:36 ` Keqian Zhu
2021-04-23 0:36 ` Gavin Shan
2021-04-23 0:36 ` Gavin Shan
2021-04-23 0:36 ` Gavin Shan
2021-04-15 14:03 ` [PATCH v4 2/2] kvm/arm64: Try stage2 block mapping for host device MMIO Keqian Zhu
2021-04-15 14:03 ` Keqian Zhu
2021-04-15 14:03 ` Keqian Zhu
2021-04-15 14:08 ` Keqian Zhu
2021-04-15 14:08 ` Keqian Zhu
2021-04-15 14:08 ` Keqian Zhu
2021-04-16 14:44 ` Marc Zyngier
2021-04-16 14:44 ` Marc Zyngier
2021-04-16 14:44 ` Marc Zyngier
2021-04-17 1:05 ` Keqian Zhu
2021-04-17 1:05 ` Keqian Zhu
2021-04-17 1:05 ` Keqian Zhu
2021-04-21 7:52 ` Gavin Shan
2021-04-21 7:52 ` Gavin Shan
2021-04-21 7:52 ` Gavin Shan
2021-04-21 6:36 ` Keqian Zhu
2021-04-21 6:36 ` Keqian Zhu
2021-04-21 6:36 ` Keqian Zhu
2021-04-22 2:25 ` Gavin Shan
2021-04-22 2:25 ` Gavin Shan
2021-04-22 2:25 ` Gavin Shan
2021-04-22 6:51 ` Marc Zyngier [this message]
2021-04-22 6:51 ` Marc Zyngier
2021-04-22 6:51 ` Marc Zyngier
2021-04-23 0:42 ` Gavin Shan
2021-04-23 0:42 ` Gavin Shan
2021-04-23 0:42 ` Gavin Shan
2021-04-23 0:37 ` Gavin Shan
2021-04-23 0:37 ` Gavin Shan
2021-04-23 0:37 ` Gavin Shan
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=87tunyq0av.wl-maz@kernel.org \
--to=maz@kernel.org \
--cc=gshan@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=kvmarm@lists.cs.columbia.edu \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.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.