From 97aa90dec2bdd5b8b1a0c274deb8c330aae7ae44 Mon Sep 17 00:00:00 2001
From: Yiwei Zhang <zzyiwei@chromium.org>
Date: Wed, 1 Sep 2021 21:30:36 +0000
Subject: [PATCH 2/2] venus: workaround a blob_mem mappable size check issue

For blob_mem allocated from virtgpu_virgl backend, the guest mappable
size queried can be smaller than the size returned from image memory
requirement query from the host side. Here we temporarily workaround
until we switch to use cross-domain backend in minigbm.

Cc: 21.2.3 mesa-stable

Signed-off-by: Yiwei Zhang <zzyiwei@chromium.org>
Reviewed-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Ryan Neph <ryanneph@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12687>
---
 src/virtio/vulkan/vn_android.c       | 11 +++++++++--
 src/virtio/vulkan/vn_device_memory.c | 15 +++++++++------
 src/virtio/vulkan/vn_device_memory.h |  1 +
 3 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/src/virtio/vulkan/vn_android.c b/src/virtio/vulkan/vn_android.c
index 121f124853f..52901e75bd0 100644
--- a/src/virtio/vulkan/vn_android.c
+++ b/src/virtio/vulkan/vn_android.c
@@ -918,6 +918,7 @@ vn_android_device_import_ahb(struct vn_device *dev,
    int dup_fd = -1;
    uint64_t alloc_size = 0;
    uint32_t mem_type_bits = 0;
+   bool force_unmappable = false;
    VkResult result = VK_SUCCESS;
 
    handle = AHardwareBuffer_getNativeHandle(ahb);
@@ -960,6 +961,12 @@ vn_android_device_import_ahb(struct vn_device *dev,
       }
 
       alloc_size = mem_req.size;
+
+      /* XXX Workaround before we use cross-domain backend in minigbm. The
+       * blob_mem allocated from virgl backend can have a queried guest mappable
+       * size smaller than the size returned from image memory requirement.
+       */
+      force_unmappable = true;
    }
 
    if (dedicated_info && dedicated_info->buffer != VK_NULL_HANDLE) {
@@ -999,8 +1006,8 @@ vn_android_device_import_ahb(struct vn_device *dev,
       .allocationSize = alloc_size,
       .memoryTypeIndex = alloc_info->memoryTypeIndex,
    };
-   result =
-      vn_device_memory_import_dma_buf(dev, mem, &local_alloc_info, dup_fd);
+   result = vn_device_memory_import_dma_buf(dev, mem, &local_alloc_info,
+                                            force_unmappable, dup_fd);
    if (result != VK_SUCCESS) {
       close(dup_fd);
       return result;
diff --git a/src/virtio/vulkan/vn_device_memory.c b/src/virtio/vulkan/vn_device_memory.c
index 89226dde332..5a38cb416f9 100644
--- a/src/virtio/vulkan/vn_device_memory.c
+++ b/src/virtio/vulkan/vn_device_memory.c
@@ -224,20 +224,23 @@ VkResult
 vn_device_memory_import_dma_buf(struct vn_device *dev,
                                 struct vn_device_memory *mem,
                                 const VkMemoryAllocateInfo *alloc_info,
+                                bool force_unmappable,
                                 int fd)
 {
    VkDevice device = vn_device_to_handle(dev);
    VkDeviceMemory memory = vn_device_memory_to_handle(mem);
    const VkPhysicalDeviceMemoryProperties *mem_props =
       &dev->physical_device->memory_properties.memoryProperties;
-   const VkMemoryType *mem_type =
-      &mem_props->memoryTypes[alloc_info->memoryTypeIndex];
+   VkMemoryPropertyFlags mem_flags =
+      mem_props->memoryTypes[alloc_info->memoryTypeIndex].propertyFlags;
    struct vn_renderer_bo *bo;
    VkResult result = VK_SUCCESS;
 
-   result = vn_renderer_bo_create_from_dma_buf(dev->renderer,
-                                               alloc_info->allocationSize, fd,
-                                               mem_type->propertyFlags, &bo);
+   if (force_unmappable)
+      mem_flags &= ~VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+
+   result = vn_renderer_bo_create_from_dma_buf(
+      dev->renderer, alloc_info->allocationSize, fd, mem_flags, &bo);
    if (result != VK_SUCCESS)
       return result;
 
@@ -355,7 +358,7 @@ vn_AllocateMemory(VkDevice device,
    } else if (export_ahb) {
       result = vn_android_device_allocate_ahb(dev, mem, pAllocateInfo, alloc);
    } else if (import_fd_info) {
-      result = vn_device_memory_import_dma_buf(dev, mem, pAllocateInfo,
+      result = vn_device_memory_import_dma_buf(dev, mem, pAllocateInfo, false,
                                                import_fd_info->fd);
    } else if (export_info) {
       result = vn_device_memory_alloc(dev, mem, pAllocateInfo, true,
diff --git a/src/virtio/vulkan/vn_device_memory.h b/src/virtio/vulkan/vn_device_memory.h
index f480ad811bc..04f23d10541 100644
--- a/src/virtio/vulkan/vn_device_memory.h
+++ b/src/virtio/vulkan/vn_device_memory.h
@@ -47,6 +47,7 @@ VkResult
 vn_device_memory_import_dma_buf(struct vn_device *dev,
                                 struct vn_device_memory *mem,
                                 const VkMemoryAllocateInfo *alloc_info,
+                                bool force_unmappable,
                                 int fd);
 
 VkResult
-- 
2.33.0.153.gba50c8fa24-goog

