繁体   English   中英

内核分散列表在虚拟地址中是连续的吗?

[英]Kernel scatterlists contiguous in virtual address?

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

我正在编写块设备驱动程序。 假设我收到我的request_queue结构的要求,我想这样做与我的要求是持有,如I / O数据进行处理memcpy荷兰国际集团他们的地方。 该操作将需要一个虚拟地址和长度参数。 现在,我所知道的是,我可以通过通过辅助函数blk_map_rq_sg()映射的blk_map_rq_sg()访问请求的数据。 我的假设正确吗,这些sg元素在虚拟中是连续的,并且我可以通过sg_virt()获取数据地址,并将该地址和总长度用于memcpy 还是它们在虚拟环境中是不连续的,我必须遍历每个sg数组元素和memcpy往返于每个sg内存块(在虚拟中),这更难吗?

诸如writev之类的功能允许提交不连续的请求,并且高内存中的页面没有虚拟地址开头。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM