nvmm: Port to DragonFly #24: pmap transform & TLB invalidation
authorAaron LI <aly@aaronly.me>
Sun, 6 Jun 2021 11:31:54 +0000 (19:31 +0800)
committerAaron LI <aly@aaronly.me>
Tue, 20 Jul 2021 23:28:22 +0000 (07:28 +0800)
commit3ecc20a00d040552c4244a2ec7848d16c6af5e15
tree9a8f3a3e8ad058c1518c9a98369ec6e6f9afea20
parentbb11cce638499f3152a08842a30640ee016c7b61
nvmm: Port to DragonFly #24: pmap transform & TLB invalidation

* Port NetBSD's pmap_ept_transform() to DragonFly's.  We don't make
  'pmap_ept_has_ad' a global in the pmap code, so need to pass extra
  flags to our pmap_ept_transform().

* Replace NetBSD's pmap_tlb_shootdown() with our pmap_inval_smp().

* Add two new fields 'pm_data' & 'pm_tlb_flush' to 'struct pmap', which
  are used as a callback by NVMM to handle its own TLB invalidation.

  Note that pmap_enter() also calls pmap_inval_smp() on EPT/NPT pmap
  and requires the old PTE be returned, so we can't place the NVMM TLB
  callback at the beginning part of pmap_inval_smp() and return 0.
sys/dev/virtual/nvmm/x86/nvmm_x86_svm.c
sys/dev/virtual/nvmm/x86/nvmm_x86_vmx.c
sys/platform/pc64/include/pmap.h
sys/platform/pc64/x86_64/pmap.c
sys/platform/pc64/x86_64/pmap_inval.c