[Mesa-dev] [PATCH 2/2] anv: Use build-id for pipeline cache UUID.

Chad Versace chadversary at chromium.org
Tue Feb 14 20:38:45 UTC 2017


On Tue 14 Feb 2017, Matt Turner wrote:


>  static bool
> -anv_get_function_timestamp(void *ptr, uint32_t* timestamp)
> +anv_device_get_cache_uuid(void *uuid)
>  {
> -   Dl_info info;
> -   struct stat st;
> -   if (!dladdr(ptr, &info) || !info.dli_fname)
> +   const struct note *note = build_id_find_nhdr("libvulkan_intel.so");
> +   if (!note)
>        return false;
>  
> -   if (stat(info.dli_fname, &st))
> +   unsigned len = build_id_length(note);
> +   if (len < VK_UUID_SIZE)
>        return false;
>  
> -   *timestamp = st.st_mtim.tv_sec;
> -   return true;
> -}
> -
> -static bool
> -anv_device_get_cache_uuid(void *uuid)
> -{
> -   uint32_t timestamp;
> -
> -   memset(uuid, 0, VK_UUID_SIZE);
> -   if (!anv_get_function_timestamp(anv_device_get_cache_uuid, &timestamp))
> +   unsigned char *build_id = malloc(len);
> +   if (!build_id)
>        return false;
>  
> -   snprintf(uuid, VK_UUID_SIZE, "anv-%d", timestamp);
> +   build_id_read(note, build_id);
> +
> +   memcpy(uuid, build_id, VK_UUID_SIZE);
> +   free(build_id);

The Vulkan spec frowns on memory allocations when not needed. If you
must allocate memory here, then it should be through the VkInstance
allocation callbacks. However, it's best to avoid the allocation by
adding a size_t parameter, à la snprintf, to build_id_read().

Otherwise, the patch looks good to me.

>     return true;
>  }


More information about the mesa-dev mailing list