我想为在我控制之外分配的内存缓冲区设置 DMA 映射。dma_map_single 似乎是要使用的正确 API,但我的硬件有一个限制,因此映射不能跨越某些二次幂边界,例如 1K。被映射的缓冲区的大小总是小于边界值,但在其他方面是可变的。所以看起来 DMA 池可能无法工作,因为它们需要固定大小,即使“分配”部分是我需要的。
我是否应该继续做 dma_map_single 并检查映射是否满足我的要求,如果不满足则释放映射?这会导致可能返回相同的映射,从而导致永无止境的搜索吗?如果是这样,我可以保留不合适的映射,直到找到合适的映射,然后一次性释放所有不合适的映射。然而,这些听起来并不是好主意。
有没有人有其他/更好的想法?
谢谢。