From 15f134c62853ed6679435a9e4ae40e3308fc7453 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Fri, 26 Apr 2019 17:09:11 -0700 Subject: [PATCH] i965: Fix BRW_MEMZONE_LOW_4G heap size. The STATE_BASE_ADDRESS "Size" fields can only hold 0xfffff in pages, and 0xfffff * 4096 = 4294963200, which is 1 page shy of 4GB. So we can't use the top page. Fixes: 01058a55229 i965: Add virtual memory allocator infrastructure to brw_bufmgr. Reviewed-by: Jason Ekstrand --- src/mesa/drivers/dri/i965/brw_bufmgr.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/brw_bufmgr.c b/src/mesa/drivers/dri/i965/brw_bufmgr.c index 7b0ddfb64dd..b8795374880 100644 --- a/src/mesa/drivers/dri/i965/brw_bufmgr.c +++ b/src/mesa/drivers/dri/i965/brw_bufmgr.c @@ -1717,6 +1717,9 @@ brw_bufmgr_init(struct gen_device_info *devinfo, int fd) const uint64_t _4GB = 4ull << 30; + /* The STATE_BASE_ADDRESS size field can only hold 1 page shy of 4GB */ + const uint64_t _4GB_minus_1 = _4GB - PAGE_SIZE; + if (devinfo->gen >= 8 && gtt_size > _4GB) { bufmgr->initial_kflags |= EXEC_OBJECT_SUPPORTS_48B_ADDRESS; @@ -1726,7 +1729,7 @@ brw_bufmgr_init(struct gen_device_info *devinfo, int fd) bufmgr->initial_kflags |= EXEC_OBJECT_PINNED; util_vma_heap_init(&bufmgr->vma_allocator[BRW_MEMZONE_LOW_4G], - PAGE_SIZE, _4GB); + PAGE_SIZE, _4GB_minus_1); util_vma_heap_init(&bufmgr->vma_allocator[BRW_MEMZONE_OTHER], 1 * _4GB, gtt_size - 1 * _4GB); } else if (devinfo->gen >= 10) { -- 2.30.2