[Mesa-dev] [PATCH] anv: Set fence/semaphore types to NONE in impl_cleanup

Lionel Landwerlin lionel.g.landwerlin at intel.com
Thu Jun 7 11:18:56 UTC 2018


Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>

On 07/06/18 01:48, Jason Ekstrand wrote:
> There were some places that were calling anv_semaphore_impl_cleanup and
> neither deleting the semaphore nor setting the type back to NONE.  Just
> set it to NONE in impl_cleanup to avoid these issues.
>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106643
> Fixes: 031f57eba "anv: Add a basic implementation of VK_KHX_external..."
> ---
>   src/intel/vulkan/anv_queue.c | 29 ++++++++++++++++-------------
>   1 file changed, 16 insertions(+), 13 deletions(-)
>
> diff --git a/src/intel/vulkan/anv_queue.c b/src/intel/vulkan/anv_queue.c
> index e8bdaf14f91..5272ff4a8e0 100644
> --- a/src/intel/vulkan/anv_queue.c
> +++ b/src/intel/vulkan/anv_queue.c
> @@ -314,18 +314,21 @@ anv_fence_impl_cleanup(struct anv_device *device,
>      switch (impl->type) {
>      case ANV_FENCE_TYPE_NONE:
>         /* Dummy.  Nothing to do */
> -      return;
> +      break;
>   
>      case ANV_FENCE_TYPE_BO:
>         anv_bo_pool_free(&device->batch_bo_pool, &impl->bo.bo);
> -      return;
> +      break;
>   
>      case ANV_FENCE_TYPE_SYNCOBJ:
>         anv_gem_syncobj_destroy(device, impl->syncobj);
> -      return;
> +      break;
> +
> +   default:
> +      unreachable("Invalid fence type");
>      }
>   
> -   unreachable("Invalid fence type");
> +   impl->type = ANV_FENCE_TYPE_NONE;
>   }
>   
>   void anv_DestroyFence(
> @@ -362,10 +365,8 @@ VkResult anv_ResetFences(
>          *    first restored. The remaining operations described therefore
>          *    operate on the restored payload.
>          */
> -      if (fence->temporary.type != ANV_FENCE_TYPE_NONE) {
> +      if (fence->temporary.type != ANV_FENCE_TYPE_NONE)
>            anv_fence_impl_cleanup(device, &fence->temporary);
> -         fence->temporary.type = ANV_FENCE_TYPE_NONE;
> -      }
>   
>         struct anv_fence_impl *impl = &fence->permanent;
>   
> @@ -918,22 +919,25 @@ anv_semaphore_impl_cleanup(struct anv_device *device,
>      case ANV_SEMAPHORE_TYPE_NONE:
>      case ANV_SEMAPHORE_TYPE_DUMMY:
>         /* Dummy.  Nothing to do */
> -      return;
> +      break;
>   
>      case ANV_SEMAPHORE_TYPE_BO:
>         anv_bo_cache_release(device, &device->bo_cache, impl->bo);
> -      return;
> +      break;
>   
>      case ANV_SEMAPHORE_TYPE_SYNC_FILE:
>         close(impl->fd);
> -      return;
> +      break;
>   
>      case ANV_SEMAPHORE_TYPE_DRM_SYNCOBJ:
>         anv_gem_syncobj_destroy(device, impl->syncobj);
> -      return;
> +      break;
> +
> +   default:
> +      unreachable("Invalid semaphore type");
>      }
>   
> -   unreachable("Invalid semaphore type");
> +   impl->type = ANV_SEMAPHORE_TYPE_NONE;
>   }
>   
>   void
> @@ -944,7 +948,6 @@ anv_semaphore_reset_temporary(struct anv_device *device,
>         return;
>   
>      anv_semaphore_impl_cleanup(device, &semaphore->temporary);
> -   semaphore->temporary.type = ANV_SEMAPHORE_TYPE_NONE;
>   }
>   
>   void anv_DestroySemaphore(




More information about the mesa-dev mailing list