用户缓冲区是否始终可以映射到连续的内核虚拟地址?

时间:2018-06-15 16:05:18

标签: linux-kernel

如果用户创建缓冲区(通过malloc或静态配置),该缓冲区是否可以连续映射到内核地址空间?

我希望在用户空间中对数组进行内核循环,而不是通过copy_from_user和copy_to_user复制它。

鉴于用户通过ioctl向内核提供缓冲区的地址/长度,我在内核层调用什么来获取整个缓冲区的kva。

感谢。

1 个答案:

答案 0 :(得分:0)

理论上,如果你在你的应用程序的上下文中(你正在制作ioctl),除了交换之外没有什么能阻止你直接从内核写入/读取用户地址(如果你的系统就是这种情况)。因此,您可以使用mlock将ram缓冲区固定在用户空间中。你在这里不需要kva,你可以使用用户地址。我不完全确定,但这应该有效。你试过吗?