Commit 997301a8 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'iommu-fixes-v4.14-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu

Pull IOMMU fixes from Joerg Roedel:

 - keep an important data structure in the Exynos driver around after
   kernel-init to fix a kernel-oops

 - keep SWIOTLB enabled when SME is active in the AMD IOMMU driver

 - add a missing IOTLB sync to the AMD IOMMU driver

* tag 'iommu-fixes-v4.14-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu:
  iommu/amd: Finish TLB flush in amd_iommu_unmap()
  iommu/exynos: Remove initconst attribute to avoid potential kernel oops
  iommu/amd: Do not disable SWIOTLB if SME is active
parents 0c080cee ce76353f
...@@ -2773,14 +2773,16 @@ int __init amd_iommu_init_api(void) ...@@ -2773,14 +2773,16 @@ int __init amd_iommu_init_api(void)
int __init amd_iommu_init_dma_ops(void) int __init amd_iommu_init_dma_ops(void)
{ {
swiotlb = iommu_pass_through ? 1 : 0; swiotlb = (iommu_pass_through || sme_me_mask) ? 1 : 0;
iommu_detected = 1; iommu_detected = 1;
/* /*
* In case we don't initialize SWIOTLB (actually the common case * In case we don't initialize SWIOTLB (actually the common case
* when AMD IOMMU is enabled), make sure there are global * when AMD IOMMU is enabled and SME is not active), make sure there
* dma_ops set as a fall-back for devices not handled by this * are global dma_ops set as a fall-back for devices not handled by
* driver (for example non-PCI devices). * this driver (for example non-PCI devices). When SME is active,
* make sure that swiotlb variable remains set so the global dma_ops
* continue to be SWIOTLB.
*/ */
if (!swiotlb) if (!swiotlb)
dma_ops = &nommu_dma_ops; dma_ops = &nommu_dma_ops;
...@@ -3046,6 +3048,7 @@ static size_t amd_iommu_unmap(struct iommu_domain *dom, unsigned long iova, ...@@ -3046,6 +3048,7 @@ static size_t amd_iommu_unmap(struct iommu_domain *dom, unsigned long iova,
mutex_unlock(&domain->api_lock); mutex_unlock(&domain->api_lock);
domain_flush_tlb_pde(domain); domain_flush_tlb_pde(domain);
domain_flush_complete(domain);
return unmap_size; return unmap_size;
} }
......
...@@ -709,7 +709,7 @@ static const struct dev_pm_ops sysmmu_pm_ops = { ...@@ -709,7 +709,7 @@ static const struct dev_pm_ops sysmmu_pm_ops = {
pm_runtime_force_resume) pm_runtime_force_resume)
}; };
static const struct of_device_id sysmmu_of_match[] __initconst = { static const struct of_device_id sysmmu_of_match[] = {
{ .compatible = "samsung,exynos-sysmmu", }, { .compatible = "samsung,exynos-sysmmu", },
{ }, { },
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment