【问题标题】:check if the mapped memory supports write combining检查映射内存是否支持写组合
【发布时间】:2016-06-22 02:57:45
【问题描述】:

我编写了一个内核驱动程序,它将我的 I/O 设备暴露给用户空间。 使用 mmap 应用程序获取虚拟地址以写入设备。 由于我希望应用程序写入使用大型 PCIe 事务,因此驱动程序将此内存映射为写入组合。 根据内存类型(写入组合或非缓存),应用程序应用最佳方法与设备一起工作。

但是,有些架构不支持写入组合,或者可能只支持部分内存空间。 因此,内核驱动程序告诉应用程序是否成功地将内存映射为写组合是很重要的。

我需要一种通用的方法来检查内核驱动程序映射(或将要映射)的内存是否是写组合的。 我该怎么做?

这是我的代码的一部分:

vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot); io_remap_pfn_range(vma, vma->vm_start, pfn, PAGE_SIZE, vma->vm_page_prot);

【问题讨论】:

    标签: memory-management linux-kernel linux-device-driver


    【解决方案1】:

    首先,您可以使用宏ARCH_HAS_IOREMAP_WC 在编译时了解架构是否支持写组合。例如,请参阅here

    在运行时,您可以检查来自ioremap_wcset_memory_wc 和朋友的返回值是否成功。

    【讨论】:

    • 但我尝试将用户空间映射到我的设备。因此我使用处理 vm_area_struct 的 mmap 而 AFAIU ioremap_wc 没有。还有,当ARCH_HAS_IOREMAP_WC没有定义时,并不一定意味着arch不支持WC内存
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多