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: a74f2495ca ("venus: implement vn_buffer_get_max_buffer_size")
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Ryan Neph <ryanneph@google.com>
Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14184>
This commit is contained in:
Chia-I Wu 2021-12-13 17:02:34 -08:00 committed by Marge Bot
parent d92e353a11
commit 65576eec2e

View file

@ -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;
}
}