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

Function vmem_alloc

freebsd/kern/subr_vmem.c:1325–1352  ·  view source on GitHub ↗

* vmem_alloc: allocate resource from the arena. */

Source from the content-addressed store, hash-verified

1323 * vmem_alloc: allocate resource from the arena.
1324 */
1325int
1326vmem_alloc(vmem_t *vm, vmem_size_t size, int flags, vmem_addr_t *addrp)
1327{
1328 const int strat __unused = flags & VMEM_FITMASK;
1329 qcache_t *qc;
1330
1331 flags &= VMEM_FLAGS;
1332 MPASS(size > 0);
1333 MPASS(strat == M_BESTFIT || strat == M_FIRSTFIT || strat == M_NEXTFIT);
1334 if ((flags & M_NOWAIT) == 0)
1335 WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL, "vmem_alloc");
1336
1337 if (size <= vm->vm_qcache_max) {
1338 /*
1339 * Resource 0 cannot be cached, so avoid a blocking allocation
1340 * in qc_import() and give the vmem_xalloc() call below a chance
1341 * to return 0.
1342 */
1343 qc = &vm->vm_qcache[(size - 1) >> vm->vm_quantum_shift];
1344 *addrp = (vmem_addr_t)uma_zalloc(qc->qc_cache,
1345 (flags & ~M_WAITOK) | M_NOWAIT);
1346 if (__predict_true(*addrp != 0))
1347 return (0);
1348 }
1349
1350 return (vmem_xalloc(vm, size, 0, 0, 0, VMEM_ADDR_MIN, VMEM_ADDR_MAX,
1351 flags, addrp));
1352}
1353
1354int
1355vmem_xalloc(vmem_t *vm, const vmem_size_t size0, vmem_size_t align,

Callers 15

nv_alloc_sleep_splFunction · 0.85
nv_alloc_pushpage_splFunction · 0.85
zstd_mempool_allocFunction · 0.85
zstd_dctx_allocFunction · 0.85
fletcher_4_benchmarkFunction · 0.85
kstat_resize_rawFunction · 0.85
kstat_seq_startFunction · 0.85
abd_alloc_chunksFunction · 0.85
abd_alloc_zero_scatterFunction · 0.85

Calls 2

vmem_xallocFunction · 0.85
uma_zallocFunction · 0.50

Tested by

no test coverage detected