ARMv8架构下dcache_inval_poc超L1缓存范围的执行疑问
关于arm64架构下dcache_inval_poc函数超范围调用的疑问
我对Linux内核5.15版本中arm64架构的dcache_inval_poc(start, end)实现存在困惑。该函数未对传入的end地址做合法性检查,若上层调用(如dma_sync_single_for_cpu/dma_sync_single_for_device)传入的范围超出L1数据缓存大小——比如调用dcache_inval_poc(start, start+256KB)但L1 D-cache仅为32KB,会出现什么情况?
我梳理了该函数的汇编源码,将其循环逻辑转换为如下C伪代码:
x0_kaddr = start; while (start < end) { dc_civac(x0_kaddr); x0_kaddr += cache_line_size; }
当end - start大于L1 D-cache大小时,循环仍会执行,但此时x0_kaddr对应的地址已不在D缓存中。
内容的提问来源于stack exchange,提问作者windxlnx
相关产品推荐
相关产品推荐

