[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