dma-direct: don't call dma_set_decrypted for remapped allocations
authorChristoph Hellwig <hch@lst.de>
Thu, 21 Oct 2021 07:20:39 +0000 (09:20 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Jun 2022 08:23:03 +0000 (10:23 +0200)
[ Upstream commit 5570449b6876f215d49ac4db9ccce6ff7aa1e20a ]

Remapped allocations handle the encrypted bit through the pgprot passed
to vmap, so there is no call dma_set_decrypted.  Note that this case is
currently entirely theoretical as no valid kernel configuration supports
remapped allocations and memory encryption currently.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
kernel/dma/direct.c

index b9513fd..4739646 100644 (file)
@@ -241,8 +241,6 @@ void *dma_direct_alloc(struct device *dev, size_t size,
                                __builtin_return_address(0));
                if (!ret)
                        goto out_free_pages;
-               if (dma_set_decrypted(dev, ret, size))
-                       goto out_free_pages;
                memset(ret, 0, size);
                goto done;
        }
@@ -316,12 +314,13 @@ void dma_direct_free(struct device *dev, size_t size,
            dma_free_from_pool(dev, cpu_addr, PAGE_ALIGN(size)))
                return;
 
-       dma_set_encrypted(dev, cpu_addr, 1 << page_order);
-
-       if (IS_ENABLED(CONFIG_DMA_REMAP) && is_vmalloc_addr(cpu_addr))
+       if (IS_ENABLED(CONFIG_DMA_REMAP) && is_vmalloc_addr(cpu_addr)) {
                vunmap(cpu_addr);
-       else if (IS_ENABLED(CONFIG_ARCH_HAS_DMA_CLEAR_UNCACHED))
-               arch_dma_clear_uncached(cpu_addr, size);
+       } else {
+               if (IS_ENABLED(CONFIG_ARCH_HAS_DMA_CLEAR_UNCACHED))
+                       arch_dma_clear_uncached(cpu_addr, size);
+               dma_set_encrypted(dev, cpu_addr, 1 << page_order);
+       }
 
        __dma_direct_free_pages(dev, dma_direct_to_page(dev, dma_addr), size);
 }