lkml.org 
[lkml]   [2021]   [Nov]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.14 705/849] dmaengine: dmaengine_desc_callback_valid(): Check for `callback_result`
    Date
    From: Lars-Peter Clausen <lars@metafoo.de>

    [ Upstream commit e7e1e880b114ca640a2f280b0d5d38aed98f98c6 ]

    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: f067025bc676 ("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>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/dma/dmaengine.h | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/drivers/dma/dmaengine.h b/drivers/dma/dmaengine.h
    index 1bfbd64b13717..53f16d3f00294 100644
    --- a/drivers/dma/dmaengine.h
    +++ b/drivers/dma/dmaengine.h
    @@ -176,7 +176,7 @@ dmaengine_desc_get_callback_invoke(struct dma_async_tx_descriptor *tx,
    static inline bool
    dmaengine_desc_callback_valid(struct dmaengine_desc_callback *cb)
    {
    - return (cb->callback) ? true : false;
    + return cb->callback || cb->callback_result;
    }

    struct dma_chan *dma_get_slave_channel(struct dma_chan *chan);
    --
    2.33.0


    \
     
     \ /
      Last update: 2021-11-16 02:41    [W:3.389 / U:0.188 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site