Messages in this thread Patch in this message | | | Subject | Re: [PATCH v4 5/9] iommu/vt-d: Don't switch off swiotlb if use direct dma | From | Lu Baolu <> | Date | Wed, 12 Jun 2019 10:03:52 +0800 |
| |
Hi,
On 6/10/19 11:54 PM, Konrad Rzeszutek Wilk wrote: > On Mon, Jun 03, 2019 at 09:16:16AM +0800, Lu Baolu wrote: >> The direct dma implementation depends on swiotlb. Hence, don't >> switch of swiotlb since direct dma interfaces are used in this > > s/of/off/
Yes.
> >> driver. > > But I think you really want to leave the code as is but change > the #ifdef to check for IOMMU_BOUNCE_PAGE and not CONFIG_SWIOTLB. > > As one could disable IOMMU_BOUNCE_PAGE.
SWIOTLB is not only used when IOMMU_BOUCE_PAGE is enabled.
Please check this code:
static dma_addr_t intel_map_page(struct device *dev, struct page *page, unsigned long offset, size_t size, enum dma_data_direction dir, unsigned long attrs) { if (iommu_need_mapping(dev)) return __intel_map_single(dev, page_to_phys(page) + offset, size, dir, *dev->dma_mask); return dma_direct_map_page(dev, page, offset, size, dir, attrs); }
The dma_direct_map_page() will eventually call swiotlb_map() if the buffer is beyond the address capability of the device.
Best regards, Baolu
>> >> Cc: Ashok Raj <ashok.raj@intel.com> >> Cc: Jacob Pan <jacob.jun.pan@linux.intel.com> >> Cc: Kevin Tian <kevin.tian@intel.com> >> Cc: Mika Westerberg <mika.westerberg@intel.com> >> Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com> >> --- >> drivers/iommu/intel-iommu.c | 6 ------ >> 1 file changed, 6 deletions(-) >> >> diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c >> index d5a6c8064c56..235837c50719 100644 >> --- a/drivers/iommu/intel-iommu.c >> +++ b/drivers/iommu/intel-iommu.c >> @@ -4625,9 +4625,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; >> @@ -4765,9 +4762,6 @@ int __init intel_iommu_init(void) >> } >> up_write(&dmar_global_lock); >> >> -#if defined(CONFIG_X86) && defined(CONFIG_SWIOTLB) >> - swiotlb = 0; >> -#endif >> dma_ops = &intel_dma_ops; >> >> init_iommu_pm_ops(); >> -- >> 2.17.1 >> >
| |