Allen,

This patch is for the VT-d support for pci passthrough.
The target of this patch is to avoid adding VT-d mappings for memory
slots that does not have backing pages such as mmio regions.
This is required to support direct mmio for passthrough devices, but is probably recommanded in any case.

Regards,
Ben

From 0c28d1bb1d79049f3ffdf96965829a47eb2e9199 Mon Sep 17 00:00:00 2001
From: Ben-Ami Yassour <[EMAIL PROTECTED]>
Date: Tue, 3 Jun 2008 12:22:17 +0300
Subject: [PATCH] KVM: PCIPT: VT-d: avoid mapping memory slots with no backing 
page

This patch is for the VT-d support for pci passthrough.
The target of this patch is to avoid adding VT-d mappings for memory
slots that does not have backing pages such as mmio regions.

Signed-off-by: Ben-Ami Yassour <[EMAIL PROTECTED]>
---
 arch/x86/kvm/vtd.c |   21 +++++++++++++++------
 1 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/arch/x86/kvm/vtd.c b/arch/x86/kvm/vtd.c
index 92bb95f..d49d855 100644
--- a/arch/x86/kvm/vtd.c
+++ b/arch/x86/kvm/vtd.c
@@ -48,12 +48,21 @@ int kvm_iommu_map_pages(struct kvm *kvm,
        for (i = 0; i < npages; i++) {
                gfn++;
                pfn = gfn_to_pfn(kvm, gfn);
-               rc = kvm_intel_iommu_page_mapping(kvm->arch.domain,
-                       gfn << PAGE_SHIFT, pfn << PAGE_SHIFT, PAGE_SIZE,
-                       DMA_PTE_READ | DMA_PTE_WRITE);
-               if (rc) {
-                       page = gfn_to_page(kvm, gfn);
-                       put_page(page);
+               if (pfn_valid(pfn)) {
+                       rc = kvm_intel_iommu_page_mapping(kvm->arch.domain,
+                                                         gfn << PAGE_SHIFT,
+                                                         pfn << PAGE_SHIFT,
+                                                         PAGE_SIZE,
+                                                         DMA_PTE_READ |
+                                                         DMA_PTE_WRITE);
+                       if (rc) {
+                               page = gfn_to_page(kvm, gfn);
+                               put_page(page);
+                       }
+               } else {
+                       printk(KERN_DEBUG "kvm_iommu_map_page:"
+                              "invalid pfn=%lx\n", pfn);
+                       return 0;
                }
        }
        return 0;
--
1.5.5.1

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to