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.