tu: Align BO size to page size

The kernel was rounding the size up for us, but it doesn't like a
non-aligned map size, so just sanitize the size here.

tu_cs was relying on the size not being rounded to keep the maximum size
2^20-1 or less, so fix that by using the initial unrounded size.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32533>
This commit is contained in:
Connor Abbott 2024-11-14 21:44:29 -05:00 committed by Marge Bot
parent d8d0e73899
commit aa392e1ec2
2 changed files with 4 additions and 1 deletions

View file

@ -176,7 +176,7 @@ tu_cs_add_bo(struct tu_cs *cs, uint32_t size)
bos->bos[bos->bo_count++] = new_bo;
cs->start = cs->cur = cs->reserved_end = (uint32_t *) new_bo->map;
cs->end = cs->start + new_bo->size / sizeof(uint32_t);
cs->end = cs->start + size;
return VK_SUCCESS;
}

View file

@ -40,6 +40,8 @@ tu_bo_init_new_explicit_iova(struct tu_device *dev,
MESA_TRACE_FUNC();
struct tu_instance *instance = dev->physical_device->instance;
size = align64(size, os_page_size);
VkResult result =
dev->instance->knl->bo_init(dev, base, out_bo, size, client_iova,
mem_property, flags, name);
@ -65,6 +67,7 @@ tu_bo_init_dmabuf(struct tu_device *dev,
uint64_t size,
int fd)
{
size = align64(size, os_page_size);
VkResult result = dev->instance->knl->bo_init_dmabuf(dev, bo, size, fd);
if (result != VK_SUCCESS)
return result;