From nobody Tue Jul 22 14:03:09 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4bmf9q23frz5pRlM; Tue, 22 Jul 2025 14:03:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bmf9p0yQNz41Bs; Tue, 22 Jul 2025 14:03:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1753192990; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=uYddQeRStcCtNBGAr85q7HfkZUXjxWtIipUXod6BN+U=; b=WLm+PrCIHKCg/a7gUPYnIKuPa0NoxItc5BJJHAgg1ePdleiIRJRxatYeYxPIlwbFrwC6mi kicaAbVJWpFr+OKsaBUOdvur151WxP6lTlSIrPPvaHc+asFvZ9MC0aOq9iGae8n9rZKt8c 34mG+F8iFW4Q9OrqahO575BRlZZPdCrVifXv0R/yzesRfI7w+85hF+Z1J7I7tBGuA0EnNv PLsH54fgSMw2mNAlbCmpbja/r9kC6ifwZWNdldRc8BrFYAap4uzQBveEoFmGosUk+sqK+m uhtUeW+Mu2lx7rphrpjRiW6xzJh4Xsnrpl5tucD9+PdhZ/G62xgXokn+5vDlJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1753192990; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=uYddQeRStcCtNBGAr85q7HfkZUXjxWtIipUXod6BN+U=; b=hRptxdGpI2xdAkwJqjM3Ofs/zQIFiLAp8TldzoB03b/svQdcKZebDVEIZZdghdxh7DWrX6 OyF8YF6wZr33y8wYd9UR6PqcQWG6iuyOJzmH7IOfHDtgWaogc8PT15DbMgjrLMgVSO3TgW CceNYsgoRszSRmBPAY58033rHIX2fYxObohQ765mvWYXVTQeO5myXrWUfJvK5FGfhtJJfo IXWQBoin/T0J4GB7SeS3cw2m4Rmm/mc9vJ9OloCzqfpD8eVL05kI1erepeW7SWrSA9f/Of ks6ZSjyqcNzUi6DADxRY5Tgxk3FyW40ZPz3nlX8KO+YYyCOZIzYrrZi+SaZG0Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1753192990; a=rsa-sha256; cv=none; b=W1JUQYezDUbv0xj/qkqY4PhKB+VxCHo6xMi74wSfaYWw73xSQWflxznDOjZZIo8Mm5y2be UGmtyuf/EM8qO9zLveJRnXppmN6t9wkHJPJ3S8cC0vgE0FRyaqjOqsK+fogwWLgyht4hAS zaTYmusj/L+y0Do/w4SyKsZjLzPynZkr/Doezczp1GI0PWOzCayTRkfDiyL/cI3t6iS46K gtGhHwNixOK6BOXAOtJ4Vve4Z3SRm/PBSDP7GlB/KoLZ3y392mcaPkXGzdWX4eyh7dkpUl vBseWsHQzWszraGIJdsU4Vl2/S8hoFGzjGQbv0YOasMFn9TIqHeaEfpZaj8R8Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bmf9p0THyzVZy; Tue, 22 Jul 2025 14:03:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 56ME39p6071141; Tue, 22 Jul 2025 14:03:09 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 56ME395u071138; Tue, 22 Jul 2025 14:03:09 GMT (envelope-from git) Date: Tue, 22 Jul 2025 14:03:09 GMT Message-Id: <202507221403.56ME395u071138@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: aa78ed925839 - main - amd64 sysctl vm.pmap.kernel_maps: rework List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: aa78ed9258395dac056de77023cc52ebbb9b153d Auto-Submitted: auto-generated The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=aa78ed9258395dac056de77023cc52ebbb9b153d commit aa78ed9258395dac056de77023cc52ebbb9b153d Author: Konstantin Belousov AuthorDate: 2025-07-20 00:57:51 +0000 Commit: Konstantin Belousov CommitDate: 2025-07-22 13:59:17 +0000 amd64 sysctl vm.pmap.kernel_maps: rework Iterate over the KVA instead of the pml4 indexes. Otherwise, we would need to iterate of pml5 indexes for LA57 and then either use secondary loop for pml4 entries, or use flat indexes for pml4. It is simpler to have unified loop for both paging modes. Instead of checking pml4 indexes for start of interesting kernel maps, use kva_layout. Again, this makes the printing of heralds independent of the paging mode. Restart the loop iteration when changing address due to canonicalization. This is needed to not miss printing the map herald line. Reviewed by: markj Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D51453 --- sys/amd64/amd64/pmap.c | 66 +++++++++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 6fac8318df05..d1d80afccdc7 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -11985,13 +11985,15 @@ sysctl_kmaps(SYSCTL_HANDLER_ARGS) { struct pmap_kernel_map_range range; struct sbuf sbuf, *sb; + pml5_entry_t pml5e; pml4_entry_t pml4e; pdp_entry_t *pdp, pdpe; pd_entry_t *pd, pde; pt_entry_t *pt, pte; vm_offset_t sva; vm_paddr_t pa; - int error, i, j, k, l; + int error, j, k, l; + bool first; error = sysctl_wire_old_buffer(req, 0); if (error != 0) @@ -12001,6 +12003,7 @@ sysctl_kmaps(SYSCTL_HANDLER_ARGS) /* Sentinel value. */ range.sva = kva_layout.kva_max; + pml5e = 0; /* no UB for la48 */ /* * Iterate over the kernel page tables without holding the kernel pmap @@ -12009,49 +12012,50 @@ sysctl_kmaps(SYSCTL_HANDLER_ARGS) * Within the large map, ensure that PDP and PD page addresses are * valid before descending. */ - for (sva = 0, i = pmap_pml4e_index(sva); i < NPML4EPG; i++) { - switch (i) { - case PML4PML4I: - if (!la57) - sbuf_printf(sb, "\nRecursive map:\n"); - break; - case DMPML4I: - if (!la57) - sbuf_printf(sb, "\nDirect map:\n"); - break; + for (first = true, sva = 0; sva != 0 || first; first = false) { + if (sva == kva_layout.rec_pt) + sbuf_printf(sb, "\nRecursive map:\n"); + else if (sva == kva_layout.dmap_low) + sbuf_printf(sb, "\nDirect map:\n"); #ifdef KASAN - case KASANPML4I: + else if (sva == kva_layout.kasan_shadow_low) sbuf_printf(sb, "\nKASAN shadow map:\n"); - break; #endif #ifdef KMSAN - case KMSANSHADPML4I: + else if (sva == kva_layout.kmsan_shadow_low) sbuf_printf(sb, "\nKMSAN shadow map:\n"); - break; - case KMSANORIGPML4I: + else if (sva == kva_layout.kmsan_origin_low) sbuf_printf(sb, "\nKMSAN origin map:\n"); - break; #endif - case KPML4BASE: + else if (sva == kva_layout.km_low) sbuf_printf(sb, "\nKernel map:\n"); - break; - case LMSPML4I: - if (!la57) - sbuf_printf(sb, "\nLarge map:\n"); - break; - } + else if (sva == kva_layout.lm_low) + sbuf_printf(sb, "\nLarge map:\n"); /* Convert to canonical form. */ if (la57) { - if (sva == 1ul << 56) + if (sva == 1ul << 56) { sva |= -1ul << 57; + continue; + } } else { - if (sva == 1ul << 47) + if (sva == 1ul << 47) { sva |= -1ul << 48; + continue; + } } restart: - pml4e = kernel_pml4[i]; + if (la57) { + pml5e = *pmap_pml5e(kernel_pmap, sva); + if ((pml5e & X86_PG_V) == 0) { + sva = rounddown2(sva, NBPML5); + sysctl_kmaps_dump(sb, &range, sva); + sva += NBPML5; + continue; + } + } + pml4e = *pmap_pml4e(kernel_pmap, sva); if ((pml4e & X86_PG_V) == 0) { sva = rounddown2(sva, NBPML4); sysctl_kmaps_dump(sb, &range, sva); @@ -12072,7 +12076,7 @@ restart: pa = pdpe & PG_FRAME; if ((pdpe & PG_PS) != 0) { sva = rounddown2(sva, NBPDP); - sysctl_kmaps_check(sb, &range, sva, 0, + sysctl_kmaps_check(sb, &range, sva, pml5e, pml4e, pdpe, 0, 0); range.pdpes++; sva += NBPDP; @@ -12085,6 +12089,7 @@ restart: * freed. Validate the next-level address * before descending. */ + sva += NBPDP; goto restart; } pd = (pd_entry_t *)PHYS_TO_DMAP(pa); @@ -12101,7 +12106,7 @@ restart: if ((pde & PG_PS) != 0) { sva = rounddown2(sva, NBPDR); sysctl_kmaps_check(sb, &range, sva, - 0, pml4e, pdpe, pde, 0); + pml5e, pml4e, pdpe, pde, 0); range.pdes++; sva += NBPDR; continue; @@ -12113,6 +12118,7 @@ restart: * may be freed. Validate the * next-level address before descending. */ + sva += NBPDR; goto restart; } pt = (pt_entry_t *)PHYS_TO_DMAP(pa); @@ -12126,7 +12132,7 @@ restart: continue; } sysctl_kmaps_check(sb, &range, sva, - 0, pml4e, pdpe, pde, pte); + pml5e, pml4e, pdpe, pde, pte); range.ptes++; } }