• Lucas Stach's avatar
    dmaengine: imx-sdma: implement channel termination via worker · b8603d2a
    Lucas Stach authored
    The dmaengine documentation states that device_terminate_all may be
    asynchronous and need not wait for the active transfers to stop.
    
    This allows us to move most of the functionality currently implemented
    in the sdma channel termination function to run in a worker, outside
    of any atomic context. Moving this out of atomic context has two
    benefits: we can now sleep while waiting for the channel to terminate,
    instead of busy waiting and the freeing of the dma descriptors happens
    with IRQs enabled, getting rid of a warning in the dma mapping code.
    
    As the termination is now async, we need to implement the
    device_synchronize dma engine function which simply waits for the
    worker to finish its execution.
    Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
    Signed-off-by: default avatarRobin Gong <yibin.gong@nxp.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
    b8603d2a
imx-sdma.c 56.4 KB