Tag: dma

Linux内核:可以无限期地打开流式DMA映射吗?

关于设备驱动程序编程的许多指南建议流式DMA映射(即由dma_map_single()和朋友创建的那些dma_map_single()在尽可能短的时间内保持打开状态,因为它们消耗资源(即如果平台有一个IOMMU映射资源,或者需要时弹跳缓冲区)。 在我的情况下,我正在使用一个支持64位DMA的PCIe设备,因此不需要反弹缓冲区(在这种情况下,似乎不需要IOMMU的特殊处理,这是正确的吗?)。 数据来自设备(即它与DMA_TO_CPU映射),当新数据通过中断可用时,设备通知我,此时我在访问刚刚向我发送DMA的数据之前触发dma_sync_for_cpu() 。 还有其他原因我不应该无限期地打开映射(当然,直到数据消费者关闭)?

数组的内存对齐方式

我无法在Cell处理器上调整DMA传输的内存。 我需要地址的最后4位为0。 我有4个unsigned int数组,其中每个元素必须在内存中对齐 ,以使其(hex)地址以零结尾。 例如 int main() { size_t i; static unsigned int a[2] __attribute__ ((aligned (16))); static unsigned int b[2] __attribute__ ((aligned (16))); static unsigned int c[2] __attribute__ ((aligned (16))); static unsigned int d[2] __attribute__ ((aligned (16))); for (i = 0; i < 2; ++i) { printf("a[%u] = %p\n", &a[i]); printf("b[%u] = %p\n", […]