git: kernel - Remove MAP_VPAGETABLE

Matthew Dillon dillon at crater.dragonflybsd.org
Thu Jan 7 12:03:46 PST 2021


commit 4d4f84f5f26bf5e9fe4d0761b34a5f1a3784a16f
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Thu Jan 7 11:54:11 2021 -0800

    kernel - Remove MAP_VPAGETABLE
    
    * This will break vkernel support for now, but after a lot of mulling
      there's just no other way forward.  MAP_VPAGETABLE was basically a
      software page-table feature for mmap()s that allowed the vkernel
      to implement page tables without needing hardware virtualization support.
    
    * The basic problem is that the VM system is moving to an extent-based
      mechanism for tracking VM pages entered into PMAPs and is no longer
      indexing individual terminal PTEs with pv_entry's.
    
      This means that the VM system is no longer able to get an exact list of
      PTEs in PMAPs that a particular vm_page is using.  It just has a
      flag 'this page is in at least one pmap' or 'this page is not in any
      pmaps'.  To track down the PTEs, the VM system must run through the
      extents via the vm_map_backing structures hanging off the related
      VM object.
    
      This mechanism does not work with MAP_VPAGETABLE.  Short of scanning
      the entire real pmap, the kernel has no way to reverse-index a page
      that might be indirected through MAP_VPAGETABLE.
    
    * We will need actual hardware mmu virtualization to get the vkernel
      working again.

Summary of changes:
 sys/platform/vkernel64/platform/init.c |   3 +
 sys/sys/mman.h                         |   3 +
 sys/vfs/procfs/procfs_map.c            |   4 -
 sys/vm/vm.h                            |   2 +-
 sys/vm/vm_fault.c                      | 258 +--------------------------------
 sys/vm/vm_map.c                        | 139 +++++-------------
 sys/vm/vm_map.h                        |   8 +-
 sys/vm/vm_mmap.c                       |  32 +---
 sys/vm/vm_object.c                     |   1 -
 sys/vm/vm_vmspace.c                    |   6 +-
 10 files changed, 59 insertions(+), 397 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/4d4f84f5f26bf5e9fe4d0761b34a5f1a3784a16f


-- 
DragonFly BSD source repository


More information about the Commits mailing list