The branch main has been updated by alc:

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

commit d411b285bc293a37e062d8fb15b85212ce16abab
Author:     Alan Cox <a...@freebsd.org>
AuthorDate: 2021-07-12 23:25:37 +0000
Commit:     Alan Cox <a...@freebsd.org>
CommitDate: 2021-07-13 22:33:23 +0000

    pmap: Micro-optimize pmap_remove_pages() on amd64 and arm64
    
    Reduce the live ranges for three variables so that they do not span the
    call to PHYS_TO_VM_PAGE().  This enables the compiler to generate
    slightly smaller machine code.
    
    Reviewed by:    kib, markj
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D31161
---
 sys/amd64/amd64/pmap.c | 14 ++++++++++----
 sys/arm64/arm64/pmap.c | 19 ++++++++++---------
 2 files changed, 20 insertions(+), 13 deletions(-)

diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index f8bd17dc6238..31681e255af1 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -8201,6 +8201,16 @@ pmap_remove_pages(pmap_t pmap)
                                        continue;
                                }
 
+                               /* Mark free */
+                               pc->pc_map[field] |= bitmask;
+
+                               /*
+                                * Because this pmap is not active on other
+                                * processors, the dirty bit cannot have
+                                * changed state since we last loaded pte.
+                                */
+                               pte_clear(pte);
+
                                if (superpage)
                                        pa = tpte & PG_PS_FRAME;
                                else
@@ -8217,8 +8227,6 @@ pmap_remove_pages(pmap_t pmap)
                                    ("pmap_remove_pages: bad tpte %#jx",
                                    (uintmax_t)tpte));
 
-                               pte_clear(pte);
-
                                /*
                                 * Update the vm_page_t clean/reference bits.
                                 */
@@ -8232,8 +8240,6 @@ pmap_remove_pages(pmap_t pmap)
 
                                CHANGE_PV_LIST_LOCK_TO_VM_PAGE(&lock, m);
 
-                               /* Mark free */
-                               pc->pc_map[field] |= bitmask;
                                if (superpage) {
                                        pmap_resident_count_adj(pmap, -NBPDR / 
PAGE_SIZE);
                                        pvh = pa_to_pvh(tpte & PG_PS_FRAME);
diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c
index 7758a84d81d5..8ed1b86bd58c 100644
--- a/sys/arm64/arm64/pmap.c
+++ b/sys/arm64/arm64/pmap.c
@@ -4951,6 +4951,16 @@ pmap_remove_pages(pmap_t pmap)
                                        continue;
                                }
 
+                               /* Mark free */
+                               pc->pc_map[field] |= bitmask;
+
+                               /*
+                                * Because this pmap is not active on other
+                                * processors, the dirty bit cannot have
+                                * changed state since we last loaded pte.
+                                */
+                               pmap_clear(pte);
+
                                pa = tpte & ~ATTR_MASK;
 
                                m = PHYS_TO_VM_PAGE(pa);
@@ -4964,13 +4974,6 @@ pmap_remove_pages(pmap_t pmap)
                                    ("pmap_remove_pages: bad pte %#jx",
                                    (uintmax_t)tpte));
 
-                               /*
-                                * Because this pmap is not active on other
-                                * processors, the dirty bit cannot have
-                                * changed state since we last loaded pte.
-                                */
-                               pmap_clear(pte);
-
                                /*
                                 * Update the vm_page_t clean/reference bits.
                                 */
@@ -4988,8 +4991,6 @@ pmap_remove_pages(pmap_t pmap)
 
                                CHANGE_PV_LIST_LOCK_TO_VM_PAGE(&lock, m);
 
-                               /* Mark free */
-                               pc->pc_map[field] |= bitmask;
                                switch (lvl) {
                                case 1:
                                        pmap_resident_count_dec(pmap,
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to