[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 6/9] x86: Use physical address for DMA mapping



From: Leon Romanovsky <leonro@xxxxxxxxxx>

Perform mechanical conversion from DMA .map_page to .map_phys.

Signed-off-by: Leon Romanovsky <leonro@xxxxxxxxxx>
---
 arch/x86/kernel/amd_gart_64.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c
index 3485d419c2f5e..f1ffdc0e4a3ab 100644
--- a/arch/x86/kernel/amd_gart_64.c
+++ b/arch/x86/kernel/amd_gart_64.c
@@ -222,13 +222,14 @@ static dma_addr_t dma_map_area(struct device *dev, 
dma_addr_t phys_mem,
 }
 
 /* Map a single area into the IOMMU */
-static dma_addr_t gart_map_page(struct device *dev, struct page *page,
-                               unsigned long offset, size_t size,
-                               enum dma_data_direction dir,
+static dma_addr_t gart_map_phys(struct device *dev, phys_addr_t paddr,
+                               size_t size, enum dma_data_direction dir,
                                unsigned long attrs)
 {
        unsigned long bus;
-       phys_addr_t paddr = page_to_phys(page) + offset;
+
+       if (attrs & DMA_ATTR_MMIO)
+               return DMA_MAPPING_ERROR;
 
        if (!need_iommu(dev, paddr, size))
                return paddr;
@@ -242,7 +243,7 @@ static dma_addr_t gart_map_page(struct device *dev, struct 
page *page,
 /*
  * Free a DMA mapping.
  */
-static void gart_unmap_page(struct device *dev, dma_addr_t dma_addr,
+static void gart_unmap_phys(struct device *dev, dma_addr_t dma_addr,
                            size_t size, enum dma_data_direction dir,
                            unsigned long attrs)
 {
@@ -282,7 +283,7 @@ static void gart_unmap_sg(struct device *dev, struct 
scatterlist *sg, int nents,
        for_each_sg(sg, s, nents, i) {
                if (!s->dma_length || !s->length)
                        break;
-               gart_unmap_page(dev, s->dma_address, s->dma_length, dir, 0);
+               gart_unmap_phys(dev, s->dma_address, s->dma_length, dir, 0);
        }
 }
 
@@ -487,7 +488,7 @@ static void
 gart_free_coherent(struct device *dev, size_t size, void *vaddr,
                   dma_addr_t dma_addr, unsigned long attrs)
 {
-       gart_unmap_page(dev, dma_addr, size, DMA_BIDIRECTIONAL, 0);
+       gart_unmap_phys(dev, dma_addr, size, DMA_BIDIRECTIONAL, 0);
        dma_direct_free(dev, size, vaddr, dma_addr, attrs);
 }
 
@@ -668,8 +669,8 @@ static __init int init_amd_gatt(struct agp_kern_info *info)
 static const struct dma_map_ops gart_dma_ops = {
        .map_sg                         = gart_map_sg,
        .unmap_sg                       = gart_unmap_sg,
-       .map_page                       = gart_map_page,
-       .unmap_page                     = gart_unmap_page,
+       .map_phys                       = gart_map_phys,
+       .unmap_phys                     = gart_unmap_phys,
        .alloc                          = gart_alloc_coherent,
        .free                           = gart_free_coherent,
        .mmap                           = dma_common_mmap,
-- 
2.51.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.