summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pagano <mpagano@gentoo.org>2018-07-03 09:35:39 -0400
committerMike Pagano <mpagano@gentoo.org>2018-07-03 09:35:39 -0400
commitebd54cc8a3c2fb541c454a7e6a288bf9b27fb03a (patch)
tree97ef059701bdf832345dd88940a9100fd7669018
parentLinux patch 4.17.4 (diff)
downloadlinux-patches-ebd54cc8.tar.gz
linux-patches-ebd54cc8.tar.bz2
linux-patches-ebd54cc8.zip
Removal of redundant patch:1800_iommu-amd-dma-direct-revert.patch4.17-5
-rw-r--r--0000_README4
-rw-r--r--1800_iommu-amd-dma-direct-revert.patch164
2 files changed, 0 insertions, 168 deletions
diff --git a/0000_README b/0000_README
index f45eebec..76ef0960 100644
--- a/0000_README
+++ b/0000_README
@@ -59,10 +59,6 @@ Patch: 1003_linux-4.17.4.patch
From: http://www.kernel.org
Desc: Linux 4.17.4
-Patch: 1800_iommu-amd-dma-direct-revert.patch
-From: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/patch/?id=e16c4790de39dc861b749674c2a9319507f6f64f
-Desc: Revert iommu/amd_iommu: Use CONFIG_DMA_DIRECT_OPS=y and dma_direct_{alloc,free}(). See bug #658538.
-
Patch: 1500_XATTR_USER_PREFIX.patch
From: https://bugs.gentoo.org/show_bug.cgi?id=470644
Desc: Support for namespace user.pax.* on tmpfs.
diff --git a/1800_iommu-amd-dma-direct-revert.patch b/1800_iommu-amd-dma-direct-revert.patch
deleted file mode 100644
index a78fa02f..00000000
--- a/1800_iommu-amd-dma-direct-revert.patch
+++ /dev/null
@@ -1,164 +0,0 @@
-From e16c4790de39dc861b749674c2a9319507f6f64f Mon Sep 17 00:00:00 2001
-From: Linus Torvalds <torvalds@linux-foundation.org>
-Date: Mon, 11 Jun 2018 12:22:12 -0700
-Subject: Revert "iommu/amd_iommu: Use CONFIG_DMA_DIRECT_OPS=y and
- dma_direct_{alloc,free}()"
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This reverts commit b468620f2a1dfdcfddfd6fa54367b8bcc1b51248.
-
-It turns out that this broke drm on AMD platforms. Quoting Gabriel C:
- "I can confirm reverting b468620f2a1dfdcfddfd6fa54367b8bcc1b51248 fixes
- that issue for me.
-
- The GPU is working fine with SME enabled.
-
- Now with working GPU :) I can also confirm performance is back to
- normal without doing any other workarounds"
-
-Christan König analyzed it partially:
- "As far as I analyzed it we now get an -ENOMEM from dma_alloc_attrs()
- in drivers/gpu/drm/ttm/ttm_page_alloc_dma.c when IOMMU is enabled"
-
-and Christoph Hellwig responded:
- "I think the prime issue is that dma_direct_alloc respects the dma
- mask. Which we don't need if actually using the iommu. This would be
- mostly harmless exept for the the SEV bit high in the address that
- makes the checks fail.
-
- For now I'd say revert this commit for 4.17/4.18-rc and I'll look into
- addressing these issues properly"
-
-Reported-and-bisected-by: Gabriel C <nix.or.die@gmail.com>
-Acked-by: Christoph Hellwig <hch@lst.de>
-Cc: Christian König <christian.koenig@amd.com>
-Cc: Michel Dänzer <michel.daenzer@amd.com>
-Cc: Joerg Roedel <jroedel@suse.de>
-Cc: Tom Lendacky <thomas.lendacky@amd.com>
-Cc: Andrew Morton <akpm@linux-foundation.org>
-Cc: stable@kernel.org # v4.17
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
----
- drivers/iommu/Kconfig | 1 -
- drivers/iommu/amd_iommu.c | 68 ++++++++++++++++++++++++++++++++---------------
- 2 files changed, 47 insertions(+), 22 deletions(-)
-
-diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig
-index 8ea77ef..e055d22 100644
---- a/drivers/iommu/Kconfig
-+++ b/drivers/iommu/Kconfig
-@@ -107,7 +107,6 @@ config IOMMU_PGTABLES_L2
- # AMD IOMMU support
- config AMD_IOMMU
- bool "AMD IOMMU support"
-- select DMA_DIRECT_OPS
- select SWIOTLB
- select PCI_MSI
- select PCI_ATS
-diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c
-index 0cea80be..596b95c 100644
---- a/drivers/iommu/amd_iommu.c
-+++ b/drivers/iommu/amd_iommu.c
-@@ -2596,32 +2596,51 @@ static void *alloc_coherent(struct device *dev, size_t size,
- unsigned long attrs)
- {
- u64 dma_mask = dev->coherent_dma_mask;
-- struct protection_domain *domain = get_domain(dev);
-- bool is_direct = false;
-- void *virt_addr;
-+ struct protection_domain *domain;
-+ struct dma_ops_domain *dma_dom;
-+ struct page *page;
-+
-+ domain = get_domain(dev);
-+ if (PTR_ERR(domain) == -EINVAL) {
-+ page = alloc_pages(flag, get_order(size));
-+ *dma_addr = page_to_phys(page);
-+ return page_address(page);
-+ } else if (IS_ERR(domain))
-+ return NULL;
-
-- if (IS_ERR(domain)) {
-- if (PTR_ERR(domain) != -EINVAL)
-+ dma_dom = to_dma_ops_domain(domain);
-+ size = PAGE_ALIGN(size);
-+ dma_mask = dev->coherent_dma_mask;
-+ flag &= ~(__GFP_DMA | __GFP_HIGHMEM | __GFP_DMA32);
-+ flag |= __GFP_ZERO;
-+
-+ page = alloc_pages(flag | __GFP_NOWARN, get_order(size));
-+ if (!page) {
-+ if (!gfpflags_allow_blocking(flag))
- return NULL;
-- is_direct = true;
-- }
-
-- virt_addr = dma_direct_alloc(dev, size, dma_addr, flag, attrs);
-- if (!virt_addr || is_direct)
-- return virt_addr;
-+ page = dma_alloc_from_contiguous(dev, size >> PAGE_SHIFT,
-+ get_order(size), flag);
-+ if (!page)
-+ return NULL;
-+ }
-
- if (!dma_mask)
- dma_mask = *dev->dma_mask;
-
-- *dma_addr = __map_single(dev, to_dma_ops_domain(domain),
-- virt_to_phys(virt_addr), PAGE_ALIGN(size),
-- DMA_BIDIRECTIONAL, dma_mask);
-+ *dma_addr = __map_single(dev, dma_dom, page_to_phys(page),
-+ size, DMA_BIDIRECTIONAL, dma_mask);
-+
- if (*dma_addr == AMD_IOMMU_MAPPING_ERROR)
- goto out_free;
-- return virt_addr;
-+
-+ return page_address(page);
-
- out_free:
-- dma_direct_free(dev, size, virt_addr, *dma_addr, attrs);
-+
-+ if (!dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT))
-+ __free_pages(page, get_order(size));
-+
- return NULL;
- }
-
-@@ -2632,17 +2651,24 @@ static void free_coherent(struct device *dev, size_t size,
- void *virt_addr, dma_addr_t dma_addr,
- unsigned long attrs)
- {
-- struct protection_domain *domain = get_domain(dev);
-+ struct protection_domain *domain;
-+ struct dma_ops_domain *dma_dom;
-+ struct page *page;
-
-+ page = virt_to_page(virt_addr);
- size = PAGE_ALIGN(size);
-
-- if (!IS_ERR(domain)) {
-- struct dma_ops_domain *dma_dom = to_dma_ops_domain(domain);
-+ domain = get_domain(dev);
-+ if (IS_ERR(domain))
-+ goto free_mem;
-
-- __unmap_single(dma_dom, dma_addr, size, DMA_BIDIRECTIONAL);
-- }
-+ dma_dom = to_dma_ops_domain(domain);
-+
-+ __unmap_single(dma_dom, dma_addr, size, DMA_BIDIRECTIONAL);
-
-- dma_direct_free(dev, size, virt_addr, dma_addr, attrs);
-+free_mem:
-+ if (!dma_release_from_contiguous(dev, page, size >> PAGE_SHIFT))
-+ __free_pages(page, get_order(size));
- }
-
- /*
---
-cgit v1.1
-