summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLu Baolu <baolu.lu@linux.intel.com>2019-09-06 02:14:49 -0400
committerJoerg Roedel <jroedel@suse.de>2019-09-11 06:34:29 -0400
commite5e04d051979dbd636a99099b7a595093c50a4bc (patch)
tree02c641871e285fea720da12bd1420bc865ccae83
parent3fc1ca00653db6371585e3c21c4b873b2f20e60a (diff)
iommu/vt-d: Check whether device requires bounce buffer
This adds a helper to check whether a device needs to use bounce buffer. It also provides a boot time option to disable the bounce buffer. Users can use this to prevent the iommu driver from using the bounce buffer for performance gain. Cc: Ashok Raj <ashok.raj@intel.com> Cc: Jacob Pan <jacob.jun.pan@linux.intel.com> Cc: Kevin Tian <kevin.tian@intel.com> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> Tested-by: Xu Pengfei <pengfei.xu@intel.com> Tested-by: Mika Westerberg <mika.westerberg@intel.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
-rw-r--r--Documentation/admin-guide/kernel-parameters.txt5
-rw-r--r--drivers/iommu/intel-iommu.c7
2 files changed, 12 insertions, 0 deletions
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 47d981a86e2f..aaca73080097 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -1732,6 +1732,11 @@
1732 Note that using this option lowers the security 1732 Note that using this option lowers the security
1733 provided by tboot because it makes the system 1733 provided by tboot because it makes the system
1734 vulnerable to DMA attacks. 1734 vulnerable to DMA attacks.
1735 nobounce [Default off]
1736 Disable bounce buffer for unstrusted devices such as
1737 the Thunderbolt devices. This will treat the untrusted
1738 devices as the trusted ones, hence might expose security
1739 risks of DMA attacks.
1735 1740
1736 intel_idle.max_cstate= [KNL,HW,ACPI,X86] 1741 intel_idle.max_cstate= [KNL,HW,ACPI,X86]
1737 0 disables intel_idle and fall back on acpi_idle. 1742 0 disables intel_idle and fall back on acpi_idle.
diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 12d094d08c0a..ce6baabc9dcc 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -360,6 +360,7 @@ static int dmar_forcedac;
360static int intel_iommu_strict; 360static int intel_iommu_strict;
361static int intel_iommu_superpage = 1; 361static int intel_iommu_superpage = 1;
362static int iommu_identity_mapping; 362static int iommu_identity_mapping;
363static int intel_no_bounce;
363 364
364#define IDENTMAP_ALL 1 365#define IDENTMAP_ALL 1
365#define IDENTMAP_GFX 2 366#define IDENTMAP_GFX 2
@@ -373,6 +374,9 @@ EXPORT_SYMBOL_GPL(intel_iommu_gfx_mapped);
373static DEFINE_SPINLOCK(device_domain_lock); 374static DEFINE_SPINLOCK(device_domain_lock);
374static LIST_HEAD(device_domain_list); 375static LIST_HEAD(device_domain_list);
375 376
377#define device_needs_bounce(d) (!intel_no_bounce && dev_is_pci(d) && \
378 to_pci_dev(d)->untrusted)
379
376/* 380/*
377 * Iterate over elements in device_domain_list and call the specified 381 * Iterate over elements in device_domain_list and call the specified
378 * callback @fn against each element. 382 * callback @fn against each element.
@@ -455,6 +459,9 @@ static int __init intel_iommu_setup(char *str)
455 printk(KERN_INFO 459 printk(KERN_INFO
456 "Intel-IOMMU: not forcing on after tboot. This could expose security risk for tboot\n"); 460 "Intel-IOMMU: not forcing on after tboot. This could expose security risk for tboot\n");
457 intel_iommu_tboot_noforce = 1; 461 intel_iommu_tboot_noforce = 1;
462 } else if (!strncmp(str, "nobounce", 8)) {
463 pr_info("Intel-IOMMU: No bounce buffer. This could expose security risks of DMA attacks\n");
464 intel_no_bounce = 1;
458 } 465 }
459 466
460 str += strcspn(str, ","); 467 str += strcspn(str, ",");