[Mesa-dev] [PATCH 1/2] util/disk_cache: support caches for multiple architectures
Ilia Mirkin
imirkin at alum.mit.edu
Thu Mar 2 06:17:17 UTC 2017
On Thu, Mar 2, 2017 at 1:08 AM, Timothy Arceri <tarceri at itsqueeze.com> wrote:
> Previously we were deleting the entire cache if a user switched
> between 32 and 64 bit applications.
> ---
> src/util/disk_cache.c | 21 +++++++++++++++++++++
> 1 file changed, 21 insertions(+)
>
> diff --git a/src/util/disk_cache.c b/src/util/disk_cache.c
> index 3abdec4..1a91c69 100644
> --- a/src/util/disk_cache.c
> +++ b/src/util/disk_cache.c
> @@ -40,20 +40,32 @@
> #include "zlib.h"
>
> #include "util/crc32.h"
> #include "util/u_atomic.h"
> #include "util/mesa-sha1.h"
> #include "util/ralloc.h"
> #include "main/errors.h"
>
> #include "disk_cache.h"
>
> +#if defined(__x86_64__)
> +#if defined(__ILP32__)
> +#define CACHE_ARCH "x32"
> +#else
> +#define CACHE_ARCH "x86_64"
> +#endif
> +#elif defined(__i386__)
> +#define CACHE_ARCH "i386"
> +#else
> +#define CACHE_ARCH "unknown_arch"
> +#endif
This seems incomplete. How about using uname(2)'s machine value? (Will
need a bit of plumbing to detect whether uname is available in libc.)
> +
> /* Number of bits to mask off from a cache key to get an index. */
> #define CACHE_INDEX_KEY_BITS 16
>
> /* Mask for computing an index from a key. */
> #define CACHE_INDEX_KEY_MASK ((1 << CACHE_INDEX_KEY_BITS) - 1)
>
> /* The number of keys that can be stored in the index. */
> #define CACHE_INDEX_MAX_KEYS (1 << CACHE_INDEX_KEY_BITS)
>
> struct disk_cache {
> @@ -170,20 +182,29 @@ remove_old_cache_directories(void *mem_ctx, char *path, const char *timestamp)
> }
>
> static char *
> create_mesa_cache_dir(void *mem_ctx, char *path, const char *timestamp,
> const char *gpu_name)
> {
> char *new_path = concatenate_and_mkdir(mem_ctx, path, "mesa");
> if (new_path == NULL)
> return NULL;
>
> + /* Create a parent architecture directory so that we don't remove cache
> + * files for other architectures. In theory we could share the cache
> + * between architectures but we have no way of knowing if they were created
> + * by a compatible Mesa version.
> + */
> + new_path = concatenate_and_mkdir(mem_ctx, new_path, CACHE_ARCH);
> + if (new_path == NULL)
> + return NULL;
> +
> /* Remove cache directories for old Mesa versions */
> remove_old_cache_directories(mem_ctx, new_path, timestamp);
>
> new_path = concatenate_and_mkdir(mem_ctx, new_path, timestamp);
> if (new_path == NULL)
> return NULL;
>
> new_path = concatenate_and_mkdir(mem_ctx, new_path, gpu_name);
> if (new_path == NULL)
> return NULL;
> --
> 2.9.3
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list