- 论坛徽章:
- 17
|
本帖最后由 asuka2001 于 2013-12-20 09:20 编辑
回复 7# lyl19
map from device应该不需要clean cache。既然已经是提供给设备访问的buffer,即使将dirty cache刷回到主存又有什么意义呢?
kernel 3.11.5:arch/arm/mm/dma-mapping.c
static void __dma_page_cpu_to_dev(struct page *page, unsigned long off,
size_t size, enum dma_data_direction dir)
{
unsigned long paddr;
dma_cache_maint_page(page, off, size, dir, dmac_map_area);
paddr = page_to_phys(page) + off;
if (dir == DMA_FROM_DEVICE) {
outer_inv_range(paddr, paddr + size);
} else {
outer_clean_range(paddr, paddr + size);
}
/* FIXME: non-speculating: flush on bidirectional mappings? */
}
代码里可以看出,应该是只做了invalid,没有clean。除非是TO_DEVICE才需要将dirty cache刷回主存!
另外还有种情况就是range的开头结尾是非cache line对齐的话,头尾两个cache line需要clean。
|
|