[Mesa-dev] [PATCH] radv: Use build ID if available for cache UUID.

Timothy Arceri tarceri at itsqueeze.com
Mon Sep 17 00:10:48 UTC 2018


On 16/9/18 10:58 am, Bas Nieuwenhuizen wrote:
> To get an useful UUID for systems that have a non-useful mtime
> for the binaries.
> 
> I started using using SHA1 to ensure we get reasonable mixing

using using - > using

So did this return a build id for LLVM on your distro?

Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>

> in the various possibilities and the various build id lengths.
> 
> CC: <mesa-stable at lists.freedesktop.org>
> ---
>   src/amd/vulkan/radv_device.c | 43 +++++++++++++++++++++++++++++-------
>   1 file changed, 35 insertions(+), 8 deletions(-)
> 
> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
> index 8989ec3553f..a2a73089f27 100644
> --- a/src/amd/vulkan/radv_device.c
> +++ b/src/amd/vulkan/radv_device.c
> @@ -45,22 +45,49 @@
>   #include "sid.h"
>   #include "gfx9d.h"
>   #include "addrlib/gfx9/chip/gfx9_enum.h"
> +#include "util/build_id.h"
>   #include "util/debug.h"
> +#include "util/mesa-sha1.h"
> +
> +static bool
> +radv_get_build_id(void *ptr, struct mesa_sha1 *ctx)
> +{
> +	uint32_t timestamp;
> +
> +#ifdef HAVE_DL_ITERATE_PHDR
> +	const struct build_id_note *note = NULL;
> +	if ((note = build_id_find_nhdr_for_addr(ptr))) {
> +		_mesa_sha1_update(ctx, build_id_data(note), build_id_length(note));
> +	} else
> +#endif
> +	if (disk_cache_get_function_timestamp(ptr, &timestamp)) {
> +		if (!timestamp) {
> +			fprintf(stderr, "radv: The provided filesystem timestamp for the cache is bogus!\n");
> +		}
> +
> +		_mesa_sha1_update(ctx, &timestamp, sizeof(timestamp));
> +	} else
> +		return false;
> +	return true;
> +}
>   
>   static int
>   radv_device_get_cache_uuid(enum radeon_family family, void *uuid)
>   {
> -	uint32_t mesa_timestamp, llvm_timestamp;
> -	uint16_t f = family;
> +	struct mesa_sha1 ctx;
> +	unsigned char sha1[20];
> +	unsigned ptr_size = sizeof(void*);
>   	memset(uuid, 0, VK_UUID_SIZE);
> -	if (!disk_cache_get_function_timestamp(radv_device_get_cache_uuid, &mesa_timestamp) ||
> -	    !disk_cache_get_function_timestamp(LLVMInitializeAMDGPUTargetInfo, &llvm_timestamp))
> +
> +	if (!radv_get_build_id(radv_device_get_cache_uuid, &ctx) ||
> +	    !radv_get_build_id(LLVMInitializeAMDGPUTargetInfo, &ctx))
>   		return -1;
>   
> -	memcpy(uuid, &mesa_timestamp, 4);
> -	memcpy((char*)uuid + 4, &llvm_timestamp, 4);
> -	memcpy((char*)uuid + 8, &f, 2);
> -	snprintf((char*)uuid + 10, VK_UUID_SIZE - 10, "radv%zd", sizeof(void *));
> +	_mesa_sha1_update(&ctx, &family, sizeof(family));
> +	_mesa_sha1_update(&ctx, &ptr_size, sizeof(ptr_size));
> +	_mesa_sha1_final(&ctx, sha1);
> +
> +	memcpy(uuid, sha1, VK_UUID_SIZE);
>   	return 0;
>   }
>   
> 


More information about the mesa-dev mailing list