Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 May 2023 20:41:32 GMT
From:      Christos Margiolis <christos@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 855ade9e722a - main - kinst: be explicit about trampoline placement
Message-ID:  <202305252041.34PKfWd7086008@gitrepo.freebsd.org>

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

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

commit 855ade9e722a5c3f7363f5f78798bdfedadb1005
Author:     Christos Margiolis <christos@FreeBSD.org>
AuthorDate: 2023-05-25 20:40:46 +0000
Commit:     Christos Margiolis <christos@FreeBSD.org>
CommitDate: 2023-05-25 20:40:46 +0000

    kinst: be explicit about trampoline placement
    
    The current implementation and comment was specific to amd64. Even
    though in the case of kinst's supported architectures (RISC-V and ARM64)
    VM_MIN_KERNEL_ADDRESS is equal to KERNBASE, it's better to be explicit.
    
    Reviewed by:    markj
    Approved by:    markj (mentor)
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D40266
---
 sys/cddl/dev/kinst/trampoline.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)

diff --git a/sys/cddl/dev/kinst/trampoline.c b/sys/cddl/dev/kinst/trampoline.c
index 5575503f60fb..75efd022fb20 100644
--- a/sys/cddl/dev/kinst/trampoline.c
+++ b/sys/cddl/dev/kinst/trampoline.c
@@ -68,15 +68,22 @@ kinst_trampchunk_alloc(void)
 
 	sx_assert(&kinst_tramp_sx, SX_XLOCKED);
 
+#ifdef __amd64__
 	/*
-	 * Allocate virtual memory for the trampoline chunk. The returned
-	 * address is saved in "trampaddr".  To simplify population of
-	 * trampolines, we follow the amd64 kernel's code model and allocate
-	 * them above KERNBASE, i.e., in the top 2GB of the kernel's virtual
-	 * address space.  Trampolines must be executable so max_prot must
-	 * include VM_PROT_EXECUTE.
+	 * To simplify population of trampolines, we follow the amd64 kernel's
+	 * code model and allocate them above KERNBASE, i.e., in the top 2GB of
+	 * the kernel's virtual address space (not the case for other
+	 * platforms).
 	 */
 	trampaddr = KERNBASE;
+#else
+	trampaddr = VM_MIN_KERNEL_ADDRESS;
+#endif
+	/*
+	 * Allocate virtual memory for the trampoline chunk. The returned
+	 * address is saved in "trampaddr". Trampolines must be executable so
+	 * max_prot must include VM_PROT_EXECUTE.
+	 */
 	error = vm_map_find(kernel_map, NULL, 0, &trampaddr,
 	    KINST_TRAMPCHUNK_SIZE, 0, VMFS_ANY_SPACE, VM_PROT_ALL, VM_PROT_ALL,
 	    0);



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