如何在内核模块中禁用高速缓存记忆?

4
我目前正在尝试开发一个Linux驱动程序来使用在FPGA中开发的自定义模块。为此,我使用了一款Xilinx Zynq SoC,它运行在2个ARM核心上的Linux发行版,并且我的VHDL模块实现在FPGA部分,但这并不是理解我的问题所必需的。
我的FPGA模块直接写入RAM,我想用驱动程序读取它写入的内容,但由于缓存内存的原因,我遇到了问题。驱动程序从缓存而不是RAM中读取数据,因此读取旧数据。
为了定义FPGA可以写入的内存空间,我使用kmalloc函数。您知道是否存在可以强制从RAM内存而不是缓存中读取的标志吗?
我看到了两个可能是我要找的标志,但我并不真正理解它们的作用:
__GFP_COLD:请求cache-cold页而不是试图返回cache-warm页。-->我认为它只是强制使用尚未缓存的页面,但之后会把它缓存起来。这是正确的吗?
GFP_DMA:它似乎是我要找的东西,除了我读到它只能强制使用与DMA兼容的内存部分。
我如何禁用使用kmalloc创建的数组的缓存?或者至少如何强制处理器从RAM而不是缓存中读取?
谢谢您的帮助!
1个回答

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接