lkml.org 
[lkml]   [2012]   [Sep]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [RFC 1/2] virtio_console: Add support for DMA memory allocation
    On Mon, Sep 03, 2012 at 04:57:45PM +0200, Sjur Brændeland wrote:
    > 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().
    >
    > >> -static void free_buf(struct port_buffer *buf)
    > >> +/* Allcoate data buffer from DMA memory if requested */
    > >
    > > typo
    >
    > Thanks.
    >
    > >> +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

    Yes, it even seems intentional.
    But I have a question: can the device work without DMA?
    Does not VIRTIO_CONSOLE_F_DMA_MEM mean dma api is required?
    If yes you should just fail load.

    Also let's add a wrapper at top of file so ifdefs
    do not litter the code like this. For example:

    #ifdef CONFIG_HAS_DMA
    #define VIRTIO_CONSOLE_HAS_DMA (1)
    #else
    #define VIRTIO_CONSOLE_HAS_DMA (0)
    #endif

    Now use if instead of ifdef.

    --
    MST
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2012-09-03 23:21    [W:2.544 / U:0.116 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site