anv: Don't crash on invalid heap sizes when the PCI ID is overriden
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 8 Nov 2017 22:24:57 +0000 (14:24 -0800)
committerJason Ekstrand <jason.ekstrand@intel.com>
Mon, 13 Nov 2017 15:37:23 +0000 (07:37 -0800)
src/intel/vulkan/anv_device.c

index 67028e8da9f8a0a041f7d180e6c8f9e6706082e1..3aa213e205b4c4f83869d09a9e4d452eebc5b6e6 100644 (file)
@@ -113,6 +113,18 @@ anv_physical_device_init_heaps(struct anv_physical_device *device, int fd)
    if (result != VK_SUCCESS)
       return result;
 
+   if (heap_size > (2ull << 30) && !device->supports_48bit_addresses) {
+      /* When running with an overridden PCI ID, we may get a GTT size from
+       * the kernel that is greater than 2 GiB but the execbuf check for 48bit
+       * address support can still fail.  Just clamp the address space size to
+       * 2 GiB if we don't have 48-bit support.
+       */
+      intel_logw("%s:%d: The kernel reported a GTT size larger than 2 GiB but "
+                        "not support for 48-bit addresses",
+                        __FILE__, __LINE__);
+      heap_size = 2ull << 30;
+   }
+
    if (heap_size <= 3ull * (1ull << 30)) {
       /* In this case, everything fits nicely into the 32-bit address space,
        * so there's no need for supporting 48bit addresses on client-allocated