git: eade2001aa9d - main - jemalloc: set LG_VADDR to 64 on amd64

From: Konstantin Belousov <kib_at_FreeBSD.org>
Date: Thu, 26 Sep 2024 23:17:45 UTC
The branch main has been updated by kib:

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

commit eade2001aa9d91440886de8359a4dec9edcde2a9
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2024-09-16 21:09:03 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2024-09-26 22:54:25 +0000

    jemalloc: set LG_VADDR to 64 on amd64
    
    and allow to revert it back to 48 with WITHOUT_JEMALLOC_LG_VADDR_WIDE build
    option.
    
    Reviewed by:    andrew, emaste
    Sponsored by:   Advanced Micro Devices (AMD)
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential revision:  https://reviews.freebsd.org/D46686
---
 contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h | 4 ++++
 lib/libc/stdlib/malloc/jemalloc/Makefile.inc         | 3 +++
 share/mk/src.opts.mk                                 | 1 +
 tools/build/options/WITHOUT_JEMALLOC_LG_VADDR_WIDE   | 5 +++++
 4 files changed, 13 insertions(+)

diff --git a/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h b/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h
index dee4679838d8..e733906bc146 100644
--- a/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h
+++ b/contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h
@@ -39,7 +39,11 @@
 #  define JEMALLOC_TLS_MODEL	__attribute__((tls_model("initial-exec")))
 #endif
 #ifdef __amd64__
+#ifdef _USE_LG_VADDR_WIDE
+#  define LG_VADDR		64
+#else
 #  define LG_VADDR		48
+#endif
 #  define LG_SIZEOF_PTR		3
 #  define JEMALLOC_TLS_MODEL	__attribute__((tls_model("initial-exec")))
 #endif
diff --git a/lib/libc/stdlib/malloc/jemalloc/Makefile.inc b/lib/libc/stdlib/malloc/jemalloc/Makefile.inc
index 1ba7725fe8a8..d916d69f471f 100644
--- a/lib/libc/stdlib/malloc/jemalloc/Makefile.inc
+++ b/lib/libc/stdlib/malloc/jemalloc/Makefile.inc
@@ -5,6 +5,9 @@ JEMALLOCSRCS:= jemalloc.c arena.c background_thread.c base.c bin.c bitmap.c \
 	test_hooks.c ticker.c tsd.c witness.c
 
 CFLAGS+=-I${SRCTOP}/contrib/jemalloc/include
+.if ${MK_JEMALLOC_LG_VADDR_WIDE} != no
+CFLAGS+=-D_USE_LG_VADDR_WIDE
+.endif
 
 .for src in ${JEMALLOCSRCS}
 MISRCS+=jemalloc_${src}
diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk
index f9d94ab663b0..95801cdeecc5 100644
--- a/share/mk/src.opts.mk
+++ b/share/mk/src.opts.mk
@@ -116,6 +116,7 @@ __DEFAULT_YES_OPTIONS = \
     IPFW \
     ISCSI \
     JAIL \
+    JEMALLOC_LG_VADDR_WIDE \
     KDUMP \
     KVM \
     LDNS \
diff --git a/tools/build/options/WITHOUT_JEMALLOC_LG_VADDR_WIDE b/tools/build/options/WITHOUT_JEMALLOC_LG_VADDR_WIDE
new file mode 100644
index 000000000000..9efc4022e9cf
--- /dev/null
+++ b/tools/build/options/WITHOUT_JEMALLOC_LG_VADDR_WIDE
@@ -0,0 +1,5 @@
+Disallow programs to use more than 48 address bits on amd64.
+Incompatible with LA57 mode.
+Enabling this option might result in a slight reduction in memory
+consumption for jemalloc metadata, but also requires disabling LA57
+(if hardware supports it).