diff --git a/src/intel/tools/aub_mem.c b/src/intel/tools/aub_mem.c index 5dd1c618443..b4a0f3e418a 100644 --- a/src/intel/tools/aub_mem.c +++ b/src/intel/tools/aub_mem.c @@ -21,6 +21,7 @@ * IN THE SOFTWARE. */ +#include #include #include #include @@ -136,6 +137,23 @@ cmp_phys_mem(const struct rb_node *node, const void *addr) return cmp_uint64(mem->phys_addr, *(uint64_t *)addr); } +static void +check_mmap_result(const void *res) +{ + if (res != MAP_FAILED) + return; + + if (errno == ENOMEM) { + fprintf(stderr, + "Not enough memory available or maximum number of mappings reached. " + "Consider increasing sysctl vm.max_map_count.\n"); + } else { + perror("mmap"); + } + + abort(); +} + static struct phys_mem * ensure_phys_mem(struct aub_mem *mem, uint64_t phys_addr) { @@ -151,7 +169,7 @@ ensure_phys_mem(struct aub_mem *mem, uint64_t phys_addr) new_mem->data = mmap(NULL, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, mem->mem_fd, new_mem->fd_offset); - assert(new_mem->data != MAP_FAILED); + check_mmap_result(new_mem->data); rb_tree_insert_at(&mem->mem, node, &new_mem->node, cmp < 0); node = &new_mem->node; @@ -268,7 +286,7 @@ aub_mem_get_ggtt_bo(void *_mem, uint64_t address) bo.addr = MIN2(address, start->virt_addr); bo.size = last->virt_addr - bo.addr + 4096; bo.map = mmap(NULL, bo.size, PROT_READ, MAP_SHARED | MAP_ANONYMOUS, -1, 0); - assert(bo.map != MAP_FAILED); + check_mmap_result(bo.map); for (struct ggtt_entry *i = start; i; @@ -280,10 +298,9 @@ aub_mem_get_ggtt_bo(void *_mem, uint64_t address) continue; uint32_t map_offset = i->virt_addr - address; - ASSERTED void *res = - mmap((uint8_t *)bo.map + map_offset, 4096, PROT_READ, + void *res = mmap((uint8_t *)bo.map + map_offset, 4096, PROT_READ, MAP_SHARED | MAP_FIXED, mem->mem_fd, phys_mem->fd_offset); - assert(res != MAP_FAILED); + check_mmap_result(res); } add_gtt_bo_map(mem, bo, false, true); @@ -346,10 +363,9 @@ aub_mem_get_ppgtt_bo(void *_mem, uint64_t address) for (uint64_t page = address; page < end; page += 4096) { struct phys_mem *phys_mem = ppgtt_walk(mem, mem->pml4, page); - ASSERTED void *res = - mmap((uint8_t *)bo.map + (page - bo.addr), 4096, PROT_READ, + void *res = mmap((uint8_t *)bo.map + (page - bo.addr), 4096, PROT_READ, MAP_SHARED | MAP_FIXED, mem->mem_fd, phys_mem->fd_offset); - assert(res != MAP_FAILED); + check_mmap_result(res); } add_gtt_bo_map(mem, bo, true, true);