Memory management 如何知道页面是否属于PCI条

Memory management 如何知道页面是否属于PCI条,memory-management,linux-kernel,linux-device-driver,Memory Management,Linux Kernel,Linux Device Driver,我只是想知道PCIe条的内存页是否有区别于系统中任何其他页面的内容?也许国旗上有一些碎片?我在想“PG_保留”部分 谢谢 我将尝试改进问题解释: 内存将PCI板的BAR0映射到用户空间。然后,我需要内核的支持,以便在一个列表中包含我在其他内核函数中使用的内存页。我用VMA标志(VM_IO)来管理它 当用户关闭所有内容时(他可能有很多不同的页面,有些是“正常”内存,有些是不应该释放的mmio区域),我需要知道哪些页面必须保留在那里,但由于许多原因,这次我无法访问VMAs标志。。。主要是因为我不能修

我只是想知道PCIe条的内存页是否有区别于系统中任何其他页面的内容?也许国旗上有一些碎片?我在想“PG_保留”部分

谢谢

我将尝试改进问题解释:

内存将PCI板的BAR0映射到用户空间。然后,我需要内核的支持,以便在一个列表中包含我在其他内核函数中使用的内存页。我用VMA标志(VM_IO)来管理它

当用户关闭所有内容时(他可能有很多不同的页面,有些是“正常”内存,有些是不应该释放的mmio区域),我需要知道哪些页面必须保留在那里,但由于许多原因,这次我无法访问VMAs标志。。。主要是因为我不能修改函数原型,函数只接受页面列表而不是相关地址作为参数

因此,我需要“最佳实践”来区分“正常”内存页和mmio区域页


此时,我正在使用pfn_valid()函数,因为我注意到mmio区域页面有一个pfn“not valid”,但我不知道这是否正确。

您的实际问题是什么?我试图添加信息……显而易见的答案是修改函数原型。无论如何,尽管依赖页面映射的副作用是可能的,但它可能会在未来的内核版本中崩溃;在映射页面时,至少要仔细检查这种情况。不幸的是,我没有编写驱动程序,我正在攻击一个现有的驱动程序,它不是完全开源的,因此我无法更改函数调用(不幸的是,在关闭的部分)。但我很抱歉,我不明白你指的是什么“情况”。。。pfn_有效?无论你使用什么条件。但是为什么你不能改变封闭源代码部分呢?你不是在为支持付费吗?