[PATCH 12/22] gpu: host1x: Correct host1x_job_pin() error handling

Erik Faye-Lund kusmabite at gmail.com
Tue May 23 00:32:21 UTC 2017


On Tue, May 23, 2017 at 2:14 AM, Dmitry Osipenko <digetx at gmail.com> wrote:
> In case of relocations / waitchecks patching failure the jobs pins stay
> referenced till DRM file get closed, wasting memory. Add the missed
> unpinning.
>
> Signed-off-by: Dmitry Osipenko <digetx at gmail.com>
> ---
>  drivers/gpu/host1x/job.c | 16 +++++++---------
>  1 file changed, 7 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/host1x/job.c b/drivers/gpu/host1x/job.c
> index d9933828fe87..14f3f957ffab 100644
> --- a/drivers/gpu/host1x/job.c
> +++ b/drivers/gpu/host1x/job.c
> @@ -592,22 +592,20 @@ int host1x_job_pin(struct host1x_job *job, struct device *dev)
>
>                 err = do_relocs(job, g->bo);
>                 if (err)
> -                       break;
> +                       goto out;
>
>                 err = do_waitchks(job, host, g->bo);
>                 if (err)
> -                       break;
> +                       goto out;
>         }
>
> -       if (IS_ENABLED(CONFIG_TEGRA_HOST1X_FIREWALL) && !err) {
> -               err = copy_gathers(job, dev);
> -               if (err) {
> -                       host1x_job_unpin(job);
> -                       return err;
> -               }
> -       }
> +       if (!IS_ENABLED(CONFIG_TEGRA_HOST1X_FIREWALL))
> +               goto out;
>
> +       err = copy_gathers(job, dev);
>  out:
> +       if (err)
> +               host1x_job_unpin(job);
>         wmb();
>
>         return err;
> --
> 2.13.0
>

One subtle undocumented change here, is that wmb() now gets called in
the copy_gathers()-error case (just like it already does for the other
error-cases). That's seems like an OK change, so:

Reviewed-by: Erik Faye-Lund <kusmabite at gmail.com>


More information about the dri-devel mailing list