首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dma_map_single和dma_map_page

dma_map_single和dma_map_page
EN

Stack Overflow用户
提问于 2012-10-26 10:50:02
回答 1查看 2.5K关注 0票数 2

我想做一个多帧的dma发送一个大帧(巨型)。我能发送普通帧( 1500码)。我需要一些对dma的怀疑。

  1. 与其他api相比,dma_map_single()真正的优势是什么。我们可以用dma_map_page做任何事,对吧?
  2. 假设我们需要在驱动程序中传输一个大帧(巨帧),并且我已经将这个帧存储在多个缓冲区中。这些缓冲区在物理内存或虚拟内存中不是连续的。但是这些缓冲区位于内核空间。我们怎么才能把它作为一个框架。我们应该使用分散收集的dma吗?这与其他dma_api是可能的吗?
EN

回答 1

Stack Overflow用户

发布于 2014-03-08 20:12:16

  1. dma_map_single和dma_map_page最终将调用dam_ops->map_page --最终的函数由arch和内核配置决定。通常情况下,它将是intel_map_page的x86机器与IOMMU。
  2. 首先,从内核的角度来看,Jumbo帧在TX时是不相关的,因为网络堆栈将传输缓冲区合并到多达64K的数据包(LSO/TSO),并且NIC最终会将单个64K分组分解为几个MTU(9K/1500在ETH上)大小的包,每个包都有自己的L3报头。

对于您的问题,SKB可以有一个分散收集列表-每个缓冲区然后dma映射。然后将dma地址和缓冲区长度的列表写入NIC的发送描述符中,NIC知道如何将它们组合在一起才能发送。

顺便说一句,内核中有一个用于分散列表的dma_map_sg API,它将返回一个包含dma地址列表的散列表。这通常与NIC司机无关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13085501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档