【问题标题】:Mmap a writecombine region to userspace documentation将 writecombine 区域映射到用户空间文档
【发布时间】:2021-11-12 07:23:35
【问题描述】:

根据以下文档 https://www.kernel.org/doc/html/latest/x86/pat.html,

想要将某些页面导出到用户空间的驱动程序通过使用 mmap 接口和以下组合来实现:

pgprot_noncached()

io_remap_pfn_range() 或 remap_pfn_range() 或 vmf_insert_pfn()

请注意,这组 API 仅适用于 IO(非 RAM)区域。如果驱动程序想要导出一个 RAM 区域,它必须在上面的步骤 0 中执行 set_memory_uc() 或 set_memory_wc() 并跟踪这些页面的使用情况,并在页面被释放到空闲池之前使用 set_memory_wb()。

为什么 RAM 区域需要额外的步骤 set_memory_uc() 或 set_memory_wc()?

【问题讨论】:

    标签: linux-kernel kernel driver mmap


    【解决方案1】:

    这是必需的,因为 set_memory_uc() 和 set_memory_wc() 是专门为处理内存区域而编写的;您在此处被告知要使用的其他 API 函数用于 I/O 区域。

    由于您想使用列出的 API 函数处理 RAM 区域中的页面,您的驱动程序需要首先将它们标记为未缓存或写入组合,以便它们基本上可以被视为 I/O 页面,使用API,然后确保跟进内存页面的显式写回,以便在驱动程序认为自己“完成”之前同步它们的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-12
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      相关资源
      最近更新 更多