Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 6 Mar 2021 10:41:00 GMT
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: c743a6bd4fc0 - main - Implement mallocarray_domainset(9) variant of mallocarray(9).
Message-ID:  <202103061041.126Af0Eq003184@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by hselasky:

URL: https://cgit.FreeBSD.org/src/commit/?id=c743a6bd4fc0d1be30f9bc9996333ac0ba079563

commit c743a6bd4fc0d1be30f9bc9996333ac0ba079563
Author:     Hans Petter Selasky <hselasky@FreeBSD.org>
AuthorDate: 2021-03-06 10:25:12 +0000
Commit:     Hans Petter Selasky <hselasky@FreeBSD.org>
CommitDate: 2021-03-06 10:38:55 +0000

    Implement mallocarray_domainset(9) variant of mallocarray(9).
    
    Reviewed by:    kib @
    MFC after:      1 week
    Sponsored by:   Mellanox Technologies // NVIDIA Networking
---
 share/man/man9/Makefile |  1 +
 share/man/man9/malloc.9 | 13 ++++++++++++-
 sys/kern/kern_malloc.c  | 11 +++++++++++
 sys/sys/malloc.h        |  3 +++
 4 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/share/man/man9/Makefile b/share/man/man9/Makefile
index 64e234c3d696..fb010231d710 100644
--- a/share/man/man9/Makefile
+++ b/share/man/man9/Makefile
@@ -1391,6 +1391,7 @@ MLINKS+=make_dev.9 destroy_dev.9 \
 MLINKS+=malloc.9 free.9 \
 	malloc.9 malloc_domainset.9 \
 	malloc.9 mallocarray.9 \
+	malloc.9 mallocarray_domainset.9 \
 	malloc.9 MALLOC_DECLARE.9 \
 	malloc.9 MALLOC_DEFINE.9 \
 	malloc.9 realloc.9 \
diff --git a/share/man/man9/malloc.9 b/share/man/man9/malloc.9
index 097688d7ea38..b8c6e504e0c0 100644
--- a/share/man/man9/malloc.9
+++ b/share/man/man9/malloc.9
@@ -29,7 +29,7 @@
 .\" $NetBSD: malloc.9,v 1.3 1996/11/11 00:05:11 lukem Exp $
 .\" $FreeBSD$
 .\"
-.Dd October 30, 2020
+.Dd March 6, 2021
 .Dt MALLOC 9
 .Os
 .Sh NAME
@@ -70,6 +70,8 @@
 .Fn malloc_domainset "size_t size" "struct malloc_type *type" "struct domainset *ds" "int flags"
 .Ft void *
 .Fn malloc_domainset_exec "size_t size" "struct malloc_type *type" "struct domainset *ds" "int flags"
+.Ft void *
+.Fn mallocarray_domainset "size_t nmemb" "size_t size" "struct malloc_type *type" "struct domainset *ds" "int flags"
 .Sh DESCRIPTION
 The
 .Fn malloc
@@ -102,6 +104,15 @@ entries whose size is specified by
 .Fa size .
 .Pp
 The
+.Fn mallocarray_domainset
+variant allocates memory from a specific
+.Xr numa 4
+domain using the specified domain selection policy.
+See
+.Xr domainset 9
+for some example policies.
+.Pp
+The
 .Fn free
 function releases memory at address
 .Fa addr
diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c
index eff9e62c9a10..48383358e3ad 100644
--- a/sys/kern/kern_malloc.c
+++ b/sys/kern/kern_malloc.c
@@ -804,6 +804,17 @@ mallocarray(size_t nmemb, size_t size, struct malloc_type *type, int flags)
 	return (malloc(size * nmemb, type, flags));
 }
 
+void *
+mallocarray_domainset(size_t nmemb, size_t size, struct malloc_type *type,
+    struct domainset *ds, int flags)
+{
+
+	if (WOULD_OVERFLOW(nmemb, size))
+		panic("mallocarray_domainset: %zu * %zu overflowed", nmemb, size);
+
+	return (malloc_domainset(size * nmemb, type, ds, flags));
+}
+
 #ifdef INVARIANTS
 static void
 free_save_type(void *addr, struct malloc_type *mtp, u_long size)
diff --git a/sys/sys/malloc.h b/sys/sys/malloc.h
index 54a05e94a3a2..0c585c5a0dcf 100644
--- a/sys/sys/malloc.h
+++ b/sys/sys/malloc.h
@@ -246,6 +246,9 @@ void	*malloc_domainset(size_t size, struct malloc_type *type,
 void	*mallocarray(size_t nmemb, size_t size, struct malloc_type *type,
 	    int flags) __malloc_like __result_use_check
 	    __alloc_size2(1, 2);
+void	*mallocarray_domainset(size_t nmemb, size_t size, struct malloc_type *type,
+	    struct domainset *ds, int flags) __malloc_like __result_use_check
+	    __alloc_size2(1, 2);
 void	*malloc_exec(size_t size, struct malloc_type *type, int flags) __malloc_like
 	    __result_use_check __alloc_size(1);
 void	*malloc_domainset_exec(size_t size, struct malloc_type *type,



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202103061041.126Af0Eq003184>