.. ну первая версия понятна, проверить свой код.
Теперь о подозрениях:
http://lxr.free-electrons.com/source/drivers/base/dma-mapping.c#L189
Мне кажется, что должно быть наоборот, т.е. проверка на НЕ 0:
if (rc != 0) ...
87 int dma_declare_coherent_memory(struct device *dev, phys_addr_t phys_addr,
88 dma_addr_t device_addr, size_t size, int flags)
89 {
90 struct dma_coherent_mem *mem;
91 int ret;
92
93 ret = dma_init_coherent_memory(phys_addr, device_addr, size, flags,
94 &mem);
95 if (ret == 0)
96 return 0;
97
98 if (dma_assign_coherent_memory(dev, mem) == 0)
99 return ret;
100
101 dma_release_coherent_memory(mem);
102 return 0;
103 }
...
20 static int dma_init_coherent_memory(phys_addr_t phys_addr, dma_addr_t device_addr,
21 size_t size, int flags,
22 struct dma_coherent_mem **mem)
23 {
...
34 mem_base = ioremap(phys_addr, size);
35 if (!mem_base)
36 goto out;
37
38 dma_mem = kzalloc(sizeof(struct dma_coherent_mem), GFP_KERNEL);
39 if (!dma_mem)
40 goto out;
41 dma_mem->bitmap = kzalloc(bitmap_size, GFP_KERNEL);
42 if (!dma_mem->bitmap)
43 goto out;
44
...
54 if (flags & DMA_MEMORY_MAP)
55 return DMA_MEMORY_MAP;
56
57 return DMA_MEMORY_IO;
58
59 out:
60 kfree(dma_mem);
61 if (mem_base)
62 iounmap(mem_base);
63 return 0;
64 }
Если это действительно баг, то куда постить? cast tailgunner, post-factum