On Thu, Mar 2, 2017 at 1:17 AM, Ilia Mirkin <imir...@alum.mit.edu> wrote: > On Thu, Mar 2, 2017 at 1:08 AM, Timothy Arceri <tarc...@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.)
Nevermind. uname doesn't appear to work the way I thought it did. I still get x86_64 for a gcc -m32 compiled binary. I guess it reports the kernel's version. > >> + >> /* 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@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev