Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Jun 2025 17:32:40 GMT
From:      Alan Cox <alc@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: b7536f9593a3 - main - arm64 pmap: Simplify pmap_demote_l{2,3}c()
Message-ID:  <202506131732.55DHWeGV009093@gitrepo.freebsd.org>

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

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

commit b7536f9593a30b8253546214f53c9ef063c656a9
Author:     Alan Cox <alc@FreeBSD.org>
AuthorDate: 2025-06-09 06:34:13 +0000
Commit:     Alan Cox <alc@FreeBSD.org>
CommitDate: 2025-06-13 17:31:53 +0000

    arm64 pmap: Simplify pmap_demote_l{2,3}c()
    
    Simplify the loop for remaking the mappings in pmap_demote_l{2,3}c().
    Since the mappings are invalid, we needn't use an atomic read-modify-
    write operation to remake the mappings.  The accessed and dirty bits
    won't concurrently change.
---
 sys/arm64/arm64/pmap.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c
index f8e422848e94..3529314b07c7 100644
--- a/sys/arm64/arm64/pmap.c
+++ b/sys/arm64/arm64/pmap.c
@@ -8662,10 +8662,10 @@ pmap_demote_l2c(pmap_t pmap, pt_entry_t *l2p, vm_offset_t va)
 	/*
 	 * Remake the mappings, updating the accessed and dirty bits.
 	 */
+	l2e = (pmap_load(l2c_start) & ~mask) | nbits;
 	for (tl2p = l2c_start; tl2p < l2c_end; tl2p++) {
-		l2e = pmap_load(tl2p);
-		while (!atomic_fcmpset_64(tl2p, &l2e, (l2e & ~mask) | nbits))
-			cpu_spinwait();
+		pmap_store(tl2p, l2e);
+		l2e += L2_SIZE;
 	}
 	dsb(ishst);
 
@@ -8751,10 +8751,10 @@ pmap_demote_l3c(pmap_t pmap, pt_entry_t *l3p, vm_offset_t va)
 	/*
 	 * Remake the mappings, updating the accessed and dirty bits.
 	 */
+	l3e = (pmap_load(l3c_start) & ~mask) | nbits;
 	for (tl3p = l3c_start; tl3p < l3c_end; tl3p++) {
-		l3e = pmap_load(tl3p);
-		while (!atomic_fcmpset_64(tl3p, &l3e, (l3e & ~mask) | nbits))
-			cpu_spinwait();
+		pmap_store(tl3p, l3e);
+		l3e += L3_SIZE;
 	}
 	dsb(ishst);
 



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