<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Feb 27, 2017 at 9:38 AM, Chad Versace <span dir="ltr"><<a href="mailto:chadversary@chromium.org" target="_blank">chadversary@chromium.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Fri 24 Feb 2017, Jason Ekstrand wrote:<br>
> This prevents a user from using a cache created on one hardware<br>
> generation on a different one.  Of course, with Intel hardware, this<br>
> requires moving their drive from one machine to another but it's still<br>
> possible and we should prevent it.<br>
<br>
</span>Or if you rsync stuff between test machines.<br>
<br>
Or if your test machines share stuff over NFS. (Mine do).<br>
<br>
Or...<br>
<br>
It's easy to hit this bug without a screwdriver ;)<br>
<div><div class="h5"><br>
> ---<br>
>  src/intel/vulkan/anv_device.c | 20 +++++++++++++++-----<br>
>  1 file changed, 15 insertions(+), 5 deletions(-)<br>
><br>
> diff --git a/src/intel/vulkan/anv_device.<wbr>c b/src/intel/vulkan/anv_device.<wbr>c<br>
> index 38def35..5168331 100644<br>
> --- a/src/intel/vulkan/anv_device.<wbr>c<br>
> +++ b/src/intel/vulkan/anv_device.<wbr>c<br>
> @@ -32,6 +32,7 @@<br>
>  #include "util/strtod.h"<br>
>  #include "util/debug.h"<br>
>  #include "util/build_id.h"<br>
> +#include "util/mesa-sha1.h"<br>
>  #include "util/vk_util.h"<br>
><br>
>  #include "genxml/gen7_pack.h"<br>
> @@ -53,17 +54,26 @@ compiler_perf_log(void *data, const char *fmt, ...)<br>
>  }<br>
><br>
>  static bool<br>
> -anv_device_get_cache_uuid(<wbr>void *uuid)<br>
> +anv_device_get_cache_uuid(<wbr>void *uuid, uint16_t pci_id)<br>
>  {<br>
>     const struct build_id_note *note = build_id_find_nhdr("libvulkan_<wbr>intel.so");<br>
>     if (!note)<br>
>        return false;<br>
><br>
> -   unsigned len = build_id_length(note);<br>
> -   if (len < VK_UUID_SIZE)<br>
> +   unsigned build_id_len = build_id_length(note);<br>
> +   if (build_id_len < VK_UUID_SIZE)<br>
>        return false;<br>
<br>
</div></div>Below, you're no longer copying the build_id into the pipelineCacheUUID.<br>
So checking `build_id_len >= VK_UUID_SIZE` is unneeded.<span class=""><br></span></blockquote><div><br></div><div>Yes and no.  I want to be sure that it's a SHA1 hash and not a timestamp.  Maybe we should check for >= 20 instead?<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
> -   memcpy(uuid, build_id_data(note), VK_UUID_SIZE);<br>
> +   uint8_t sha1[20];<br>
> +   struct mesa_sha1 *sha1_ctx = _mesa_sha1_init();<br>
> +   if (sha1_ctx == NULL)<br>
> +      return false;<br>
> +<br>
> +   _mesa_sha1_update(sha1_ctx, build_id_data(note), build_id_len);<br>
> +   _mesa_sha1_update(sha1_ctx, &pci_id, sizeof(pci_id));<br>
> +   _mesa_sha1_final(sha1_ctx, sha1);<br>
> +<br>
> +   memcpy(uuid, sha1, VK_UUID_SIZE);<br>
<br>
</span>What really needs checking is `ARRAY_LEN(sha1) >= VK_UUID_SIZE`. That<br>
could be done as a static assert.<span class=""><br></span></blockquote><div><br></div><div>sure.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
>     return true;<br>
>  }<br>
><br>
> @@ -148,7 +158,7 @@ anv_physical_device_init(<wbr>struct anv_physical_device *device,<br>
>        goto fail;<br>
>     }<br>
><br>
> -   if (!anv_device_get_cache_uuid(<wbr>device->uuid)) {<br>
> +   if (!anv_device_get_cache_uuid(<wbr>device->uuid, device->chipset_id)) {<br>
>        result = vk_errorf(VK_ERROR_<wbr>INITIALIZATION_FAILED,<br>
>                           "cannot generate UUID");<br>
>        goto fail;<br>
> --<br>
> 2.5.0.400.gff86faf<br>
><br>
</span>> ______________________________<wbr>_________________<br>
> mesa-dev mailing list<br>
> <a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
> <a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/mesa-dev</a><br>
</blockquote></div><br></div></div>