Changeset View
Changeset View
Standalone View
Standalone View
head/sys/vm/vm_kern.c
Show First 20 Lines • Show All 229 Lines • ▼ Show 20 Lines | |||||
vm_offset_t | vm_offset_t | ||||
kmem_alloc_attr(vm_size_t size, int flags, vm_paddr_t low, vm_paddr_t high, | kmem_alloc_attr(vm_size_t size, int flags, vm_paddr_t low, vm_paddr_t high, | ||||
vm_memattr_t memattr) | vm_memattr_t memattr) | ||||
{ | { | ||||
struct vm_domainset_iter di; | struct vm_domainset_iter di; | ||||
vm_offset_t addr; | vm_offset_t addr; | ||||
int domain; | int domain; | ||||
vm_domainset_iter_malloc_init(&di, kernel_object, &domain, &flags); | vm_domainset_iter_policy_init(&di, DOMAINSET_RR(), &domain, &flags); | ||||
do { | do { | ||||
addr = kmem_alloc_attr_domain(domain, size, flags, low, high, | addr = kmem_alloc_attr_domain(domain, size, flags, low, high, | ||||
memattr); | memattr); | ||||
if (addr != 0) | if (addr != 0) | ||||
break; | break; | ||||
} while (vm_domainset_iter_malloc(&di, &domain, &flags) == 0); | } while (vm_domainset_iter_policy(&di, &domain) == 0); | ||||
return (addr); | return (addr); | ||||
} | } | ||||
/* | /* | ||||
* Allocates a region from the kernel address map and physically | * Allocates a region from the kernel address map and physically | ||||
* contiguous pages within the specified address range to the kernel | * contiguous pages within the specified address range to the kernel | ||||
* object. Creates a wired mapping from this region to these pages, and | * object. Creates a wired mapping from this region to these pages, and | ||||
▲ Show 20 Lines • Show All 61 Lines • ▼ Show 20 Lines | |||||
vm_offset_t | vm_offset_t | ||||
kmem_alloc_contig(vm_size_t size, int flags, vm_paddr_t low, vm_paddr_t high, | kmem_alloc_contig(vm_size_t size, int flags, vm_paddr_t low, vm_paddr_t high, | ||||
u_long alignment, vm_paddr_t boundary, vm_memattr_t memattr) | u_long alignment, vm_paddr_t boundary, vm_memattr_t memattr) | ||||
{ | { | ||||
struct vm_domainset_iter di; | struct vm_domainset_iter di; | ||||
vm_offset_t addr; | vm_offset_t addr; | ||||
int domain; | int domain; | ||||
vm_domainset_iter_malloc_init(&di, kernel_object, &domain, &flags); | vm_domainset_iter_policy_init(&di, DOMAINSET_RR(), &domain, &flags); | ||||
do { | do { | ||||
addr = kmem_alloc_contig_domain(domain, size, flags, low, high, | addr = kmem_alloc_contig_domain(domain, size, flags, low, high, | ||||
alignment, boundary, memattr); | alignment, boundary, memattr); | ||||
if (addr != 0) | if (addr != 0) | ||||
break; | break; | ||||
} while (vm_domainset_iter_malloc(&di, &domain, &flags) == 0); | } while (vm_domainset_iter_policy(&di, &domain) == 0); | ||||
return (addr); | return (addr); | ||||
} | } | ||||
/* | /* | ||||
* kmem_suballoc: | * kmem_suballoc: | ||||
* | * | ||||
* Allocates a map to manage a subrange | * Allocates a map to manage a subrange | ||||
▲ Show 20 Lines • Show All 64 Lines • ▼ Show 20 Lines | |||||
vm_offset_t | vm_offset_t | ||||
kmem_malloc(vm_size_t size, int flags) | kmem_malloc(vm_size_t size, int flags) | ||||
{ | { | ||||
struct vm_domainset_iter di; | struct vm_domainset_iter di; | ||||
vm_offset_t addr; | vm_offset_t addr; | ||||
int domain; | int domain; | ||||
vm_domainset_iter_malloc_init(&di, kernel_object, &domain, &flags); | vm_domainset_iter_policy_init(&di, DOMAINSET_RR(), &domain, &flags); | ||||
do { | do { | ||||
addr = kmem_malloc_domain(domain, size, flags); | addr = kmem_malloc_domain(domain, size, flags); | ||||
if (addr != 0) | if (addr != 0) | ||||
break; | break; | ||||
} while (vm_domainset_iter_malloc(&di, &domain, &flags) == 0); | } while (vm_domainset_iter_policy(&di, &domain) == 0); | ||||
return (addr); | return (addr); | ||||
} | } | ||||
/* | /* | ||||
* kmem_back_domain: | * kmem_back_domain: | ||||
* | * | ||||
* Allocate physical pages from the specified domain for the specified | * Allocate physical pages from the specified domain for the specified | ||||
▲ Show 20 Lines • Show All 415 Lines • Show Last 20 Lines |