Caching dma_alloc_如何确保分配的内存不被处理器缓存?

Caching dma_alloc_如何确保分配的内存不被处理器缓存?,caching,linux-kernel,x86,dma,Caching,Linux Kernel,X86,Dma,根据Linux文档/DMA-API.txtDMA\u alloc\u coherent分配一个一致内存的字节区域 我试着去实现x86的dma\u alloc\u coherent。此函数将调用ops->alloc,对于英特尔平台,它是intel\u alloc\u concertant intel\u alloc\u coherent使用alloc\u页面分配虚拟地址: page = alloc_pages(flags, order); 然后在这个实现中,如何确保分配的内存不被处理器缓存在其一

根据Linux文档/DMA-API.txt
DMA\u alloc\u coherent
分配一个一致内存的
字节区域

我试着去实现x86的
dma\u alloc\u coherent
。此函数将调用
ops->alloc
,对于英特尔平台,它是
intel\u alloc\u concertant

intel\u alloc\u coherent
使用
alloc\u页面
分配虚拟地址:

page = alloc_pages(flags, order);

然后在这个实现中,如何确保分配的内存不被处理器缓存在其一级或更高级别的缓存中?

IIRC x86是DMA缓存一致的。隐马尔可夫模型。。你们的意思是说DMA控制器也参和在CPU中完成的缓存一致性。I/O也与CPU一样一致。DMA写入RAM将使CPU缓存中的所有过期副本失效。我仍在搜索英特尔体系结构中的更多相关细节。看起来MESI一致性协议也支持IO一致性/DMA控制器。英特尔nehalam支持MESIFI am搜索同一问题的答案。你明白了吗?我只是想知道,在内存分配之后,CPU/controller/linux之间的一致性是如何得到保证的。感谢您回复这个旧线程。这个解释是有道理的,否则我看不出在没有进一步明确调用刷新/使缓存无效的情况下如何保持一致性,除非linux主动监视并刷新所有分配的dma一致性缓冲区。