我正在开发一个位于 TCP 套接字之上的新套接字,出于性能原因,我想调用tcp_sendpage
而不是tcp_sendmsg
(tcp_sendmsg
会不必要地复制我的数据)。然而,我的输入是一个 kmalloc 的缓冲区,它可以是从几个字节到跨越几个页面的任何地方。tcp_sendpage
想要一个struct page*
, offset
, 和size
作为输入。如何将我的缓冲区转换为tcp_sendpage
喜欢看的东西?
我发现virt_to_page
了offset_in_page
; 但是,这只转换单个地址而不是整个缓冲区。在我看来,我需要一个函数,将我的(物理上连续的,如 所承诺的kmalloc
)缓冲区转换为页面和偏移量数组