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

Function uma_prealloc

freebsd/vm/uma_core.c:4898–4933  ·  view source on GitHub ↗

See uma.h */

Source from the content-addressed store, hash-verified

4896
4897/* See uma.h */
4898void
4899uma_prealloc(uma_zone_t zone, int items)
4900{
4901 struct vm_domainset_iter di;
4902 uma_domain_t dom;
4903 uma_slab_t slab;
4904 uma_keg_t keg;
4905 int aflags, domain, slabs;
4906
4907 KEG_GET(zone, keg);
4908 slabs = howmany(items, keg->uk_ipers);
4909 while (slabs-- > 0) {
4910 aflags = M_NOWAIT;
4911 vm_domainset_iter_policy_ref_init(&di, &keg->uk_dr, &domain,
4912 &aflags);
4913 for (;;) {
4914 slab = keg_alloc_slab(keg, zone, domain, M_WAITOK,
4915 aflags);
4916 if (slab != NULL) {
4917 dom = &keg->uk_domain[slab->us_domain];
4918 /*
4919 * keg_alloc_slab() always returns a slab on the
4920 * partial list.
4921 */
4922 LIST_REMOVE(slab, us_link);
4923 LIST_INSERT_HEAD(&dom->ud_free_slab, slab,
4924 us_link);
4925 dom->ud_free_slabs++;
4926 KEG_UNLOCK(keg, slab->us_domain);
4927 break;
4928 }
4929 if (vm_domainset_iter_policy(&di, &domain) != 0)
4930 vm_wait_doms(&keg->uk_dr.dr_policy->ds_mask, 0);
4931 }
4932 }
4933}
4934
4935/*
4936 * Returns a snapshot of memory consumption in bytes.

Callers 8

sigqueue_startFunction · 0.85
devinitFunction · 0.85
vntblinitFunction · 0.85
vmem_startupFunction · 0.85
vm_map_startupFunction · 0.85
_vm_map_unlockFunction · 0.85
pbuf_zsecond_createFunction · 0.85
pbuf_preallocFunction · 0.85

Calls 4

keg_alloc_slabFunction · 0.85
vm_domainset_iter_policyFunction · 0.70
vm_wait_domsFunction · 0.70

Tested by

no test coverage detected