• L
    dmaengine: imx-sdma: implement channel termination via worker · 9063f5a9
    Lucas Stach 提交于
    commit b8603d2a upstream.
    
    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: NLucas Stach <l.stach@pengutronix.de>
    Signed-off-by: NRobin Gong <yibin.gong@nxp.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: NVinod Koul <vkoul@kernel.org>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    9063f5a9
imx-sdma.c 56.4 KB