diff options
author | Joerg Roedel <joerg.roedel@amd.com> | 2008-09-04 12:40:05 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-09-19 06:59:07 -0400 |
commit | 1c65577398589bb44ab0980f9b9d30804b48a5db (patch) | |
tree | 4688c194c399de3a34769dbf5cd0bb31ab278d99 /arch/x86/kernel/amd_iommu_init.c | |
parent | 2842e5bf3115193f05dc9dac20f940e7abf44c1a (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.c | 7 |
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 | |||
998 | out: | 1003 | out: |
999 | return ret; | 1004 | return ret; |
1000 | 1005 | ||
@@ -1057,7 +1062,7 @@ void __init amd_iommu_detect(void) | |||
1057 | static int __init parse_amd_iommu_options(char *str) | 1062 | static 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 | ||