2 * dma_pool_alloc - 从dma poll获得一块一致性内存 3 * @pool: 产生内存块的dma pool 4 * @mem_flags: GFP_* bitmask 5 * @handle: 返回内存块的dma地址 6 */ 7 void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, 8 dma_addr_t *handle) 9 10 /** 11 * dma_pool_free...
voiddma_pool_free(structdma_pool *pool,void*vaddr, dma_addr_t addr); 功能:释放之前分配的DMA缓冲区。 参数: pool:DMA内存池的指针。 vaddr:要释放的DMA缓冲区的虚拟地址。 addr:DMA地址,通常是dma_pool_alloc()返回的地址。 返回值:无。voiddma_pool_destroy(structdma_pool *pool); 功能:销毁之前...
void *dma_pool_alloc(LW_OBJECT_HANDLE ulId, gfp_t mem_flags, dma_addr_t *handle) { void *alloc; alloc = Lw_Partition_Allocate(ulId); /* * 由于内存是直接从dma内存中分配,因此,物理地址和虚拟地址一样, * 不需要调用API_VmmVirtualToPhysical((addr_t)alloc, handle);进行转换。 */ *handle...
void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags, dma_addr_t *handle) { unsigned long flags; struct dma_page *page; size_t offset; void *retval; might_sleep_if(gfpflags_allow_blocking(mem_flags)); spin_lock_irqsave(&pool->lock, flags); list_for_each_entry(page, &p...
dma_alloc_coherent用于分配coherent内存,并返回对应的虚拟地址; 进行内存分配时,存在三种方式: 1)优先从设备专用的dma池开始分配; 2)无专用dma池,如果是dma-direct访问,通过dma_direct_alloc分配,而底层是依赖于CMA来分配; 3)使用IOMMU的设备,则通过iommu的操作函数集来分配; ...
dma_pool_create()初始化了一个DMA一致性缓冲区池,用于给定设备的使用。它必须在可以睡眠的上下文中调用。 "name"用于诊断(类似于struct kmem_cache名称);dev和size类似于传递给dma_alloc_coherent()的内容。该类型数据的设备硬件对齐要求为"align"(以字节表示,必须是2的幂)。如果您的设备没有边界交叉限制,请传递...
调用dma_alloc_coherent函数获得的映射,可能其最小大小为单个页。如果需要使用DMA池,需要调用dma_pool_create函数创建DMA池,再通过dma_pool_alloc函数从池中分配内存。使用完之后,需要调用dma_pool_destroy函数销毁DMA池。 以上信息仅供参考,建议查阅关于dma_alloc_coherent的书籍或者咨询技术人员,以获取更准确的信息。
[ 656.175800] BUG: unable to handle kernel NULL pointer dereference at (null) [ 656.183656] IP: [<ffffffff8880f13b>] dma_pool_alloc+0x1ab/0x280 [ 656.189596] PGD 0 [ 656.191638] Oops: 0000 [#1] SMP [..] [ 656.307084] CPU: 18 PID: 17160 Comm: kworker/18:2 Kdump: loaded Tainted...
dma_pool_create(const char *name, struct device *dev, size_t size, size_t align, size_t alloc); create( )函数为设备初始化DMA一致性内存的内存池。它必须要在可睡眠上下文调用。 name为内存池的名字(就像struct kmem_cache name一样)。dev及size就如dma_alloc_coherent()参数一样。align为设备硬件需...
dma_pool_free(pool,cpu_addr,dma_handle); 其中pool 是传递给 dma_pool_alloc() 的内容,cpu_addr 和 dma_handle 是 dma_pool_alloc() 返回的值。 该函数可以在中断上下文中调用 销毁dma_pool: 代码语言:javascript 复制 dma_pool_destroy(pool); ...