[PATCH] drm/ttm: fix error handling if no BO can be swapped out

Zhang, Morris Shiwu.Zhang at amd.com
Thu Apr 22 08:39:34 UTC 2021


[AMD Official Use Only - Internal Distribution Only]

Hi Chris,

Yes. I'll rework the patch. Thanks for your comments.

--Brs,
Morris Zhang
MLSE Linux  ML SRDC
Ext. 25147

-----Original Message-----
From: Koenig, Christian <Christian.Koenig at amd.com> 
Sent: Wednesday, April 21, 2021 9:34 PM
To: Zhang, Morris <Shiwu.Zhang at amd.com>; dri-devel at lists.freedesktop.org
Subject: Re: [PATCH] drm/ttm: fix error handling if no BO can be swapped out



Am 20.04.21 um 16:32 schrieb Shiwu Zhang:
> In case that all pre-allocated BOs are busy, just continue to populate 
> BOs since likely half of system memory in total is still free.
>
> Signed-off-by: Shiwu Zhang <shiwu.zhang at amd.com>
> ---
>   drivers/gpu/drm/ttm/ttm_device.c | 4 ++--
>   drivers/gpu/drm/ttm/ttm_tt.c     | 2 ++
>   2 files changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_device.c 
> b/drivers/gpu/drm/ttm/ttm_device.c
> index 1f2024164d72..0200709db9be 100644
> --- a/drivers/gpu/drm/ttm/ttm_device.c
> +++ b/drivers/gpu/drm/ttm/ttm_device.c
> @@ -133,7 +133,7 @@ int ttm_device_swapout(struct ttm_device *bdev, struct ttm_operation_ctx *ctx,
>   	struct ttm_resource_manager *man;
>   	struct ttm_buffer_object *bo;
>   	unsigned i, j;
> -	int ret;
> +	int ret=-EBUSY;
>   
>   	spin_lock(&bdev->lru_lock);
>   	for (i = TTM_PL_SYSTEM; i < TTM_NUM_MEM_TYPES; ++i) { @@ -161,7 
> +161,7 @@ int ttm_device_swapout(struct ttm_device *bdev, struct ttm_operation_ctx *ctx,
>   		}
>   	}
>   	spin_unlock(&bdev->lru_lock);
> -	return 0;
> +	return ret;

The function should return the number of pages swapped out. Returning 0 here is already perfectly ok.

>   }
>   EXPORT_SYMBOL(ttm_device_swapout);
>   
> diff --git a/drivers/gpu/drm/ttm/ttm_tt.c 
> b/drivers/gpu/drm/ttm/ttm_tt.c index 48c407cff112..4e1e06a04428 100644
> --- a/drivers/gpu/drm/ttm/ttm_tt.c
> +++ b/drivers/gpu/drm/ttm/ttm_tt.c
> @@ -329,6 +329,8 @@ int ttm_tt_populate(struct ttm_device *bdev,
>   	       ttm_dma32_pages_limit) {
>   
>   		ret = ttm_global_swapout(ctx, GFP_KERNEL);
> +		if (ret == -EBUSY)
> +			break;
>   		if (ret < 0)
>   			goto error;

Here we should just have a check for ret == 0 instead of testing for -EBUSY.

Regards,
Christian.

>   	}


More information about the dri-devel mailing list