[Lima] [PATCH] drm/lima: add timeout to drm scheduler init
Qiang Yu
yuq825 at gmail.com
Tue May 21 10:24:18 UTC 2019
Looks good for me, patch is:
Reviewed-by: Qiang Yu <yuq825 at gmail.com>
I'll apply it to drm-misc-next.
Regards,
Qiang
On Tue, May 21, 2019 at 6:46 AM Erico Nunes <nunes.erico at gmail.com> wrote:
>
> After "5918045c4ed4 drm/scheduler: rework job destruction", lima started
> to leak memory due to buffers not being destroyed after job execution in
> the drm scheduler.
> This started happening because the drm scheduler only destroyed buffers
> after cancelling the job timeout handler, and for lima this handler was
> never started as lima specified a MAX_SCHEDULE_TIMEOUT timeout.
> Lima seems to run well in its current state with a real timeout, so to
> make it more aligned with the other drivers from now on, let's use a
> real default timeout.
> This also fixes the observed memory leaks.
> The 500ms value was chosen as it is the current value for all other
> embedded gpu drivers using drm sched.
>
> Signed-off-by: Erico Nunes <nunes.erico at gmail.com>
> ---
> drivers/gpu/drm/lima/lima_drv.c | 2 +-
> drivers/gpu/drm/lima/lima_sched.c | 11 ++++-------
> 2 files changed, 5 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/lima/lima_drv.c b/drivers/gpu/drm/lima/lima_drv.c
> index f9a281a62083..b29c26cd13b2 100644
> --- a/drivers/gpu/drm/lima/lima_drv.c
> +++ b/drivers/gpu/drm/lima/lima_drv.c
> @@ -17,7 +17,7 @@
>
> int lima_sched_timeout_ms;
>
> -MODULE_PARM_DESC(sched_timeout_ms, "task run timeout in ms (0 = no timeout (default))");
> +MODULE_PARM_DESC(sched_timeout_ms, "task run timeout in ms");
> module_param_named(sched_timeout_ms, lima_sched_timeout_ms, int, 0444);
>
> static int lima_ioctl_get_param(struct drm_device *dev, void *data, struct drm_file *file)
> diff --git a/drivers/gpu/drm/lima/lima_sched.c b/drivers/gpu/drm/lima/lima_sched.c
> index 58a15479d175..4127cacac454 100644
> --- a/drivers/gpu/drm/lima/lima_sched.c
> +++ b/drivers/gpu/drm/lima/lima_sched.c
> @@ -329,19 +329,16 @@ static void lima_sched_error_work(struct work_struct *work)
>
> int lima_sched_pipe_init(struct lima_sched_pipe *pipe, const char *name)
> {
> - long timeout;
> -
> - if (lima_sched_timeout_ms <= 0)
> - timeout = MAX_SCHEDULE_TIMEOUT;
> - else
> - timeout = msecs_to_jiffies(lima_sched_timeout_ms);
> + unsigned int timeout = lima_sched_timeout_ms > 0 ?
> + lima_sched_timeout_ms : 500;
>
> pipe->fence_context = dma_fence_context_alloc(1);
> spin_lock_init(&pipe->fence_lock);
>
> INIT_WORK(&pipe->error_work, lima_sched_error_work);
>
> - return drm_sched_init(&pipe->base, &lima_sched_ops, 1, 0, timeout, name);
> + return drm_sched_init(&pipe->base, &lima_sched_ops, 1, 0,
> + msecs_to_jiffies(timeout), name);
> }
>
> void lima_sched_pipe_fini(struct lima_sched_pipe *pipe)
> --
> 2.20.1
>
More information about the lima
mailing list