Thread (22 messages) flat view 22 messages, 3 authors, 2012-09-19

Re: [RFC 1/2] virtio_console: Add support for DMA memory allocation

From: Sjur Brændeland <hidden>
Date: 2012-09-03 14:57:48
Also in: lkml

Possibly related (same subject, not in this thread)

Hi Michael,
How does access to descriptors work in this setup?
When the ring is setup by remoteproc the descriptors are
also allocated using dma_alloc_coherent().
quoted
-static void free_buf(struct port_buffer *buf)
+/* Allcoate data buffer from DMA memory if requested */
typo
Thanks.
quoted
+static inline void *
+alloc_databuf(struct virtio_device *vdev, size_t size, dma_addr_t *dma_handle,
+                gfp_t flag)
 {
-     kfree(buf->buf);
+#ifdef CONFIG_HAS_DMA
+     if (virtio_has_feature(vdev, VIRTIO_CONSOLE_F_DMA_MEM)) {
+             struct device *dev = &vdev->dev;
+             /*
+              * Allocate DMA memory from ancestors. Finding the ancestor
+              * is a bit quirky when DMA_MEMORY_INCLUDES_CHILDREN is not
+              * implemented.
+              */
+             dev = dev->parent ? dev->parent : dev;
+             dev = dev->parent ? dev->parent : dev;
+             return dma_alloc_coherent(dev, size, dma_handle, flag);
+     }
+#endif
Are these ifdefs really needed? If DMA_MEM is set,
can't we use dma_alloc_coherent
unconditionally?
If an architecture do not support DMA you will get
a link error: "unknown symbol" for dma_alloc_coherent.

Regards,
Sjur
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help