从kmalloc缓冲区中,获取相应的页面和偏移量数组

从kmalloc缓冲区中,获取相应的页面和偏移量数组,c,linux,paging,kmalloc,C,Linux,Paging,Kmalloc,我正在开发一个位于TCP套接字之上的新套接字,出于性能原因,我想调用TCP_sendpage,而不是TCP_sendmsg(TCP_sendmsg会不必要地复制我的数据)。然而,我的输入是一个kmalloc’ed缓冲区,可以是从几个字节到跨越几个页面的任意位置tcp_sendpage需要一个struct page*、偏移量和大小作为输入。如何将缓冲区转换为tcp\u sendpage希望看到的内容 我发现了virt_-to_-page和offset_-in_-page;但是,它只转换单个地址,而

我正在开发一个位于TCP套接字之上的新套接字,出于性能原因,我想调用
TCP_sendpage
,而不是
TCP_sendmsg
TCP_sendmsg
会不必要地复制我的数据)。然而,我的输入是一个kmalloc’ed缓冲区,可以是从几个字节到跨越几个页面的任意位置
tcp_sendpage
需要一个
struct page*
偏移量
大小
作为输入。如何将缓冲区转换为
tcp\u sendpage
希望看到的内容

我发现了
virt_-to_-page
offset_-in_-page
;但是,它只转换单个地址,而不是整个缓冲区。在我看来,我需要的是一个函数,它可以将我的(物理上连续的,正如
kmalloc
所承诺的)缓冲区转换为一个页面和偏移量数组