scattergather 技术

    技术2022-05-19  21

        对于使用 scatter/gather 传输的情况,request_buffer (申请的dma内存区域)里边实际上是一个数组,每一个元素都是一个 struct scatterlist 的指针,而每一个 scatterlist 指针的 page里边包含了一些 page(而不是一个 page),而 offset 里边包含的是每一个 DMA buffer 的总的偏移量,她由两部分组成,高位部分标志着 page 号,低位部分标志着具体某个 page 中的偏移量,高位低位由PAGE_SHIFT 宏来划分,不同的硬件平台 PAGE_SHIFT 值不一样,因为不同的硬件平台 page 的大小也不一样,即这里的 PAGE_SIZE 不一样,目前比较前卫的硬件平台其 page size 有 4k 或者 8k 的,而PAGE_SHIFT 也就是 12 或者 13。

     

    4 struct scatterlist { 5     struct page      *page; 6     unsigned int     offset; 7     dma_addr_t         dma_address; 8     unsigned int     length; 9 };


    最新回复(0)