Re: [PATCH] dma: remove bad_dma_ops to fix build fail

From: Jerry Snitselaar
Date: Sun Jun 12 2016 - 17:48:42 EST


On Sun Jun 12 16, Sudip Mukherjee wrote:
m32r allmodconfig is failng with errors like:
ERROR: "bad_dma_ops" [sound/soc/bcm/snd-soc-cygnus.ko] undefined!

On checking the code it turns out that struct bad_dma_ops has been
declared as extern but no one has actually defined struct bad_dma_ops.
Lets remove that and return NULL from get_dma_ops() if HAS_DMA is not
defined.

Signed-off-by: Sudip Mukherjee <sudip.mukherjee@xxxxxxxxxxxxxxx>
---

This patch has been build tested with m32r allmodconfig,
x86_64 allmodconfig and i386 allmodconfig.

include/linux/dma-mapping.h | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h
index 71c1b21..583795a 100644
--- a/include/linux/dma-mapping.h
+++ b/include/linux/dma-mapping.h
@@ -113,10 +113,9 @@ int dma_mmap_from_coherent(struct device *dev, struct vm_area_struct *vma,
* dma dependent code. Code that depends on the dma-mapping
* API needs to set 'depends on HAS_DMA' in its Kconfig
*/
-extern struct dma_map_ops bad_dma_ops;
static inline struct dma_map_ops *get_dma_ops(struct device *dev)
{
- return &bad_dma_ops;
+ return NULL;
}
#endif

--
1.9.1



Ccing Christoph since his commit introduced bad_dma_ops, and Simran
who wrote that cygnus code.

I'm thinking that is there to complain loudly when someone is trying
to use dma without HAS_DMA, correct Christoph?

cygnus_pcm_preallocate_dma_buffer() is calling dma_alloc_coherent(),
which ends up in a call to get_dma_ops() and tripping over the above.

Possibly this instead:

diff --git a/sound/soc/bcm/Kconfig b/sound/soc/bcm/Kconfig
index d528aac..edf3671 100644
--- a/sound/soc/bcm/Kconfig
+++ b/sound/soc/bcm/Kconfig
@@ -11,6 +11,7 @@ config SND_BCM2835_SOC_I2S
config SND_SOC_CYGNUS
tristate "SoC platform audio for Broadcom Cygnus chips"
depends on ARCH_BCM_CYGNUS || COMPILE_TEST
+ depends on HAS_DMA
help
Say Y if you want to add support for ASoC audio on Broadcom
Cygnus chips (bcm958300, bcm958305, bcm911360)