lkml.org 
[lkml]   [2019]   [Aug]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v8 5/7] iommu/vt-d: Don't switch off swiotlb if bounce page is used
    Date
    The bounce page implementation depends on swiotlb. Hence, don't
    switch off swiotlb if the system has untrusted devices or could
    potentially be hot-added with any untrusted devices.

    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>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    ---
    drivers/iommu/Kconfig | 1 +
    drivers/iommu/intel-iommu.c | 32 +++++++++++++++++---------------
    2 files changed, 18 insertions(+), 15 deletions(-)

    diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
    index e15cdcd8cb3c..a4ddeade8ac4 100644
    --- a/drivers/iommu/Kconfig
    +++ b/drivers/iommu/Kconfig
    @@ -182,6 +182,7 @@ config INTEL_IOMMU
    select IOMMU_IOVA
    select NEED_DMA_MAP_STATE
    select DMAR_TABLE
    + select SWIOTLB
    help
    DMA remapping (DMAR) devices support enables independent address
    translations for Direct Memory Access (DMA) from devices.
    diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
    index fee5dff16e95..eb2a13e39eca 100644
    --- a/drivers/iommu/intel-iommu.c
    +++ b/drivers/iommu/intel-iommu.c
    @@ -4575,22 +4575,20 @@ const struct attribute_group *intel_iommu_groups[] = {
    NULL,
    };

    -static int __init platform_optin_force_iommu(void)
    +static inline bool has_untrusted_dev(void)
    {
    struct pci_dev *pdev = NULL;
    - bool has_untrusted_dev = false;

    - if (!dmar_platform_optin() || no_platform_optin)
    - return 0;
    + for_each_pci_dev(pdev)
    + if (pdev->untrusted)
    + return true;

    - for_each_pci_dev(pdev) {
    - if (pdev->untrusted) {
    - has_untrusted_dev = true;
    - break;
    - }
    - }
    + return false;
    +}

    - if (!has_untrusted_dev)
    +static int __init platform_optin_force_iommu(void)
    +{
    + if (!dmar_platform_optin() || no_platform_optin || !has_untrusted_dev())
    return 0;

    if (no_iommu || dmar_disabled)
    @@ -4604,9 +4602,6 @@ static int __init platform_optin_force_iommu(void)
    iommu_identity_mapping |= IDENTMAP_ALL;

    dmar_disabled = 0;
    -#if defined(CONFIG_X86) && defined(CONFIG_SWIOTLB)
    - swiotlb = 0;
    -#endif
    no_iommu = 0;

    return 1;
    @@ -4746,7 +4741,14 @@ int __init intel_iommu_init(void)
    up_write(&dmar_global_lock);

    #if defined(CONFIG_X86) && defined(CONFIG_SWIOTLB)
    - swiotlb = 0;
    + /*
    + * If the system has no untrusted device or the user has decided
    + * to disable the bounce page mechanisms, we don't need swiotlb.
    + * Mark this and the pre-allocated bounce pages will be released
    + * later.
    + */
    + if (!has_untrusted_dev() || intel_no_bounce)
    + swiotlb = 0;
    #endif
    dma_ops = &intel_dma_ops;

    --
    2.17.1
    \
     
     \ /
      Last update: 2019-08-30 09:19    [W:4.128 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site