• Tudor Ambarus's avatar
    crypto: atmel-{aes,sha} - Fix incorrect use of dmaengine_terminate_all() · 0e693789
    Tudor Ambarus authored
    device_terminate_all() is used to abort all the pending and
    ongoing transfers on the channel, it should be used just in the
    error path.
    
    Also, dmaengine_terminate_all() is deprecated and one should use
    dmaengine_terminate_async() or dmaengine_terminate_sync(). The method
    is not used in atomic context, use dmaengine_terminate_sync().
    
    A secondary aspect of this patch is that it luckily avoids a deadlock
    between atmel_aes and at_hdmac.c. While in tasklet with the lock held,
    the dma controller invokes the client callback (dmaengine_terminate_all),
    which tries to get the same lock. The at_hdmac fix would be to drop the
    lock before invoking the client callback, a fix on at_hdmac will follow.
    Signed-off-by: default avatarTudor Ambarus <tudor.ambarus@microchip.com>
    Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
    0e693789
atmel-aes.c 65.6 KB