Lines Matching defs:hole
1369 remove_hole(struct radv_device *device, union radv_shader_arena_block *hole)
1371 unsigned size_class = get_size_class(hole->size, false);
1372 list_del(&hole->freelist);
1378 add_hole(struct radv_device *device, union radv_shader_arena_block *hole)
1380 unsigned size_class = get_size_class(hole->size, false);
1381 list_addtail(&hole->freelist, &device->shader_free_lists[size_class]);
1423 /* Try to use an existing hole. Unless the shader is very large, this should only have to look
1432 list_for_each_entry(union radv_shader_arena_block, hole,
1435 if (hole->size < size)
1438 assert(hole->offset % RADV_SHADER_ALLOC_ALIGNMENT == 0);
1440 if (size == hole->size) {
1441 remove_hole(device, hole);
1442 hole->freelist.next = ptr;
1444 return hole;
1451 list_addtail(&alloc->list, &hole->list);
1454 alloc->arena = hole->arena;
1455 alloc->offset = hole->offset;
1458 remove_hole(device, hole);
1459 hole->offset += size;
1460 hole->size -= size;
1461 add_hole(device, hole);
1471 union radv_shader_arena_block *alloc = NULL, *hole = NULL;
1495 hole = arena_size - size > 0 ? alloc_block_obj(device) : alloc;
1496 if (!alloc || !hole)
1505 if (hole != alloc) {
1506 hole->arena = arena;
1507 hole->offset = size;
1508 hole->size = arena_size - size;
1510 list_addtail(&hole->list, &arena->entries);
1511 add_hole(device, hole);
1523 free(hole);
1536 union radv_shader_arena_block *hole = list_entry(head, union radv_shader_arena_block, list);
1537 return hole->freelist.prev ? hole : NULL;
1548 union radv_shader_arena_block *hole = alloc;
1550 /* merge with previous hole */
1554 hole_prev->size += hole->size;
1555 list_del(&hole->list);
1556 free_block_obj(device, hole);
1558 hole = hole_prev;
1561 /* merge with next hole */
1565 hole_next->offset -= hole->size;
1566 hole_next->size += hole->size;
1567 list_del(&hole->list);
1568 free_block_obj(device, hole);
1570 hole = hole_next;
1573 if (list_is_singular(&hole->list)) {
1574 struct radv_shader_arena *arena = hole->arena;
1575 free_block_obj(device, hole);
1581 add_hole(device, hole);