检查此页面以获取Linux内核中可用的刷新方法列表:https
:
//www.kernel.org/doc/documentation/cachetlb.txt
Linux下的缓存和TLB刷新。戴维·米勒
有一套范围冲洗功能
2) flush_cache_range(vma, start, end); change_range_of_page_tables(mm, start, end); flush_tlb_range(vma, start, end);
3)void flush_cache_range(struct vm_area_struct * vma,unsigned long
start,unsigned long end)
Here we are flushing a specific range of (user) virtualaddresses from the cache. After running, there will be noentries in the cache for 'vma->vm_mm' for virtual addresses inthe range 'start' to 'end-1'.
您还可以检查该功能的实现-http://lxr.free-
electrons.com/ident?a=sh;i=flush_cache_range
例如,在手臂上-http://lxr.free-
electrons.com/source/arch/arm/mm/flush.c?a=sh&v=3.13#L67
67 void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end) 68 { 69 if (cache_is_vivt()) { 70 vivt_flush_cache_range(vma, start, end); 71 return; 72 } 73 74 if (cache_is_vipt_aliasing()) { 75 asm( "mcr p15, 0, %0, c7, c14, 0n" 76 " mcr p15, 0, %0, c7, c10, 4" 77 : 78 : "r" (0) 79 : "cc"); 80 } 81 82 if (vma->vm_flags & VM_EXEC) 83 __flush_icache_all(); 84 }


