MCPcopy Create free account
hub / github.com/F-Stack/f-stack / vmem_try_release

Function vmem_try_release

freebsd/kern/subr_vmem.c:1078–1110  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1076}
1077
1078static int
1079vmem_try_release(vmem_t *vm, struct vmem_btag *bt, const bool remfree)
1080{
1081 struct vmem_btag *prev;
1082
1083 MPASS(bt->bt_type == BT_TYPE_FREE);
1084
1085 if (vm->vm_releasefn == NULL)
1086 return (0);
1087
1088 prev = TAILQ_PREV(bt, vmem_seglist, bt_seglist);
1089 MPASS(prev != NULL);
1090 MPASS(prev->bt_type != BT_TYPE_FREE);
1091
1092 if (prev->bt_type == BT_TYPE_SPAN && prev->bt_size == bt->bt_size) {
1093 vmem_addr_t spanaddr;
1094 vmem_size_t spansize;
1095
1096 MPASS(prev->bt_start == bt->bt_start);
1097 spanaddr = prev->bt_start;
1098 spansize = prev->bt_size;
1099 if (remfree)
1100 bt_remfree(vm, bt);
1101 bt_remseg(vm, bt);
1102 bt_remseg(vm, prev);
1103 vm->vm_size -= spansize;
1104 VMEM_CONDVAR_BROADCAST(vm);
1105 bt_freetrim(vm, BT_MAXFREE);
1106 vm->vm_releasefn(vm->vm_arg, spanaddr, spansize);
1107 return (1);
1108 }
1109 return (0);
1110}
1111
1112static int
1113vmem_xalloc_nextfit(vmem_t *vm, const vmem_size_t size, vmem_size_t align,

Callers 2

vmem_xalloc_nextfitFunction · 0.85
vmem_xfreeFunction · 0.85

Calls 3

bt_remfreeFunction · 0.85
bt_remsegFunction · 0.85
bt_freetrimFunction · 0.85

Tested by

no test coverage detected