0
我有這個x86設備和一個嘗試分配DMA內存的內核模塊。它有一個名爲dmasize的參數,可以控制分配內存的大小。當內核3.2上的緩衝大於2M時,dma_alloc_coherent失敗
我注意到,當dmasize = 2M時分配成功,但如果更大則不會。即使在啓動時。 我聽說CONSISTENT_DMA_SIZE有一個限制,但是看到lxr,我無法在arch x86內核3.2中找到它。
不確定它是否相關,但是這是一個32位機器,具有8GB內存和啓用pae的內核。
這是調用dma_alloc_coherent:
dma_addr_t dma_handle;
if (!(_dma_vbase = dma_alloc_coherent(0, alloc_size, &dma_handle, GFP_KERNEL)) || !dma_handle) {
gprintk("_alloc_mpool: Kernel failed to allocate the memory pool of size 0x%lx\n", (unsigned long)alloc_size);
return;
}
欣賞人誰可以幫助這一點。
您的設備是在ISA還是PCI總線上? –
PCI。它會影響函數調用嗎? – shayst
對於PCI設備,您必須設置'dma_alloc_coherent'的第一個參數。無論如何,大的分配可能需要[連續內存分配器](http://mina86.com/2012/06/10/deep-dive-into-contiguous-memory-allocator-part-i/)。 –