gpt4 book ai didi

c - 内核散点列表在虚拟地址中是否连续?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:32:28 25 4
gpt4 key购买 nike

我想询问/验证用 blk_rq_map_sg 映射的 struct scatterlist 数组是否至少在虚拟地址域中都是连续的。我们都知道,散点列表主要用于 DMA,其中每个散点-聚集 (sg) 数组元素描述一 block 内存,而这些 block 的物理地址是不连续的。

我正在编写 block 设备驱动程序。假设我从我的 request_queue 接收到结构请求,并且我想对我的请求持有的 I/O 数据做一些事情,比如 memcpy 将它们发送到某个地方。该操作将需要一个虚拟地址和长度参数。现在我所知道的是,我可以通过辅助函数 blk_map_rq_sg() 映射的散点列表访问请求的数据。我的假设是否正确,那些 sg 元素在虚拟中是连续的,并且我可以通过 sg_virt() 获取数据地址,并将该地址和总长度用于 memcpy ?或者它们在虚拟中是不连续的,我必须遍历每个 sg 数组元素和 memcpy 到/从每个 sg 内存块(在虚拟中)哪个更难?

最佳答案

类似 writev 的函数允许提交不连续的请求,并且高端内存中的页面没有虚拟地址开头。

要使用 CPU 访问 SG 列表内容,请使用类似 sg_copy_from_buffer 的东西,它会自动临时映射页面。

关于c - 内核散点列表在虚拟地址中是否连续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24713809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com