Re: [PATCH v4 6/7] drm/amdgpu: Skip dma map resource for null RDMA device

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

 




On 2024-04-23 09:32, Christian König wrote:
Am 23.04.24 um 15:04 schrieb Philip Yang:
To test RDMA using dummy driver on the system without NIC/RDMA
device, the get/put dma pages pass in null device pointer, skip the
dma map/unmap resource and sg table to avoid null pointer access.

Well just to make it clear this patch is really a no-go for upstreaming.

The RDMA code isn't upstream as far as I know and doing this here is really not a good idea even internally.

Right, this change is not needed and not related to upstream, just to minimize the difference with upstream.

I will not upstream this patch.

Regards,

Philip


Regards,
Christian.


Signed-off-by: Philip Yang <Philip.Yang@xxxxxxx>
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 33 +++++++++++---------
  1 file changed, 19 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
index 6c7133bf51d8..101a85263b53 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
@@ -698,12 +698,15 @@ int amdgpu_vram_mgr_alloc_sgt(struct amdgpu_device *adev,
          unsigned long size = min(cursor.size, MAX_SG_SEGMENT_SIZE);
          dma_addr_t addr;
  -        addr = dma_map_resource(dev, phys, size, dir,
-                    DMA_ATTR_SKIP_CPU_SYNC);
-        r = dma_mapping_error(dev, addr);
-        if (r)
-            goto error_unmap;
-
+        if (dev) {
+            addr = dma_map_resource(dev, phys, size, dir,
+                        DMA_ATTR_SKIP_CPU_SYNC);
+            r = dma_mapping_error(dev, addr);
+            if (r)
+                goto error_unmap;
+        } else {
+            addr = phys;
+        }
          sg_set_page(sg, NULL, size, 0);
          sg_dma_address(sg) = addr;
          sg_dma_len(sg) = size;
@@ -717,10 +720,10 @@ int amdgpu_vram_mgr_alloc_sgt(struct amdgpu_device *adev,
      for_each_sgtable_sg((*sgt), sg, i) {
          if (!sg->length)
              continue;
-
-        dma_unmap_resource(dev, sg->dma_address,
-                   sg->length, dir,
-                   DMA_ATTR_SKIP_CPU_SYNC);
+        if (dev)
+            dma_unmap_resource(dev, sg->dma_address,
+                       sg->length, dir,
+                       DMA_ATTR_SKIP_CPU_SYNC);
      }
      sg_free_table(*sgt);
  @@ -745,10 +748,12 @@ void amdgpu_vram_mgr_free_sgt(struct device *dev,
      struct scatterlist *sg;
      int i;
  -    for_each_sgtable_sg(sgt, sg, i)
-        dma_unmap_resource(dev, sg->dma_address,
-                   sg->length, dir,
-                   DMA_ATTR_SKIP_CPU_SYNC);
+    if (dev) {
+        for_each_sgtable_sg(sgt, sg, i)
+            dma_unmap_resource(dev, sg->dma_address,
+                       sg->length, dir,
+                       DMA_ATTR_SKIP_CPU_SYNC);
+    }
      sg_free_table(sgt);
      kfree(sgt);
  }


[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux