1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-31 16:57:10 +00:00

Remove uncessary cache and TLB maintenance ops.

- These were needed on armv4/5 (VIVT cache), not needed on armv6.
 - The wbinv_all call can't be used on SMP systems; cache operations by
   set/way are not broadcast to other cores.
 - The TLB maintenance operations needed for pmap_growkernel() happen in
   pmap_grow_l2_bucket(), so there's no need to flush all TLB entries at
   the end.
 - There may not be any need for the TLB flush at the beginning of
   pmap_release(), but it's left in for now pending more investigation.

Pointed out by:	   Svatopluk Kraus <onwahe@gmail.com>
Discussed with:	   cognet@
This commit is contained in:
Ian Lepore 2014-04-20 18:21:05 +00:00
parent 273351d497
commit 49f85c3edb
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=264702

View File

@ -1988,8 +1988,6 @@ pmap_release(pmap_t pmap)
{
struct pcb *pcb;
cpu_idcache_wbinv_all();
cpu_l2cache_wbinv_all();
cpu_tlb_flushID();
cpu_cpwait();
if (vector_page < KERNBASE) {
@ -2175,14 +2173,6 @@ pmap_growkernel(vm_offset_t addr)
for (; pmap_curmaxkvaddr < addr; pmap_curmaxkvaddr += L1_S_SIZE)
pmap_grow_l2_bucket(kpmap, pmap_curmaxkvaddr);
/*
* flush out the cache, expensive but growkernel will happen so
* rarely
*/
cpu_dcache_wbinv_all();
cpu_l2cache_wbinv_all();
cpu_tlb_flushD();
cpu_cpwait();
kernel_vm_end = pmap_curmaxkvaddr;
}