[PATCH 0/11] Large Page Support for IOMMU-API and KVM

Joerg Roedel
2010-01-28T11:37:51Z

Hi,

here is a patch set which implements support for variable page sizes in the
IOMMU-API and changes the KVM device passthrough code to map the guest physical
memory with the best page sizes.

With this code a guest with 1GB of memory mapped with a 1GB page will not use
4kb PTEs in the IO page table but will map this memory with these page sizes:

512k, 128k, <io hole>, 1M, 2M, 4M, 8M, 16M, 32M, 64M, 128M, 256M and 512M

instead.

This code also changes the AMD IOMMU driver to implement these page sizes in
the IO page tables.
Please review these patches and send me any comments you might have :-)

To test this code some fixes in the AMD IOMMU driver are required which are
currently in the -tip tree and will probably hit upstream soon. If anybody want
to test this code please pull the code from

git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git iommu/largepages

This branch is based on avi/master and contains the fixes and the patches from
this patchset.

Thanks,

Joerg

Diffstat:

arch/x86/include/asm/amd_iommu_types.h | 34 ++++++
arch/x86/kernel/amd_iommu.c | 195 ++++++++++++++++++++------------
arch/x86/kvm/mmu.c | 18 +---
drivers/base/iommu.c | 43 +++++---
drivers/pci/intel-iommu.c | 22 ++--
include/linux/iommu.h | 24 ++--
include/linux/kvm_host.h | 1 +
virt/kvm/iommu.c | 106 ++++++++++++++----
virt/kvm/kvm_main.c | 25 ++++
9 files changed, 323 insertions(+), 145 deletions(-)

Shortlog:

Joerg Roedel (11):
iommu-api: Rename ->{un}map function pointers to ->{un}map_range
iommu-api: Add iommu_map and iommu_unmap functions
iommu-api: Add ->{un}map callbacks to iommu_ops
VT-d: Change {un}map_range functions to implement {un}map interface
kvm: Introduce kvm_host_page_size
kvm: Change kvm_iommu_map_pages to map large pages
x86/amd-iommu: Make iommu_map_page and alloc_pte aware of page sizes
x86/amd-iommu: Make iommu_unmap_page and fetch_pte aware of page sizes
x86/amd-iommu: Make amd_iommu_iova_to_phys aware of multiple page sizes
x86/amd-iommu: Implement ->{un}map callbacks for iommu-api
iommu-api: Remove iommu_{un}map_range functions