Bus Transaction Initiator
名称
bus_transaction_initiator —— DMA配置能力
概要
总线事务启动器(BTI)表示设备的总线主控/DMA功能,可用于设备对存储器的访问进行授权。
描述
系统为每个设备驱动程序其对应的设备,可使用的每个总线事务ID提供一个BTI。 在此上下文中的总线事务ID是可由IOMMU使用的硬件事务标识符(例如,Intel的IOMMU上的PCI地址和ARM的SMMU上的StreamID)。
BTI可用于固定虚拟内存对象(VMO)中使用的内存。 如果调用者固定来自VMO的内存,则内核为它们提供设备物理地址,这些地址可用于向VMO发出内存事务(前提是事务具有正确的总线事务ID)。 如果设备使用不同的事务ID发起影响这些地址的事务,则事务可能失败并且发起设备可能需要重置以便于继续运行。
BTI管理了隔离的PMT列表。 如果使用bti_pin() 从BTI创建PMT,并且在没有调用pmt_unpin() 的情况下释放PMT句柄,则PMT将处于隔离状态。 隔离的PMT将阻止其底层物理内存被释放到系统以供重用,以防止DMA到这些重新分配的内存。 可通过调用bti_release_quarantine() 来清除隔离内存。
TODO(teisenbe):添加有关失败事务通知的详细信息。
另见
系统调用
- bti_create —— 创建新的总线事务启动器
- bti_pin —— 固定内存并授权BTI对其的访问
- bti_release_quarantine —— 释放隔离的PMT
- pmt_unpin —— 撤消访问权限并取消固定内存