git: kernel - Preliminary vm_page hash lookup (2), cleanups, page wiring

Matthew Dillon dillon at
Tue Mar 26 22:32:07 PDT 2019

commit e05899ceef0e1a34c88b6d12dd59538f627df6d4
Author: Matthew Dillon <dillon at>
Date:   Sat Mar 23 15:29:14 2019 -0700

    kernel - Preliminary vm_page hash lookup (2), cleanups, page wiring
    * Correct a bug in vm.fault_quick operation.  Soft-busied pages cannot
      be safely wired or unwired.  This fixes a wire/unwire race related panic.
    * Optimize vm_page_unhold() to normally not have to obtain any spin-locks
      at all, since related pages are almost never in the PQ_HOLD VM page
      queue.  This leaves open a minor race condition where pages with
      a hold_count of 0 can accumulate in PQ_HOLD.
    * Add vm_page_scan_hold() to the pageout daemon.  Unconditionally scan
      PQ_HOLD very slowly to remove any pages whos hold_count is 0.
    * REFACTOR PAGE WIRING.  Wiring vm_page's no longer removes them from
      whatever paging queue they are on.  Instead, proactively remove
      such pages from the queue only when we need to (typically in the
      pageout code).
    * Remove unused PV_FLAG_VMOBJECT.
    * Fix missing atomic-op in pc64/x86_64/efirt.c
    * Do not use m->md.pv_list for pagetable pages.  It is now only used for
      terminal pages.
    * Properly initialize pv_flags to 0 when a pv_entry is allocated.
    * Add debugging to detect managed pmap_enter()s without an object.
    * Conditionalize the setting of PG_MAPPED and PG_WRITEABLE in the
      pmap code to avoid unnecessary cpu cache mastership changes.
    * Move assertions in vm_pageout.c that could trigger improperly due
      to a race.

Summary of changes:
 sys/platform/pc64/include/pmap.h |  3 +-
 sys/platform/pc64/x86_64/efirt.c |  2 +-
 sys/platform/pc64/x86_64/pmap.c  | 49 ++++++++++++++++++--
 sys/vm/vm_fault.c                | 55 +++++++++++++++++-----
 sys/vm/vm_page.c                 | 72 ++++++++++++++++++-----------
 sys/vm/vm_page.h                 | 27 +++++++++++
 sys/vm/vm_pageout.c              | 98 ++++++++++++++++++++++++++++++++++------
 7 files changed, 248 insertions(+), 58 deletions(-)

DragonFly BSD source repository

More information about the Commits mailing list