The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=58832abd24f03eab62e06cbe3a74304b7bfd950a
commit 58832abd24f03eab62e06cbe3a74304b7bfd950a Author: Konstantin Belousov <k...@freebsd.org> AuthorDate: 2025-07-20 13:23:10 +0000 Commit: Konstantin Belousov <k...@freebsd.org> CommitDate: 2025-07-22 13:59:00 +0000 amd64 sysctl_kmaps_check(): add pml5e arg For now all callers pass zero. Reviewed by: markj Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D51453 --- sys/amd64/amd64/pmap.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 13c6df01ccfe..9805184bd07e 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -11941,12 +11941,18 @@ sysctl_kmaps_reinit(struct pmap_kernel_map_range *range, vm_offset_t va, */ static void sysctl_kmaps_check(struct sbuf *sb, struct pmap_kernel_map_range *range, - vm_offset_t va, pml4_entry_t pml4e, pdp_entry_t pdpe, pd_entry_t pde, - pt_entry_t pte) + vm_offset_t va, pml5_entry_t pml5e, pml4_entry_t pml4e, pdp_entry_t pdpe, + pd_entry_t pde, pt_entry_t pte) { pt_entry_t attrs; - attrs = pml4e & (X86_PG_RW | X86_PG_U | pg_nx); + if (la57) { + attrs = pml5e & (X86_PG_RW | X86_PG_U | pg_nx); + attrs |= pml4e & pg_nx; + attrs &= pg_nx | (pml4e & (X86_PG_RW | X86_PG_U)); + } else { + attrs = pml4e & (X86_PG_RW | X86_PG_U | pg_nx); + } attrs |= pdpe & pg_nx; attrs &= pg_nx | (pdpe & (X86_PG_RW | X86_PG_U)); @@ -12061,8 +12067,8 @@ restart: pa = pdpe & PG_FRAME; if ((pdpe & PG_PS) != 0) { sva = rounddown2(sva, NBPDP); - sysctl_kmaps_check(sb, &range, sva, pml4e, pdpe, - 0, 0); + sysctl_kmaps_check(sb, &range, sva, 0, + pml4e, pdpe, 0, 0); range.pdpes++; sva += NBPDP; continue; @@ -12090,7 +12096,7 @@ restart: if ((pde & PG_PS) != 0) { sva = rounddown2(sva, NBPDR); sysctl_kmaps_check(sb, &range, sva, - pml4e, pdpe, pde, 0); + 0, pml4e, pdpe, pde, 0); range.pdes++; sva += NBPDR; continue; @@ -12115,7 +12121,7 @@ restart: continue; } sysctl_kmaps_check(sb, &range, sva, - pml4e, pdpe, pde, pte); + 0, pml4e, pdpe, pde, pte); range.ptes++; } }