The branch stable/13 has been updated by kib:

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

commit 077d3c4c467e5e27f88b8d70864000f3eb0dab3c
Author:     Konstantin Belousov <[email protected]>
AuthorDate: 2021-10-20 20:30:34 +0000
Commit:     Konstantin Belousov <[email protected]>
CommitDate: 2021-11-04 00:56:39 +0000

    amd64 pmap: adjust the empty pmap optimization in pmap_remove()
    
    (cherry picked from commit 0b3bc7288984c17da00d9f8c29f116d56bf44d35)
---
 sys/amd64/amd64/pmap.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index c759ff840a24..524b40ed2fee 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -6160,9 +6160,14 @@ pmap_remove(pmap_t pmap, vm_offset_t sva, vm_offset_t 
eva)
        PG_V = pmap_valid_bit(pmap);
 
        /*
+        * If there are no resident pages besides the top level page
+        * table page(s), there is nothing to do.  Kernel pmap always
+        * accounts whole preloaded area as resident, which makes its
+        * resident count > 2.
         * Perform an unsynchronized read.  This is, however, safe.
         */
-       if (pmap->pm_stats.resident_count == 0)
+       if (pmap->pm_stats.resident_count <= 1 + (pmap->pm_pmltopu != NULL ?
+           1 : 0))
                return;
 
        anyvalid = 0;

Reply via email to