git: kernel - pmap (i386) - Refactor the foreign pmap mapping

看板DFBSD_commit作者時間16年前 (2009/12/31 04:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
commit c1692ddf9735ab0d85ef3a98b211dbf18f142f81 Author: Matthew Dillon <dillon@apollo.backplane.com> Date: Wed Dec 30 11:38:39 2009 -0800 kernel - pmap (i386) - Refactor the foreign pmap mapping * Remove the global alternative pmap and related hacks. Leave the PTD entry reserved because I really do not want to change the location of MPPTDI (The PDE via which the globaldata array is mapped). * Reserve SMP_MAXCPU (16) PTDs in the kernel page table for per-cpu page table maps. This eats about 64MB of KVM (not 64M of physical memory). * Adjust get_ptbase() in platform/pc32/i386/pmap.c to use the per-cpu map. This greatly simplifies the tracking required to determine when a cpu_invltlb() call is required. get_ptbase() is now MPSAFE but the rest of the pmap system is not, yet. This is a big step though. * Note that because these are PTD mappings and not PTE mappings, each process pmap gets its own set, and because processes may be threaded the new get_ptbase() still WILL NOT safely survive a thread switch. On the otherhand, for vkernels, this inherent (process pmap x NCPU) pagetable mapping cache should work quite efficiently. The vkernel threads running on different physical cpus will get their own page table map cache ptd. Summary of changes: sys/platform/pc32/i386/genassym.c | 1 + sys/platform/pc32/i386/mp_machdep.c | 2 + sys/platform/pc32/i386/pmap.c | 73 ++++++++++++++++++------------- sys/platform/pc32/include/globaldata.h | 4 +- sys/platform/pc32/include/pmap.h | 64 ++++++++++++++++++++-------- 5 files changed, 94 insertions(+), 50 deletions(-) http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/c1692ddf9735ab0d85ef3a98b211dbf18f142f81 -- DragonFly BSD source repository
文章代碼(AID): #1BEx62nA (DFBSD_commit)