dma-direct: add missing set_memory_decrypted() for coherent mapping
authorDavid Rientjes <rientjes@google.com>
Thu, 11 Jun 2020 19:20:32 +0000 (12:20 -0700)
committerChristoph Hellwig <hch@lst.de>
Tue, 23 Jun 2020 12:13:54 +0000 (14:13 +0200)
When a coherent mapping is created in dma_direct_alloc_pages(), it needs
to be decrypted if the device requires unencrypted DMA before returning.

Fixes: 3acac065508f ("dma-mapping: merge the generic remapping helpers into dma-direct")
Signed-off-by: David Rientjes <rientjes@google.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
kernel/dma/direct.c

index 2f69bfd..93f578a 100644 (file)
@@ -195,6 +195,12 @@ void *dma_direct_alloc_pages(struct device *dev, size_t size,
                                __builtin_return_address(0));
                if (!ret)
                        goto out_free_pages;
+               if (force_dma_unencrypted(dev)) {
+                       err = set_memory_decrypted((unsigned long)ret,
+                                                  1 << get_order(size));
+                       if (err)
+                               goto out_free_pages;
+               }
                memset(ret, 0, size);
                goto done;
        }