
fenghua.yu at intel
Jun 18, 2009, 11:05 AM
Views: 197
Permalink
|
|
[PATCH 1/2] IOMMU Identity Mapping Support: iommu_identity_mapping definition
|
|
IOMMU Identity Mapping Support: iommu_identity_mapping definition Identity mapping for IOMMU defines a single domain to 1:1 map all pci devices to all usable memory. This will reduces map/unmap overhead in DMA API's and improve IOMMU performance. On 10Gb network cards, Netperf shows no performance degradation compared to non-IOMMU performance. This method may lose some of DMA remapping benefits like isolation. The first patch defines iommu_identity_mapping varialbe which controls the identity mapping code and is 0 by default. Signed-off-by: Fenghua Yu <fenghua.yu[at]intel.com> --- Documentation/kernel-parameters.txt | 1 + arch/ia64/include/asm/iommu.h | 2 ++ arch/ia64/kernel/pci-dma.c | 1 + arch/x86/include/asm/iommu.h | 1 + arch/x86/kernel/pci-dma.c | 5 +++++ 5 files changed, 10 insertions(+) diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 4b78797..6b1d7b4 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt @@ -988,6 +988,7 @@ and is between 256 and 4096 characters. It is defined in the file forcesac soft pt [x86, IA64] + identity [x86, IA64] io7= [HW] IO7 for Marvel based alpha systems See comment before marvel_specify_io7 in diff --git a/arch/ia64/include/asm/iommu.h b/arch/ia64/include/asm/iommu.h index 745e095..cc6d59f 100644 --- a/arch/ia64/include/asm/iommu.h +++ b/arch/ia64/include/asm/iommu.h @@ -11,8 +11,10 @@ extern int force_iommu, no_iommu; extern int iommu_detected; #ifdef CONFIG_DMAR extern int iommu_pass_through; +extern int iommu_identity_mapping; #else #define iommu_pass_through (0) +#define iommu_identity_mapping (0) #endif extern void iommu_dma_init(void); extern void machvec_init(const char *name); diff --git a/arch/ia64/kernel/pci-dma.c b/arch/ia64/kernel/pci-dma.c index 0569596..15b8555 100644 --- a/arch/ia64/kernel/pci-dma.c +++ b/arch/ia64/kernel/pci-dma.c @@ -33,6 +33,7 @@ int force_iommu __read_mostly; #endif int iommu_pass_through; +int iommu_identity_mapping; /* Dummy device used for NULL arguments (normally ISA). Better would be probably a smaller DMA mask, but this is bug-to-bug compatible diff --git a/arch/x86/include/asm/iommu.h b/arch/x86/include/asm/iommu.h index fd6d21b..d2aee4a 100644 --- a/arch/x86/include/asm/iommu.h +++ b/arch/x86/include/asm/iommu.h @@ -7,6 +7,7 @@ extern struct dma_map_ops nommu_dma_ops; extern int force_iommu, no_iommu; extern int iommu_detected; extern int iommu_pass_through; +extern int iommu_identity_mapping; /* 10 seconds */ #define DMAR_OPERATION_TIMEOUT ((cycles_t) tsc_khz*10*1000) diff --git a/arch/x86/kernel/pci-dma.c b/arch/x86/kernel/pci-dma.c index 049005e..489179a 100644 --- a/arch/x86/kernel/pci-dma.c +++ b/arch/x86/kernel/pci-dma.c @@ -33,6 +33,7 @@ int no_iommu __read_mostly; int iommu_detected __read_mostly = 0; int iommu_pass_through; +int iommu_identity_mapping; dma_addr_t bad_dma_address __read_mostly = 0; EXPORT_SYMBOL(bad_dma_address); @@ -208,6 +209,10 @@ static __init int iommu_setup(char *p) forbid_dac = -1; return 1; } + if (!strncmp(p, "identity", 8)) { + iommu_identity_mapping = 1; + return 1; + } #ifdef CONFIG_SWIOTLB if (!strncmp(p, "soft", 4)) swiotlb = 1; -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo[at]vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|