From nobody Mon Apr 13 14:24:04 2026 X-Original-To: dev-commits-src-all@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 4fvV5d2pG5z6ZFP3 for ; Mon, 13 Apr 2026 14:24:05 +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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fvV5c6j6jz3qyy for ; Mon, 13 Apr 2026 14:24:04 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776090245; 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=vdC+iHO8MES5lVr69Bvf9fkX1I+eBvWzQ8wCwULZVAg=; b=BknqVt9rNC2Sw68RsyHUQDu4q4+GUypMgfIQVxk/D4bAkH79a7L+2n+XVP4F6e7QXZRTnK z8jBkxMNuObQdyoLEm0p228KUAYcigkKV64PNyVaM0NkrLryrVq6xNvKk7Dxv+djL0+x5I TP9I1U4pau9DE8+6vvw22cNN2kZX9zh85M9AGSKQD9ErX4OxIW08nigRZURp7FfdLsqaAs D2OE/CJnOGQp08o24zLg8+iash5++Ha77OGihMWzjQVqkGoJpRCNzVSkAb5UJxkCqhkvVV GovwLZTCbY/zqj/1LyoxpbyuSmjJVFD5VZ9XBXkvUhr2fFEV6aPH6cWkSyWWew== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1776090245; a=rsa-sha256; cv=none; b=cwQXMktjCB6RyeoiZbbTGMhWobsfyglRoNSORl6RLVA+Qayx2huGw71pBujIFG4SzTN9/P u18qS+6EITYRdHFygWJfOwmQqVUbD8s3hPzBIr+BdswRDIiewZDi6hjqk273r45LZk/Ig3 XLh2I1RXTpvdRdzRR1J53v7FkFMvuNHoNPGh2nQw8xY9J9I9+X3sm3RoQvkYP3bfcmQNy3 nGN0KX7Akw6yD57uHuCexuwTHQNek9bTG93OiitjrH3VBtFcvIkd2C1687d6nWs1gjAMJN zfpAw9FLX5gYp61dsdB7/cbBxQJ0RBSIBEoBsjoBm9Vw+9K0kZmBsDGWSB71EA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1776090245; 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=vdC+iHO8MES5lVr69Bvf9fkX1I+eBvWzQ8wCwULZVAg=; b=Fbc9fixWdAe/MDW1iRjUHkfUaLPK6+UfKz1SqCadPSFKohenbL9A2w4Ap75xmB3a4MY2rr 2XoAPAfGLYPVz9u6e8Mah1r6t9nbUWkhmGwERtfWx0TYvlqRSw2XGAba+1iuOn55G+6r6h AL13PBdM5/l7hMzUO4sIbVdEYHupudVdmIWNsdEPcbdGzGfecghdDogZfoP1HMAF1sTVEB 7/vUFR6DxcEedqThfKtGG53+bbbuZM43cv5KdXDKj6+qapNy/7jJGf8Co9NWZhG7ChWi4z XPh2vZ6GgJ4Fb+ZEzxBaBBp08em5hmbRQ7kUTyKLqFAwUIGbPD6Y19Ka1i0tJA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fvV5c5dfYz16k4 for ; Mon, 13 Apr 2026 14:24:04 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 46530 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 13 Apr 2026 14:24:04 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Andrew Turner Subject: git: c208439cdb58 - main - arm64: Add a cmap page to pmap List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: andrew X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c208439cdb588d91aead9403cec3d4acf4a8bebf Auto-Submitted: auto-generated Date: Mon, 13 Apr 2026 14:24:04 +0000 Message-Id: <69dcfc84.46530.22f71c34@gitrepo.freebsd.org> The branch main has been updated by andrew: URL: https://cgit.FreeBSD.org/src/commit/?id=c208439cdb588d91aead9403cec3d4acf4a8bebf commit c208439cdb588d91aead9403cec3d4acf4a8bebf Author: Andrew Turner AuthorDate: 2026-04-13 11:50:32 +0000 Commit: Andrew Turner CommitDate: 2026-04-13 14:23:05 +0000 arm64: Add a cmap page to pmap When modifying mappings in pmap we may need to perform a break-before-make sequence. This creates an invalid mapping, then recreates it with the changes. When modifying DMAP mappings we may be changing the mapping that contains its own page table then after breaking the old entry we are unable to create the new entry. To fix this create a map that can be used & won't be affected by the break-before-make sequence. Reviewed by: kib Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D56306 --- sys/arm64/arm64/pmap.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c index 678030f827dd..7d19c927d369 100644 --- a/sys/arm64/arm64/pmap.c +++ b/sys/arm64/arm64/pmap.c @@ -290,6 +290,10 @@ VM_PAGE_TO_PV_LIST_LOCK(vm_page_t m) #define PTE_TO_VM_PAGE(pte) PHYS_TO_VM_PAGE(PTE_TO_PHYS(pte)) #define VM_PAGE_TO_PTE(m) PHYS_TO_PTE(VM_PAGE_TO_PHYS(m)) +static struct mtx cmap_lock; +static void *cmap1_addr; +static pt_entry_t *cmap1_pte; + /* * The presence of this flag indicates that the mapping is writeable. * If the ATTR_S1_AP_RO bit is also set, then the mapping is clean, otherwise @@ -1363,7 +1367,7 @@ pmap_bootstrap(void) virtual_avail = preinit_map_va + PMAP_PREINIT_MAPPING_SIZE; virtual_avail = roundup2(virtual_avail, L1_SIZE); - virtual_end = VM_MAX_KERNEL_ADDRESS - PMAP_MAPDEV_EARLY_SIZE; + virtual_end = VM_MAX_KERNEL_ADDRESS - PMAP_MAPDEV_EARLY_SIZE - L2_SIZE; kernel_vm_end = virtual_avail; /* @@ -1419,6 +1423,19 @@ pmap_bootstrap(void) alloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE); msgbufp = (void *)msgbufpv; + /* Allocate space for the CPU0 CMAP */ + bs_state.va = virtual_end; + pmap_bootstrap_l2_table(&bs_state); + pmap_store(&bs_state.l3[pmap_l3_index(bs_state.va)], + PHYS_TO_PTE(pmap_early_vtophys((vm_offset_t)bs_state.l3)) | + ATTR_AF | pmap_sh_attr | ATTR_S1_XN | ATTR_KERN_GP | + ATTR_S1_IDX(VM_MEMATTR_WRITE_BACK) | L3_PAGE); + dsb(ishst); + + mtx_init(&cmap_lock, "SYSMAPS", NULL, MTX_DEF); + cmap1_addr = (void *)(virtual_end + L3_SIZE); + cmap1_pte = &bs_state.l3[pmap_l3_index((vm_offset_t)cmap1_addr)]; + pa = pmap_early_vtophys(bs_state.freemempos); physmem_exclude_region(start_pa, pa - start_pa, EXFLAG_NOALLOC);