[Mesa-dev] [PATCH 1/2] util/disk_cache: support caches for multiple architectures

Ilia Mirkin imirkin at alum.mit.edu
Thu Mar 2 06:26:36 UTC 2017


On Thu, Mar 2, 2017 at 1:17 AM, Ilia Mirkin <imirkin at alum.mit.edu> wrote:
> 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.)

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 at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list