Linux内核中的VM_MIXEDMAP和VM_PFNMAP标志是什么意思?

问题描述

这两个标志供驱动程序使用,但我不明白为什么需要它们。如果我不在VMA上设置这两个标志,会发生什么?我什么时候应该使用它们?有人可以提供一些用例吗?谢谢。

解决方法

VM_MIXEDMAP以及对VM_PFNMAP间接的最佳解释来自对补丁提交的描述,该描述引入了它: http://visa.lab.asu.edu/gitlab/fstrace/android-kernel-msm-hammerhead-3.4-marshmallow-mr3/commit/b379d790197cdf8a95fb67507d75a24ac0a1678d

简而言之,VM_MIXEDMAP允许映射既包含“托管”页面(即由内存管理器控制)又包含“非托管”页面(即像物理设备一样按“原样”提供)。 VM_PFNMAP用于“完全不受管理”的区域,这些区域的资源不受普通分配系统的控制(例如,再次类似于用户空间中映射的物理设备)。

两个标志都有非常特殊的用途,此处讨论VM_PFNMAPhttps://linux-mm.org/DeviceDriverMmap

我认为在“正常”的设备驱动程序中不太可能碰巧使用VM_MIXEDMAP