The branch main has been updated by kib:

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

commit 76a8b948fee30b90be00faaee441f64703f17711
Author:     Konstantin Belousov <k...@freebsd.org>
AuthorDate: 2025-07-21 11:48:31 +0000
Commit:     Konstantin Belousov <k...@freebsd.org>
CommitDate: 2025-07-22 13:58:53 +0000

    amd64 pmap: add kva_layout.kva_max
    
    And use it instead of manually providing the same value as sentinel in
    code for sysctl vm.pmap.kernel_maps.
    
    Reviewed by:    markj
    Sponsored by:   The FreeBSD Foundation
    Differential revision:  https://reviews.freebsd.org/D51453
---
 sys/amd64/amd64/pmap.c   | 12 ++++++------
 sys/amd64/include/pmap.h |  1 +
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index d8be68cb4f52..13c6df01ccfe 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -481,6 +481,8 @@ vm_paddr_t          KERNend;        /* and the end */
 
 struct kva_layout_s    kva_layout = {
        .kva_min =      KV4ADDR(PML4PML4I, 0, 0, 0),
+       .kva_max =      KV4ADDR(NPML4EPG - 1, NPDPEPG - 1,
+                           NPDEPG - 1, NPTEPG - 1),
        .dmap_low =     KV4ADDR(DMPML4I, 0, 0, 0),
        .dmap_high =    KV4ADDR(DMPML4I + NDMPML4E, 0, 0, 0),
        .lm_low =       KV4ADDR(LMSPML4I, 0, 0, 0),
@@ -501,6 +503,8 @@ struct kva_layout_s kva_layout = {
 
 struct kva_layout_s    kva_layout_la57 = {
        .kva_min =      KV5ADDR(NPML5EPG / 2, 0, 0, 0, 0),      /* == rec_pt */
+       .kva_max =      KV5ADDR(NPML5EPG - 1, NPML4EPG - 1, NPDPEPG - 1,
+                           NPDEPG - 1, NPTEPG - 1),
        .dmap_low =     KV5ADDR(DMPML5I, 0, 0, 0, 0),
        .dmap_high =    KV5ADDR(DMPML5I + NDMPML5E, 0, 0, 0, 0),
        .lm_low =       KV5ADDR(LMSPML5I, 0, 0, 0, 0),
@@ -11896,9 +11900,7 @@ sysctl_kmaps_dump(struct sbuf *sb, struct 
pmap_kernel_map_range *range,
            mode, range->pdpes, range->pdes, range->ptes);
 
        /* Reset to sentinel value. */
-       range->sva = la57 ? KV5ADDR(NPML5EPG - 1, NPML4EPG - 1, NPDPEPG - 1,
-           NPDEPG - 1, NPTEPG - 1) : KV4ADDR(NPML4EPG - 1, NPDPEPG - 1,
-           NPDEPG - 1, NPTEPG - 1);
+       range->sva = kva_layout.kva_max;
 }
 
 /*
@@ -11992,9 +11994,7 @@ sysctl_kmaps(SYSCTL_HANDLER_ARGS)
        sbuf_new_for_sysctl(sb, NULL, PAGE_SIZE, req);
 
        /* Sentinel value. */
-       range.sva = la57 ? KV5ADDR(NPML5EPG - 1, NPML4EPG - 1, NPDPEPG - 1,
-           NPDEPG - 1, NPTEPG - 1) : KV4ADDR(NPML4EPG - 1, NPDPEPG - 1,
-           NPDEPG - 1, NPTEPG - 1);
+       range.sva = kva_layout.kva_max;
 
        /*
         * Iterate over the kernel page tables without holding the kernel pmap
diff --git a/sys/amd64/include/pmap.h b/sys/amd64/include/pmap.h
index 6a4da294c9dc..e2f97442c10f 100644
--- a/sys/amd64/include/pmap.h
+++ b/sys/amd64/include/pmap.h
@@ -557,6 +557,7 @@ pmap_pml5e_index(vm_offset_t va)
 
 struct kva_layout_s {
        vm_offset_t kva_min;
+       vm_offset_t kva_max;
        vm_offset_t dmap_low;   /* DMAP_MIN_ADDRESS */
        vm_offset_t dmap_high;  /* DMAP_MAX_ADDRESS */
        vm_offset_t lm_low;     /* LARGEMAP_MIN_ADDRESS */

Reply via email to