[Mesa-dev] [PATCH 1/3] panfrost: Fix various leaks unmapping resources

Emil Velikov emil.l.velikov at gmail.com
Fri Feb 15 18:13:32 UTC 2019


Hi Alyssa,

On Fri, 15 Feb 2019 at 08:50, Alyssa Rosenzweig <alyssa at rosenzweig.io> wrote:
>
> Signed-off-by: Alyssa Rosenzweig <alyssa at rosenzweig.io>
> ---
>  src/gallium/drivers/panfrost/pan_resource.c | 22 ++++++++++++---------
>  src/gallium/drivers/panfrost/pan_screen.h   |  4 +++-
>  2 files changed, 16 insertions(+), 10 deletions(-)
>
> diff --git a/src/gallium/drivers/panfrost/pan_resource.c b/src/gallium/drivers/panfrost/pan_resource.c
> index 7fa00117a28..fb9b8e63c83 100644
> --- a/src/gallium/drivers/panfrost/pan_resource.c
> +++ b/src/gallium/drivers/panfrost/pan_resource.c
> @@ -287,17 +287,20 @@ panfrost_destroy_bo(struct panfrost_screen *screen, struct panfrost_bo *pbo)
>  {
>         struct panfrost_bo *bo = (struct panfrost_bo *)pbo;
>
> -        if (bo->entry[0] != NULL) {
> -                /* Most allocations have an entry to free */
> -                bo->entry[0]->freed = true;
> -                pb_slab_free(&screen->slabs, &bo->entry[0]->base);
> +        for (int l = 0; l < MAX_MIP_LEVELS; ++l) {
> +                if (bo->entry[l] != NULL) {
Nit: staying consistent with "foo != NULL" vs "foo" checks helps a lot.

> +                        /* Most allocations have an entry to free */
> +                        bo->entry[l]->freed = true;
> +                        pb_slab_free(&screen->slabs, &bo->entry[l]->base);
> +                }
>          }
>
>          if (bo->tiled) {
>                  /* Tiled has a malloc'd CPU, so just plain ol' free needed */
>
> -                for (int l = 0; bo->cpu[l]; l++) {
> -                        free(bo->cpu[l]);
> +                for (int l = 0; l < MAX_MIP_LEVELS; ++l) {
> +                        if (bo->cpu[l])
free(NULL); is perfectly valid.

> +                                free(bo->cpu[l]);
>                  }
>          }
>
> @@ -509,9 +512,10 @@ panfrost_slab_can_reclaim(void *priv, struct pb_slab_entry *entry)
>  static void
>  panfrost_slab_free(void *priv, struct pb_slab *slab)
>  {
> -        /* STUB */
> -        //struct panfrost_memory *mem = (struct panfrost_memory *) slab;
> -        printf("stub: Tried to free slab\n");
> +        struct panfrost_memory *mem = (struct panfrost_memory *) slab;
> +        struct panfrost_screen *screen = (struct panfrost_screen *) priv;
> +
> +        screen->driver->free_slab(screen, mem);
The function pointer seems to be NULL. Did you forget to git add the
file which sets it?

HTH
-Emil


More information about the mesa-dev mailing list