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) >
next prev parent 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: linkBe 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.