]> git.baikalelectronics.ru Git - kernel.git/commit
dmaengine: dmaengine_desc_callback_valid(): Check for `callback_result`
authorLars-Peter Clausen <lars@metafoo.de>
Sat, 23 Oct 2021 13:41:01 +0000 (15:41 +0200)
committerVinod Koul <vkoul@kernel.org>
Mon, 25 Oct 2021 04:12:56 +0000 (09:42 +0530)
commitff8e6b08a397ae1265b69d89e455a9bd28fab4f1
tree200b3695513287f7c545f75b1d95d8936978b769
parentcae44ccc04b3b503c53534e13ac9728f5e245ed8
dmaengine: dmaengine_desc_callback_valid(): Check for `callback_result`

Before the `callback_result` callback was introduced drivers coded their
invocation to the callback in a similar way to:

if (cb->callback) {
spin_unlock(&dma->lock);
cb->callback(cb->callback_param);
spin_lock(&dma->lock);
}

With the introduction of `callback_result` two helpers where introduced to
transparently handle both types of callbacks. And drivers where updated to
look like this:

if (dmaengine_desc_callback_valid(cb)) {
spin_unlock(&dma->lock);
dmaengine_desc_callback_invoke(cb, ...);
spin_lock(&dma->lock);
}

dmaengine_desc_callback_invoke() correctly handles both `callback_result`
and `callback`. But we forgot to update the dmaengine_desc_callback_valid()
function to check for `callback_result`. As a result DMA descriptors that
use the `callback_result` rather than `callback` don't have their callback
invoked by drivers that follow the pattern above.

Fix this by checking for both `callback` and `callback_result` in
dmaengine_desc_callback_valid().

Fixes: cca433e4426c ("dmaengine: add support to provide error result from a DMA transation")
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Dave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/20211023134101.28042-1-lars@metafoo.de
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/dma/dmaengine.h