[PATCH v4 6/7] drm/amdgpu: Skip dma map resource for null RDMA device
Christian König
christian.koenig at amd.com
Tue Apr 23 13:32:29 UTC 2024
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.
Regards,
Christian.
>
> Signed-off-by: Philip Yang <Philip.Yang at amd.com>
> ---
> 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);
> }
More information about the amd-gfx
mailing list