From 21062e21d9612aa2c7b27de4131ed11e9f175fb4 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Fri, 26 Apr 2019 17:12:24 -0700 Subject: [PATCH] iris: Fix 4GB memory zone heap sizes. 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. --- src/gallium/drivers/iris/iris_bufmgr.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c index 6f53f214caa..c38b960c5dd 100644 --- a/src/gallium/drivers/iris/iris_bufmgr.c +++ b/src/gallium/drivers/iris/iris_bufmgr.c @@ -1670,14 +1670,17 @@ iris_bufmgr_init(struct gen_device_info *devinfo, int fd) STATIC_ASSERT(IRIS_MEMZONE_SHADER_START == 0ull); const uint64_t _4GB = 1ull << 32; + /* The STATE_BASE_ADDRESS size field can only hold 1 page shy of 4GB */ + const uint64_t _4GB_minus_1 = _4GB - PAGE_SIZE; + util_vma_heap_init(&bufmgr->vma_allocator[IRIS_MEMZONE_SHADER], - PAGE_SIZE, _4GB - PAGE_SIZE); + PAGE_SIZE, _4GB_minus_1 - PAGE_SIZE); util_vma_heap_init(&bufmgr->vma_allocator[IRIS_MEMZONE_SURFACE], IRIS_MEMZONE_SURFACE_START, - _4GB - IRIS_MAX_BINDERS * IRIS_BINDER_SIZE); + _4GB_minus_1 - IRIS_MAX_BINDERS * IRIS_BINDER_SIZE); util_vma_heap_init(&bufmgr->vma_allocator[IRIS_MEMZONE_DYNAMIC], IRIS_MEMZONE_DYNAMIC_START + IRIS_BORDER_COLOR_POOL_SIZE, - _4GB - IRIS_BORDER_COLOR_POOL_SIZE); + _4GB_minus_1 - IRIS_BORDER_COLOR_POOL_SIZE); util_vma_heap_init(&bufmgr->vma_allocator[IRIS_MEMZONE_OTHER], IRIS_MEMZONE_OTHER_START, gtt_size - IRIS_MEMZONE_OTHER_START); -- 2.30.2