我正在为Linux 3.13.3的PCI设备编写驱动程序。我正在尝试使用DMA,但dma_alloc_coherent()
始终返回NULL
。我试图分配17 kB的内存(我试过两次),但总是失败,返回NULL
指针。
context->dma_addr = dma_alloc_coherent(context->adev->device,
AESDEV_DMA_SIZE, &context->dma_handle, GFP_KERNEL);
这就是我如何设置DMA,一切都在那里成功:
pci_set_master(pdev);
ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
if (ret) {
dev_err(&pdev->dev, "set_dma_mask failed\n");
goto setup_dma_failed;
}
ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
if (ret) {
dev_err(&pdev->dev, "set_consistent_dma_mask failed\n");
goto setup_dma_failed;
}