From cac0c0849635e2f7eda286b8bd757cc46678c0c1 Mon Sep 17 00:00:00 2001 From: Felix Kuehling Date: Thu, 10 Mar 2016 14:37:53 -0500 Subject: [PATCH] Fix lstopo Lstopo doesn't have system memory mappings at low addresses. Make sure we leave enough GPUVM address space for kernel allocations (currently only CWSR) before the start of the user-managed SVM aperture. Change-Id: Ic197f7bd5a3cfb150a0da2bfdbc848664e7869be --- src/fmm.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/fmm.c b/src/fmm.c index a997becb29..71d980696f 100644 --- a/src/fmm.c +++ b/src/fmm.c @@ -1787,6 +1787,9 @@ err: return ret; } +#define DGPU_APERTURE_ADDR_MIN 0x1000000 /* Leave at least 16MB for kernel */ +#define DGPU_APERTURE_ADDR_INC 0x200000 /* Search in huge-page increments */ + static HSAKMT_STATUS dgpu_mem_init(uint32_t gpu_mem_id, void **base, void **limit) { bool found; @@ -1815,9 +1818,9 @@ static HSAKMT_STATUS dgpu_mem_init(uint32_t gpu_mem_id, void **base, void **limi found = false; for (len = max_vm_limit+1; !found && len >= min_vm_size; len >>= 1) { - for (addr = (void *)TONGA_PAGE_SIZE, ret_addr = NULL; + for (addr = (void *)DGPU_APERTURE_ADDR_MIN, ret_addr = NULL; (HSAuint64)addr + (len >> 1) < max_vm_limit; - addr = (void *)((HSAuint64)addr + TONGA_PAGE_SIZE)) { + addr = (void *)((HSAuint64)addr + DGPU_APERTURE_ADDR_INC)) { ret_addr = reserve_address(addr, len); if (!ret_addr) break;