Signed-off-by: Danylo Piliaiev <danylo.pilia...@globallogic.com>
---
 src/intel/tools/intel_sanitize_gpu.c | 38 +++++++++++++++-------------
 1 file changed, 20 insertions(+), 18 deletions(-)

diff --git a/src/intel/tools/intel_sanitize_gpu.c 
b/src/intel/tools/intel_sanitize_gpu.c
index 9b49b0bbf2..36c4725a2f 100644
--- a/src/intel/tools/intel_sanitize_gpu.c
+++ b/src/intel/tools/intel_sanitize_gpu.c
@@ -51,14 +51,6 @@ static int (*libc_fcntl)(int fd, int cmd, int param);
 
 #define DRM_MAJOR 226
 
-/* TODO: we want to make sure that the padding forces
- * the BO to take another page on the (PP)GTT; 4KB
- * may or may not be the page size for the BO. Indeed,
- * depending on GPU, kernel version and GEM size, the
- * page size can be one of 4KB, 64KB or 2M.
- */
-#define PADDING_SIZE 4096
-
 struct refcnt_hash_table {
    struct hash_table *t;
    int refcnt;
@@ -80,6 +72,8 @@ pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static struct hash_table *fds_to_bo_sizes = NULL;
 
+static long padding_size = 0;
+
 static inline struct hash_table*
 bo_size_table(int fd)
 {
@@ -166,7 +160,7 @@ padding_is_good(int fd, uint32_t handle)
    struct drm_i915_gem_mmap mmap_arg = {
       .handle = handle,
       .offset = bo_size(fd, handle),
-      .size = PADDING_SIZE,
+      .size = padding_size,
       .flags = 0,
    };
 
@@ -189,17 +183,17 @@ padding_is_good(int fd, uint32_t handle)
     * if the bo is not cache coherent we likely need to
     * invalidate the cache lines to get it.
     */
-   gen_invalidate_range(mapped, PADDING_SIZE);
+   gen_invalidate_range(mapped, padding_size);
 
    expected_value = handle & 0xFF;
-   for (uint32_t i = 0; i < PADDING_SIZE; ++i) {
+   for (uint32_t i = 0; i < padding_size; ++i) {
       if (expected_value != mapped[i]) {
-         munmap(mapped, PADDING_SIZE);
+         munmap(mapped, padding_size);
          return false;
       }
       expected_value = next_noise_value(expected_value);
    }
-   munmap(mapped, PADDING_SIZE);
+   munmap(mapped, padding_size);
 
    return true;
 }
@@ -207,9 +201,9 @@ padding_is_good(int fd, uint32_t handle)
 static int
 create_with_padding(int fd, struct drm_i915_gem_create *create)
 {
-   create->size += PADDING_SIZE;
+   create->size += padding_size;
    int ret = libc_ioctl(fd, DRM_IOCTL_I915_GEM_CREATE, create);
-   create->size -= PADDING_SIZE;
+   create->size -= padding_size;
 
    if (ret != 0)
       return ret;
@@ -218,7 +212,7 @@ create_with_padding(int fd, struct drm_i915_gem_create 
*create)
    struct drm_i915_gem_mmap mmap_arg = {
       .handle = create->handle,
       .offset = create->size,
-      .size = PADDING_SIZE,
+      .size = padding_size,
       .flags = 0,
    };
 
@@ -228,8 +222,8 @@ create_with_padding(int fd, struct drm_i915_gem_create 
*create)
 
    noise_values = (uint8_t*) (uintptr_t) mmap_arg.addr_ptr;
    fill_noise_buffer(noise_values, create->handle & 0xFF,
-                     PADDING_SIZE);
-   munmap(noise_values, PADDING_SIZE);
+                     padding_size);
+   munmap(noise_values, padding_size);
 
    _mesa_hash_table_insert(bo_size_table(fd), (void*)(uintptr_t)create->handle,
                            (void*)(uintptr_t)create->size);
@@ -427,4 +421,12 @@ init(void)
    libc_close = dlsym(RTLD_NEXT, "close");
    libc_fcntl = dlsym(RTLD_NEXT, "fcntl");
    libc_ioctl = dlsym(RTLD_NEXT, "ioctl");
+
+   /* We want to make sure that the padding forces
+    * the BO to take another page on the (PP)GTT.
+    */
+   padding_size = sysconf(_SC_PAGESIZE);
+   if (padding_size == -1) {
+      unreachable("Bad page size");
+   }
 }
-- 
2.18.0

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to