panfrost: Mark buffers as PANFROST_BO_HEAP
authorTomeu Vizoso <tomeu.vizoso@collabora.com>
Wed, 31 Jul 2019 14:29:25 +0000 (16:29 +0200)
committerTomeu Vizoso <tomeu.vizoso@collabora.com>
Thu, 8 Aug 2019 05:42:52 +0000 (07:42 +0200)
What we call GROWABLE in Mesa corresponds to the HEAP BO flag in the
kernel. These buffers cannot be memory mapped in the CPU side at the
moment, so make sure they are also marked INVISIBLE.

This allows us to allocate a big heap upfront (16MB) without actually
reserving space unless it's needed.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
src/gallium/drivers/panfrost/pan_drm.c

index 6d1e0c08d33da5144149b402480083eb0e20a325..71eda2d1e32865abbfa177acc0af9231131e938b 100644 (file)
@@ -91,10 +91,16 @@ panfrost_drm_create_bo(struct panfrost_screen *screen, size_t size,
         /* To maximize BO cache usage, don't allocate tiny BOs */
         size = MAX2(size, 4096);
 
+        /* GROWABLE BOs cannot be mmapped */
+        if (flags & PAN_ALLOCATE_GROWABLE)
+                assert(flags & PAN_ALLOCATE_INVISIBLE);
+
         unsigned translated_flags = 0;
 
         if (screen->kernel_version->version_major > 1 ||
             screen->kernel_version->version_minor >= 1) {
+                if (flags & PAN_ALLOCATE_GROWABLE)
+                        translated_flags |= PANFROST_BO_HEAP;
                 if (!(flags & PAN_ALLOCATE_EXECUTE))
                         translated_flags |= PANFROST_BO_NOEXEC;
         }