[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