summaryrefslogtreecommitdiff
path: root/sys/kern/kern_malloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_malloc.c')
-rw-r--r--sys/kern/kern_malloc.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c
index a8d42a85d9496..d4ac906714b97 100644
--- a/sys/kern/kern_malloc.c
+++ b/sys/kern/kern_malloc.c
@@ -68,6 +68,7 @@ __FBSDID("$FreeBSD$");
#include <vm/vm.h>
#include <vm/pmap.h>
+#include <vm/vm_domainset.h>
#include <vm/vm_pageout.h>
#include <vm/vm_param.h>
#include <vm/vm_kern.h>
@@ -453,13 +454,13 @@ contigmalloc(unsigned long size, struct malloc_type *type, int flags,
}
void *
-contigmalloc_domain(unsigned long size, struct malloc_type *type,
- int domain, int flags, vm_paddr_t low, vm_paddr_t high,
+contigmalloc_domainset(unsigned long size, struct malloc_type *type,
+ struct domainset *ds, int flags, vm_paddr_t low, vm_paddr_t high,
unsigned long alignment, vm_paddr_t boundary)
{
void *ret;
- ret = (void *)kmem_alloc_contig_domain(domain, size, flags, low, high,
+ ret = (void *)kmem_alloc_contig_domainset(ds, size, flags, low, high,
alignment, boundary, VM_MEMATTR_DEFAULT);
if (ret != NULL)
malloc_type_allocated(type, round_page(size));
@@ -595,9 +596,8 @@ void *
return ((void *) va);
}
-void *
-malloc_domain(size_t size, struct malloc_type *mtp, int domain,
- int flags)
+static void *
+malloc_domain(size_t size, struct malloc_type *mtp, int domain, int flags)
{
int indx;
caddr_t va;
@@ -641,6 +641,24 @@ malloc_domain(size_t size, struct malloc_type *mtp, int domain,
}
void *
+malloc_domainset(size_t size, struct malloc_type *mtp, struct domainset *ds,
+ int flags)
+{
+ struct vm_domainset_iter di;
+ void *ret;
+ int domain;
+
+ vm_domainset_iter_policy_init(&di, ds, &domain, &flags);
+ do {
+ ret = malloc_domain(size, mtp, domain, flags);
+ if (ret != NULL)
+ break;
+ } while (vm_domainset_iter_policy(&di, &domain) == 0);
+
+ return (ret);
+}
+
+void *
mallocarray(size_t nmemb, size_t size, struct malloc_type *type, int flags)
{