参照元†
- struct vm_area_struct *vma
- unsigned long start
- unsigned long end
返り値†
CONFIG_CPU_CACHE_VIPT 無効の場合†
#ifndef CONFIG_CPU_CACHE_VIPT
...(中略)...
#define flush_cache_range(vma,start,end) \
vivt_flush_cache_range(vma,start,end)
- vivt_flush_cache_range を呼ぶ
...(中略)...
CONFIG_CPU_CACHE_VIPT 有効の場合†
linux-2.6.33/arch/arm/include/asm/cacheflush.h†
#else
...(中略)...
extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end);
...(中略)...
#endif
linux-2.6.33/arch/arm/mm/flush.c†
void flush_cache_range(struct vm_area_struct *vma, unsigned long start, unsigned long end)
{
if (cache_is_vivt()) {
vivt_flush_cache_range(vma, start, end);
return;
}
if (cache_is_vipt_aliasing()) {
asm( "mcr p15, 0, %0, c7, c14, 0\n"
" mcr p15, 0, %0, c7, c10, 4"
:
: "r" (0)
: "cc");
}
if (vma->vm_flags & VM_EXEC)
__flush_icache_all();
}
コメント†