lkml.org 
[lkml]   [2009]   [May]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH] asm-generic: add a dma-mapping.h file
    Date
    On Tuesday 19 May 2009 17:01:27 Grant Grundler wrote:
    > On Tue, May 19, 2009 at 9:22 AM, Arnd Bergmann <arnd@arndb.de> wrote:
    > I've reviewed the first bit and it looks fine (so far to me).
    > Two related bugs:
    > 1) dma_alloc_coherent() is not respecting the coherent_dma_mask field
    > in device.h:struct device.

    Hmm, I've taken that function unchanged from powerpc. I guess that means
    that powerpc is broken here as well, right?

    > 2) dma_map_single() is not respecting dma_mask in struct pci_dev (and
    > pointer from struct device).

    What should it do with the mask? All the architectures I've looked
    at as well as arch/parisc/kernel/pci-dma.c ignore it.
    Should dma_map_* just fail in case of an address exceeding dma_mask?

    > > +/**
    > > + * dma_alloc_coherent - allocate consistent memory for DMA
    > > + * @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
    > > + * @size: required memory size
    > > + * @handle: bus-specific DMA address
    > > + *
    > > + * Allocate some uncached, unbuffered memory for a device for
    > > + * performing DMA. This function allocates pages, and will
    > > + * return the CPU-viewed address, and sets @handle to be the
    > > + * device-viewed address.
    >
    > Key here is the DMA is coherent, bi-directional, and the DMA address fit in
    > the coherent_dma_mask. "uncached/unbuffered" is one way of doing this and
    > is how we've implemented "DMA coherency" on parisc platforms that don't
    > have an IOMMU (which all have PA1.1 CPUs) - see arch/parisc/kernel/pci-dma.c

    All the architectures I've looked at come with their own version of _alloc_coherent
    that works in similar ways to allocate an uncached mapping. Now that you
    mention this, I realize that there is a bug on cris, which after my patch either
    has two conflicting implementations of dma_{alloc,free}_coherent, or
    is missing the dma_coherent_dev() function that is hidden inside of the
    same #ifdef. The one in arch/cris/arch-v32/drivers/pci/dma.c does seem
    to be correct though.

    Arnd <><


    \
     
     \ /
      Last update: 2009-05-19 19:45    [W:0.038 / U:31.244 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site