Changeset View
Changeset View
Standalone View
Standalone View
sys/vm/uma_core.c
Show First 20 Lines • Show All 1,166 Lines • ▼ Show 20 Lines | |||||
*/ | */ | ||||
static void * | static void * | ||||
page_alloc(uma_zone_t zone, vm_size_t bytes, int domain, uint8_t *pflag, | page_alloc(uma_zone_t zone, vm_size_t bytes, int domain, uint8_t *pflag, | ||||
int wait) | int wait) | ||||
{ | { | ||||
void *p; /* Returned page */ | void *p; /* Returned page */ | ||||
*pflag = UMA_SLAB_KERNEL; | *pflag = UMA_SLAB_KERNEL; | ||||
p = (void *) kmem_malloc_domain(domain, bytes, wait); | p = (void *)kmem_malloc_domainset(DOMAINSET_FIXED(domain), bytes, wait); | ||||
return (p); | return (p); | ||||
} | } | ||||
static void * | static void * | ||||
pcpu_page_alloc(uma_zone_t zone, vm_size_t bytes, int domain, uint8_t *pflag, | pcpu_page_alloc(uma_zone_t zone, vm_size_t bytes, int domain, uint8_t *pflag, | ||||
int wait) | int wait) | ||||
{ | { | ||||
▲ Show 20 Lines • Show All 2,529 Lines • ▼ Show 20 Lines | |||||
uma_zone_exhausted_nolock(uma_zone_t zone) | uma_zone_exhausted_nolock(uma_zone_t zone) | ||||
{ | { | ||||
return (zone->uz_flags & UMA_ZFLAG_FULL); | return (zone->uz_flags & UMA_ZFLAG_FULL); | ||||
} | } | ||||
void * | void * | ||||
uma_large_malloc_domain(vm_size_t size, int domain, int wait) | uma_large_malloc_domain(vm_size_t size, int domain, int wait) | ||||
{ | { | ||||
struct domainset *policy; | |||||
vm_offset_t addr; | vm_offset_t addr; | ||||
uma_slab_t slab; | uma_slab_t slab; | ||||
if (domain != UMA_ANYDOMAIN) { | if (domain != UMA_ANYDOMAIN) { | ||||
/* avoid allocs targeting empty domains */ | /* avoid allocs targeting empty domains */ | ||||
if (VM_DOMAIN_EMPTY(domain)) | if (VM_DOMAIN_EMPTY(domain)) | ||||
domain = UMA_ANYDOMAIN; | domain = UMA_ANYDOMAIN; | ||||
} | } | ||||
slab = zone_alloc_item(slabzone, NULL, domain, wait); | slab = zone_alloc_item(slabzone, NULL, domain, wait); | ||||
if (slab == NULL) | if (slab == NULL) | ||||
return (NULL); | return (NULL); | ||||
if (domain == UMA_ANYDOMAIN) | policy = (domain == UMA_ANYDOMAIN) ? DOMAINSET_RR() : | ||||
addr = kmem_malloc(size, wait); | DOMAINSET_FIXED(domain); | ||||
else | addr = kmem_malloc_domainset(policy, size, wait); | ||||
addr = kmem_malloc_domain(domain, size, wait); | |||||
if (addr != 0) { | if (addr != 0) { | ||||
vsetslab(addr, slab); | vsetslab(addr, slab); | ||||
slab->us_data = (void *)addr; | slab->us_data = (void *)addr; | ||||
slab->us_flags = UMA_SLAB_KERNEL | UMA_SLAB_MALLOC; | slab->us_flags = UMA_SLAB_KERNEL | UMA_SLAB_MALLOC; | ||||
slab->us_size = size; | slab->us_size = size; | ||||
slab->us_domain = vm_phys_domain(PHYS_TO_VM_PAGE( | slab->us_domain = vm_phys_domain(PHYS_TO_VM_PAGE( | ||||
pmap_kextract(addr))); | pmap_kextract(addr))); | ||||
uma_total_inc(size); | uma_total_inc(size); | ||||
▲ Show 20 Lines • Show All 522 Lines • Show Last 20 Lines |