cvs commit: src/sys/arm/arm pmap.c src/sys/arm/include pmap.h

Olivier Houchard cognet at FreeBSD.org
Wed Jan 30 16:05:41 PST 2008


cognet      2008-01-31 00:05:40 UTC

  FreeBSD src repository

  Modified files:
    sys/arm/arm          pmap.c 
    sys/arm/include      pmap.h 
  Log:
  Bring in the nice work from Mark Tinguely on arm pmap.
  The only downside is that it renames pmap_vac_me_harder() to pmap_fix_cache().
  From Mark's email on -arm :
  pmap_get_vac_flags(), pmap_vac_me_harder(), pmap_vac_me_kpmap(), and
  pmap_vac_me_user() has been rewritten as pmap_fix_cache() to be more
  efficient in the kernel map case. I also removed the reference to
  the md.kro_mappings, md.krw_mappings, md.uro_mappings, and md.urw_mappings
  counts.
  
  In pmap_clearbit(), we can also skip over tests and writeback/invalidations
  in the PVF_MOD and PVF_REF cases if those bits are not set in the pv_flag.
  PVF_WRITE will turn caching back on and remove the PV_MOD bit.
  
  In pmap_nuke_pv(), the vm_page_flag_clear(pg, PG_WRITEABLE) has been moved
  to the pmap_fix_cache().
  
  We can be more agressive in attempting to turn caching back on by calling
  pmap_fix_cache() at times that may be appropriate to turn cache on
  (a kernel mapping has been removed, a write has been removed or a read
  has been removed and we know the mapping does not have multiple write
  mappings to a page).
  
  In pmap_remove_pages() the cpu_idcache_wbinv_all() is moved to happen
  before the page tables are NULLed because the caches are virtually
  indexed and virtually tagged.
  
  In pmap_remove_all(), the pmap_remove_write(m) is added before the
  page tables are NULLed because the caches are virtually indexed and
  virtually tagged. This also removes the need for the caches fixing routine
  (whichever is being used pmap_vac_me_harder() or pmap_fix_cache()) to be
  called on any of these mappings.
  
  In pmap_remove(), I simplified the cache cleaning process and removed
  extra TLB removals. Basically if more than PMAP_REMOVE_CLEAN_LIST_SIZE
  are removed, then just flush the entire cache.
  
  Revision  Changes    Path
  1.98      +181 -417  src/sys/arm/arm/pmap.c
  1.28      +2 -15     src/sys/arm/include/pmap.h


More information about the cvs-all mailing list