git: kernel - Preliminary vm_page hash lookup (2), cleanups, page wiring
Matthew Dillon
dillon at crater.dragonflybsd.org
Tue Mar 26 22:32:07 PDT 2019
commit e05899ceef0e1a34c88b6d12dd59538f627df6d4
Author: Matthew Dillon <dillon at apollo.backplane.com>
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(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/e05899ceef0e1a34c88b6d12dd59538f627df6d4
--
DragonFly BSD source repository
More information about the Commits
mailing list