Subject: arm32 pmap changes
To: None <>
From: Chris Gilbert <>
List: tech-kern
Date: 06/22/2001 00:47:11

Just a long(originally it was going to be quick :) email to let people know 
that I'm going to start submitting changes to pmap.  I plan to do it in small 
changes, mainly to make my life easier if I break something I can go back to 
the last good version easily ;)  Should also help people see what's changing 
in bite sized chunks :)  My plan is to build things up slowly, and 
implement/add functions as needed/logical.  Should also mean no breakage, 
note that I plan to test changes on my cats and RPC.  Also means that if 
other things stop me getting doing work on the pmap, we'll have some gain in 

Over the next few days I'm planning:
use a pool for the pmap structs, should improve performance (will benchmark 
to confirm this)

clean up pmap struct, (has a couple of seemingly dead entries in it, 
pm_unused1 and pm_dref, need to verify they really are dead (cats thinks 
they're dead though)

implement pmap_map_ptes and unmap_ptes.  This is based on Richard's version.  
I plan to use if for pmap_remove initially.  Expanding it into pmap_enter and 

Use Richard's diff to improve vac_me_harder code.

Add a list of pmaps currently in use (prerequisite for doing work on growing 
the kernel VM space using pmap_growkernel)

comments on how stuff works, it's taken a lot of reading for me to figure out 
how things work (Design and implementation of 4.4 BSD book and white paper on 
UVM being the main references)

The above should help performance of the pmap, possibly not by much, but I'll 
keep working on it.

Areas I'm investigating are:
should we have a uvm_object inside the pmap struct, on i386 all 
uvm_pagealloc's to do with a pmap use this uvm_object.  Is it just a way of 
book keeping those pages?  Or is it needed to make get_ptp work well?

How to delay doing actions on the pmap, IE make use of pmap_update, however 
I'm not sure if pmap_update is properly supported in the kernel as a whole 

How to implement pmap_growkernel for arm32.

Any advice or hints on the above would be gratefully received :)