Han, Weidong wrote:
Don't need to map mmio pages for iommu. When find mmio pages in kvm_iommu_map_pages(), don't map them, and shouldn't return error due to it's not an error. If return error (such as -EINVAL), device assigment will fail.
I don't understand. Why don't we need to map mmio pages? We certainly don't want them emulated.
@@ -36,14 +36,13 @@ int kvm_iommu_map_pages(struct kvm *kvm, { gfn_t gfn = base_gfn; pfn_t pfn; - int i, r; + int i, r = 0; struct dmar_domain *domain = kvm->arch.intel_iommu_domain;/* check if iommu exists and in use */if (!domain) return 0;- r = -EINVAL;for (i = 0; i < npages; i++) { /* check if already mapped */ pfn = (pfn_t)intel_iommu_iova_to_pfn(domain, @@ -60,13 +59,14 @@ int kvm_iommu_map_pages(struct kvm *kvm, DMA_PTE_READ | DMA_PTE_WRITE); if (r) { - printk(KERN_DEBUG "kvm_iommu_map_pages:" + printk(KERN_ERR "kvm_iommu_map_pages:" "iommu failed to map pfn=%lx\n", pfn); goto unmap_pages; } } else { - printk(KERN_DEBUG "kvm_iommu_map_page:" - "invalid pfn=%lx\n", pfn); + printk(KERN_DEBUG "kvm_iommu_map_pages:" + "invalid pfn=%lx, iommu needn't map " + "MMIO pages!\n", pfn); goto unmap_pages; }
If a slot has a mix of mmio and non-mmio pages, you will unmap the non-mmio pages, yet return no error.
-- error compiling committee.c: too many arguments to function -- 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
