aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/amd_iommu_init.c
diff options
context:
space:
mode:
authorJoerg Roedel <joerg.roedel@amd.com>2008-09-04 12:40:05 -0400
committerIngo Molnar <mingo@elte.hu>2008-09-19 06:59:07 -0400
commit1c65577398589bb44ab0980f9b9d30804b48a5db (patch)
tree4688c194c399de3a34769dbf5cd0bb31ab278d99 /arch/x86/kernel/amd_iommu_init.c
parent2842e5bf3115193f05dc9dac20f940e7abf44c1a (diff)
AMD IOMMU: implement lazy IO/TLB flushing
The IO/TLB flushing on every unmaping operation is the most expensive part in AMD IOMMU code and not strictly necessary. It is sufficient to do the flush before any entries are reused. This is patch implements lazy IO/TLB flushing which does exactly this. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/amd_iommu_init.c')
-rw-r--r--arch/x86/kernel/amd_iommu_init.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/arch/x86/kernel/amd_iommu_init.c b/arch/x86/kernel/amd_iommu_init.c
index a69cc0f52042..f2fa8dc81beb 100644
--- a/arch/x86/kernel/amd_iommu_init.c
+++ b/arch/x86/kernel/amd_iommu_init.c
@@ -995,6 +995,11 @@ int __init amd_iommu_init(void)
995 else 995 else
996 printk("disabled\n"); 996 printk("disabled\n");
997 997
998 if (iommu_fullflush)
999 printk(KERN_INFO "AMD IOMMU: IO/TLB flush on unmap enabled\n");
1000 else
1001 printk(KERN_INFO "AMD IOMMU: Lazy IO/TLB flushing enabled\n");
1002
998out: 1003out:
999 return ret; 1004 return ret;
1000 1005
@@ -1057,7 +1062,7 @@ void __init amd_iommu_detect(void)
1057static int __init parse_amd_iommu_options(char *str) 1062static int __init parse_amd_iommu_options(char *str)
1058{ 1063{
1059 for (; *str; ++str) { 1064 for (; *str; ++str) {
1060 if (strcmp(str, "isolate") == 0) 1065 if (strncmp(str, "isolate", 7) == 0)
1061 amd_iommu_isolate = 1; 1066 amd_iommu_isolate = 1;
1062 } 1067 }
1063 1068