Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -2773,14 +2773,16 @@ int __init amd_iommu_init_api(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;

	/*
	 * In case we don't initialize SWIOTLB (actually the common case
	 * when AMD IOMMU is enabled), make sure there are global
	 * dma_ops set as a fall-back for devices not handled by this
	 * driver (for example non-PCI devices).
	 * when AMD IOMMU is enabled and SME is not active), make sure there
	 * are global dma_ops set as a fall-back for devices not handled by
	 * 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)
		dma_ops = &nommu_dma_ops;
@@ -3046,6 +3048,7 @@ static size_t amd_iommu_unmap(struct iommu_domain *dom, unsigned long iova,
	mutex_unlock(&domain->api_lock);

	domain_flush_tlb_pde(domain);
	domain_flush_complete(domain);

	return unmap_size;
}
+1 −1
Original line number Diff line number Diff line
@@ -709,7 +709,7 @@ static const struct dev_pm_ops sysmmu_pm_ops = {
				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", },
	{ },
};