[PATCH] drm/vmwgfx: Make the driver work without the dummy resources

Christian König christian.koenig at amd.com
Fri Feb 10 06:16:00 UTC 2023


Am 10.02.23 um 03:34 schrieb Zack Rusin:
> From: Zack Rusin <zackr at vmware.com>
>
> In change 180253782038 ("drm/ttm: stop allocating dummy resources during BO creation")
> ttm stopped allocating dummy resources but vmwgfx was never ported to
> handle it. Make the driver treat null resources as initial creation and
> port code to handle null resources in general.
>
> Fixes kernel oops'es on boot with vmwgfx.
>
> Signed-off-by: Zack Rusin <zackr at vmware.com>
> Fixes: 180253782038 ("drm/ttm: stop allocating dummy resources during BO creation")
> Cc: Christian König <christian.koenig at amd.com>
> Cc: Matthew Auld <matthew.auld at intel.com>
> Cc: Nirmoy Das <nirmoy.das at intel.com>
> Cc: Christian Koenig <christian.koenig at amd.com>
> Cc: Huang Rui <ray.huang at amd.com>
> Cc: dri-devel at lists.freedesktop.org

Reviewed-by: Christian König <christian.koenig at amd.com>

Sorry for the noise.

> ---
>   drivers/gpu/drm/vmwgfx/vmwgfx_resource.c   |  3 ++-
>   drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 18 ++++++++++++++----
>   2 files changed, 16 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
> index 54e942df3b8e..71eeabf001c8 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_resource.c
> @@ -837,7 +837,8 @@ void vmw_query_move_notify(struct ttm_buffer_object *bo,
>   	mutex_lock(&dev_priv->binding_mutex);
>   
>   	/* If BO is being moved from MOB to system memory */
> -	if (new_mem->mem_type == TTM_PL_SYSTEM &&
> +	if (old_mem &&
> +	    new_mem->mem_type == TTM_PL_SYSTEM &&
>   	    old_mem->mem_type == VMW_PL_MOB) {
>   		struct vmw_fence_obj *fence;
>   
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> index 4daebc5b9eb4..af8562c95cc3 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> @@ -515,9 +515,13 @@ static int vmw_move(struct ttm_buffer_object *bo,
>   		    struct ttm_resource *new_mem,
>   		    struct ttm_place *hop)
>   {
> -	struct ttm_resource_manager *old_man = ttm_manager_type(bo->bdev, bo->resource->mem_type);
> -	struct ttm_resource_manager *new_man = ttm_manager_type(bo->bdev, new_mem->mem_type);
> -	int ret;
> +	struct ttm_resource_manager *new_man;
> +	struct ttm_resource_manager *old_man = NULL;
> +	int ret = 0;
> +
> +	new_man = ttm_manager_type(bo->bdev, new_mem->mem_type);
> +	if (bo->resource)
> +		old_man = ttm_manager_type(bo->bdev, bo->resource->mem_type);
>   
>   	if (new_man->use_tt && !vmw_memtype_is_system(new_mem->mem_type)) {
>   		ret = vmw_ttm_bind(bo->bdev, bo->ttm, new_mem);
> @@ -525,9 +529,15 @@ static int vmw_move(struct ttm_buffer_object *bo,
>   			return ret;
>   	}
>   
> +	if (!bo->resource || (bo->resource->mem_type == TTM_PL_SYSTEM &&
> +			      bo->ttm == NULL)) {
> +		ttm_bo_move_null(bo, new_mem);
> +		return 0;
> +	}
> +
>   	vmw_move_notify(bo, bo->resource, new_mem);
>   
> -	if (old_man->use_tt && new_man->use_tt) {
> +	if (old_man && old_man->use_tt && new_man->use_tt) {
>   		if (vmw_memtype_is_system(bo->resource->mem_type)) {
>   			ttm_bo_move_null(bo, new_mem);
>   			return 0;



More information about the dri-devel mailing list