• Robin Murphy's avatar
    dma-mapping: relax warning for per-device areas · d27fb99f
    Robin Murphy authored
    The reasons why dma_free_attrs() should not be called from IRQ context
    are not necessarily obvious and somewhat buried in the development
    history, so let's start by documenting the warning itself to help anyone
    who does happen to hit it and wonder what the deal is.
    However, this check turns out to be slightly over-restrictive for the
    way that per-device memory has been spliced into the general API, since
    for that case we know that dma_declare_coherent_memory() has created an
    appropriate CPU mapping for the entire area and nothing dynamic should
    be happening. Given that the usage model for per-device memory is often
    more akin to streaming DMA than 'real' coherent DMA (e.g. allocating and
    freeing space to copy short-lived packets in and out), it is also
    somewhat more reasonable for those operations to happen in IRQ handlers
    for such devices.
    Therefore, let's move the irqs_disabled() check down past the per-device
    area hook, so that that gets a chance to resolve the request before we
    reach definite "you're doing it wrong" territory.
    Reported-by: default avatarFredrik Noring <noring@nocrew.org>
    Tested-by: default avatarFredrik Noring <noring@nocrew.org>
    Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
dma-mapping.h 25.5 KB