Mesa (main): venus: fix vn_buffer_get_max_buffer_size

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Dec 14 06:00:48 UTC 2021


Module: Mesa
Branch: main
Commit: 65576eec2ecafcf04e035a48f13456d810720a5c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=65576eec2ecafcf04e035a48f13456d810720a5c

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Mon Dec 13 17:02:34 2021 -0800

venus: fix vn_buffer_get_max_buffer_size

The binary search can lead to infinite loop.  Fixes
dEQP-VK.api.object_management.alloc_callback_fail.device where
vn_CreateBuffer can always fail.

Fixes: a74f2495ca0 ("venus: implement vn_buffer_get_max_buffer_size")
Signed-off-by: Chia-I Wu <olvaffe at gmail.com>
Reviewed-by: Ryan Neph <ryanneph at google.com>
Reviewed-by: Yiwei Zhang <zzyiwei at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14184>

---

 src/virtio/vulkan/vn_buffer.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/virtio/vulkan/vn_buffer.c b/src/virtio/vulkan/vn_buffer.c
index 44d1b51acb2..5470bc15406 100644
--- a/src/virtio/vulkan/vn_buffer.c
+++ b/src/virtio/vulkan/vn_buffer.c
@@ -136,16 +136,16 @@ vn_buffer_get_max_buffer_size(struct vn_device *dev,
    uint8_t begin = 0;
    uint8_t end = 64;
 
-   while (begin <= end) {
+   while (begin < end) {
       uint8_t mid = (begin + end) >> 1;
-      create_info.size = 1 << mid;
+      create_info.size = 1ull << mid;
       if (vn_CreateBuffer(dev_handle, &create_info, alloc, &buf_handle) ==
           VK_SUCCESS) {
          vn_DestroyBuffer(dev_handle, buf_handle, alloc);
          max_buffer_size = create_info.size;
          begin = mid + 1;
       } else {
-         end = mid - 1;
+         end = mid;
       }
    }
 



More information about the mesa-commit mailing list