Lines Matching defs:vm_pool

123 static void *srpt_vmem_alloc(srpt_vmem_pool_t *vm_pool, size_t size);
127 static void srpt_vmem_destroy(srpt_vmem_pool_t *vm_pool);
128 static void srpt_vmem_free(srpt_vmem_pool_t *vm_pool, void *vaddr, size_t size);
129 static srpt_mr_t *srpt_reg_mem(srpt_vmem_pool_t *vm_pool, ib_vaddr_t vaddr,
131 static void srpt_vmem_chunk_free(srpt_vmem_pool_t *vm_pool, srpt_mr_t *mr);
133 static int srpt_vmem_mr(srpt_vmem_pool_t *vm_pool, void *vaddr, size_t size,
1411 srpt_vmem_destroy(srpt_vmem_pool_t *vm_pool)
1416 rw_enter(&vm_pool->svp_lock, RW_WRITER);
1417 vmem_destroy(vm_pool->svp_vmem);
1419 chunk = avl_first(&vm_pool->svp_mr_list);
1422 next = AVL_NEXT(&vm_pool->svp_mr_list, chunk);
1423 avl_remove(&vm_pool->svp_mr_list, chunk);
1424 srpt_vmem_chunk_free(vm_pool, chunk);
1428 avl_destroy(&vm_pool->svp_mr_list);
1430 rw_exit(&vm_pool->svp_lock);
1431 rw_destroy(&vm_pool->svp_lock);
1433 kmem_free(vm_pool, sizeof (srpt_vmem_pool_t));
1437 srpt_vmem_alloc(srpt_vmem_pool_t *vm_pool, size_t size)
1443 ASSERT(vm_pool != NULL);
1445 result = vmem_alloc(vm_pool->svp_vmem, size,
1454 rw_enter(&vm_pool->svp_lock, RW_WRITER);
1455 chunklen = vm_pool->svp_chunksize;
1457 if (vm_pool->svp_total_size >= vm_pool->svp_max_size) {
1459 rw_exit(&vm_pool->svp_lock);
1463 if ((vm_pool->svp_total_size + chunklen) > vm_pool->svp_max_size) {
1464 chunklen = vm_pool->svp_max_size - vm_pool->svp_total_size;
1467 next = srpt_vmem_chunk_alloc(vm_pool, chunklen);
1474 if (vmem_add(vm_pool->svp_vmem, (void*)(uintptr_t)next->mr_va,
1476 srpt_vmem_chunk_free(vm_pool, next);
1479 vm_pool->svp_total_size += next->mr_len;
1480 avl_add(&vm_pool->svp_mr_list, next);
1484 rw_exit(&vm_pool->svp_lock);
1486 result = vmem_alloc(vm_pool->svp_vmem, size, VM_NOSLEEP | VM_FIRSTFIT);
1492 srpt_vmem_free(srpt_vmem_pool_t *vm_pool, void *vaddr, size_t size)
1494 vmem_free(vm_pool->svp_vmem, vaddr, size);
1498 srpt_vmem_mr(srpt_vmem_pool_t *vm_pool, void *vaddr, size_t size,
1508 rw_enter(&vm_pool->svp_lock, RW_READER);
1511 nearest = avl_find(&vm_pool->svp_mr_list, &chunk, &where);
1514 nearest = avl_nearest(&vm_pool->svp_mr_list, where,
1533 rw_exit(&vm_pool->svp_lock);
1538 srpt_vmem_chunk_alloc(srpt_vmem_pool_t *vm_pool, ib_memlen_t chunksize)
1554 result = srpt_reg_mem(vm_pool, (ib_vaddr_t)(uintptr_t)chunk,
1567 srpt_vmem_chunk_free(srpt_vmem_pool_t *vm_pool, srpt_mr_t *mr)
1572 srpt_dereg_mem(vm_pool->svp_ioc, mr);
1577 srpt_reg_mem(srpt_vmem_pool_t *vm_pool, ib_vaddr_t vaddr, ib_memlen_t len)
1583 srpt_ioc_t *ioc = vm_pool->svp_ioc;
1597 mr_attr.mr_flags = vm_pool->svp_flags;