Revision 209887

Mark Tinguely marktinguely at gmail.com
Tue Jul 13 14:42:26 UTC 2010


pmap_qenter() is pretty expensive on the ARM processor with VIPT caches, 
because remapping a KVA can potentially cause the shared mappings to 
have their cache turned back on and then immediately turned back off and 
force a cache flush. Revision 209887 makes amd64/i386 pmap_qenter() make 
smart decisions on the remapping which would help the ARM.

Looking at the buffer code 2 or 3 weeks ago, and  noticed that most of 
the pmap_qenter() calls were done wisely. At that time, I was wondering 
if we could/should fix the few places that involved a page by page loop 
doing bogus_page substitutions and then calling pmap_qenter() for a full 
buffer re-map instead of the changed page. It appeared to me that we 
call pmap_qenter() L*B times where L is the number of pages in the 
buffer and B is the number of bogus pages in the buffer. We only need to 
change B pages. I can understand it would not be worth the change if 
typically the number of pages in a buffer and the number of bogus pages 
in the buffer is small.

--Mark.


More information about the freebsd-arm mailing list