All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Herongguang (Stephen)" <herongguang.he@huawei.com>
To: <pbonzini@redhat.com>, <rkrcmar@redhat.com>, <kvm@vger.kernel.org>
Cc: <qemu-devel@nongnu.org>, <wangxinxin.wang@huawei.com>
Subject: [PATCH v2] KVM: pci-assign: do not map smm memory slot pages
Date: Mon, 27 Mar 2017 15:21:17 +0800	[thread overview]
Message-ID: <58D8BD6D.8080404@huawei.com> (raw)
In-Reply-To: <20170325111424.21752-1-herongguang.he@huawei.com>

 From f6f0ee6831488bef7af841cb86f3d85a04848fe5 Mon Sep 17 00:00:00 2001
From: herongguang <herongguang.he@huawei.com>
Date: Mon, 27 Mar 2017 15:08:59 +0800
Subject: [PATCH] KVM: pci-assign: do not map smm memory slot pages
  in vt-d page table

or VM memory are not put thus leaked in kvm_iommu_unmap_memslots() when
destroy VM.

This is consistent with current vfio implementation.
---
  virt/kvm/kvm_main.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 482612b..9018d06 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1052,7 +1052,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
  	 * changes) is disallowed above, so any other attribute changes getting
  	 * here can be skipped.
  	 */
-	if ((change == KVM_MR_CREATE) || (change == KVM_MR_MOVE)) {
+	if ((as_id == 0) && ((change == KVM_MR_CREATE) || (change == KVM_MR_MOVE))) {
  		r = kvm_iommu_map_pages(kvm, &new);
  		return r;
  	}
-- 
1.7.12.4

On 2017/3/25 19:14, herongguang wrote:
> or pages are not unmaped and freed
>
> Signed-off-by: herongguang <herongguang.he@huawei.com>
> ---
>   arch/x86/kvm/iommu.c | 6 ++++--
>   1 file changed, 4 insertions(+), 2 deletions(-)
>
> Well, do we should change pci-assign to not map SMM slots instead? Like vfio.
>
> diff --git a/arch/x86/kvm/iommu.c b/arch/x86/kvm/iommu.c
> index b181426..5b931bb 100644
> --- a/arch/x86/kvm/iommu.c
> +++ b/arch/x86/kvm/iommu.c
> @@ -320,15 +320,17 @@ void kvm_iommu_unmap_pages(struct kvm *kvm, struct kvm_memory_slot *slot)
>   static int kvm_iommu_unmap_memslots(struct kvm *kvm)
>   {
>   	int idx;
> -	struct kvm_memslots *slots;
> +	struct kvm_memslots *slots, *smm_slots;
>   	struct kvm_memory_slot *memslot;
>
>   	idx = srcu_read_lock(&kvm->srcu);
>   	slots = kvm_memslots(kvm);
> -
>   	kvm_for_each_memslot(memslot, slots)
>   		kvm_iommu_unmap_pages(kvm, memslot);
>
> +	smm_slots = __kvm_memslots(kvm, 1);
> +	kvm_for_each_memslot(memslot, smm_slots)
> +		kvm_iommu_unmap_pages(kvm, memslot);
>   	srcu_read_unlock(&kvm->srcu, idx);
>
>   	if (kvm->arch.iommu_noncoherent)
>

WARNING: multiple messages have this Message-ID (diff)
From: "Herongguang (Stephen)" <herongguang.he@huawei.com>
To: pbonzini@redhat.com, rkrcmar@redhat.com, kvm@vger.kernel.org
Cc: qemu-devel@nongnu.org, wangxinxin.wang@huawei.com
Subject: [Qemu-devel] [PATCH v2] KVM: pci-assign: do not map smm memory slot pages
Date: Mon, 27 Mar 2017 15:21:17 +0800	[thread overview]
Message-ID: <58D8BD6D.8080404@huawei.com> (raw)
In-Reply-To: <20170325111424.21752-1-herongguang.he@huawei.com>

 From f6f0ee6831488bef7af841cb86f3d85a04848fe5 Mon Sep 17 00:00:00 2001
From: herongguang <herongguang.he@huawei.com>
Date: Mon, 27 Mar 2017 15:08:59 +0800
Subject: [PATCH] KVM: pci-assign: do not map smm memory slot pages
  in vt-d page table

or VM memory are not put thus leaked in kvm_iommu_unmap_memslots() when
destroy VM.

This is consistent with current vfio implementation.
---
  virt/kvm/kvm_main.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 482612b..9018d06 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -1052,7 +1052,7 @@ int __kvm_set_memory_region(struct kvm *kvm,
  	 * changes) is disallowed above, so any other attribute changes getting
  	 * here can be skipped.
  	 */
-	if ((change == KVM_MR_CREATE) || (change == KVM_MR_MOVE)) {
+	if ((as_id == 0) && ((change == KVM_MR_CREATE) || (change == KVM_MR_MOVE))) {
  		r = kvm_iommu_map_pages(kvm, &new);
  		return r;
  	}
-- 
1.7.12.4

On 2017/3/25 19:14, herongguang wrote:
> or pages are not unmaped and freed
>
> Signed-off-by: herongguang <herongguang.he@huawei.com>
> ---
>   arch/x86/kvm/iommu.c | 6 ++++--
>   1 file changed, 4 insertions(+), 2 deletions(-)
>
> Well, do we should change pci-assign to not map SMM slots instead? Like vfio.
>
> diff --git a/arch/x86/kvm/iommu.c b/arch/x86/kvm/iommu.c
> index b181426..5b931bb 100644
> --- a/arch/x86/kvm/iommu.c
> +++ b/arch/x86/kvm/iommu.c
> @@ -320,15 +320,17 @@ void kvm_iommu_unmap_pages(struct kvm *kvm, struct kvm_memory_slot *slot)
>   static int kvm_iommu_unmap_memslots(struct kvm *kvm)
>   {
>   	int idx;
> -	struct kvm_memslots *slots;
> +	struct kvm_memslots *slots, *smm_slots;
>   	struct kvm_memory_slot *memslot;
>
>   	idx = srcu_read_lock(&kvm->srcu);
>   	slots = kvm_memslots(kvm);
> -
>   	kvm_for_each_memslot(memslot, slots)
>   		kvm_iommu_unmap_pages(kvm, memslot);
>
> +	smm_slots = __kvm_memslots(kvm, 1);
> +	kvm_for_each_memslot(memslot, smm_slots)
> +		kvm_iommu_unmap_pages(kvm, memslot);
>   	srcu_read_unlock(&kvm->srcu, idx);
>
>   	if (kvm->arch.iommu_noncoherent)
>

  reply	other threads:[~2017-03-27  7:22 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-25 11:14 [PATCH] KVM: unmap SMM memslots in vt-d table herongguang
2017-03-25 11:14 ` [Qemu-devel] " herongguang
2017-03-27  7:21 ` Herongguang (Stephen) [this message]
2017-03-27  7:21   ` [Qemu-devel] [PATCH v2] KVM: pci-assign: do not map smm memory slot pages Herongguang (Stephen)
2017-03-27 11:53   ` Paolo Bonzini
2017-03-27 11:53     ` [Qemu-devel] " Paolo Bonzini
2017-03-27 12:22   ` Paolo Bonzini
2017-03-27 12:22     ` [Qemu-devel] " Paolo Bonzini
2017-03-27 12:58     ` hrg
2017-03-28  1:08     ` Herongguang (Stephen)
2017-03-28  1:08       ` [Qemu-devel] " Herongguang (Stephen)
2017-03-28  8:09       ` Paolo Bonzini
2017-03-28  8:09         ` [Qemu-devel] " Paolo Bonzini

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=58D8BD6D.8080404@huawei.com \
    --to=herongguang.he@huawei.com \
    --cc=kvm@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rkrcmar@redhat.com \
    --cc=wangxinxin.wang@huawei.com \
    /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.