]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
dmaengine: at_hdmac: Fix completion of unissued descriptor in case of errors
authorTudor Ambarus <tudor.ambarus@microchip.com>
Tue, 25 Oct 2022 09:02:46 +0000 (12:02 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 25 Nov 2022 16:36:48 +0000 (17:36 +0100)
commit ef2cb4f0ce479f77607b04c4b0414bf32f863ee8 upstream.

In case the controller detected an error, the code took the chance to move
all the queued (submitted) descriptors to the active (issued) list. This
was wrong as if there were any descriptors in the submitted list they were
moved to the issued list without actually issuing them to the controller,
thus a completion could be raised without even fireing the descriptor.

Fixes: dc78baa2b90b ("dmaengine: at_hdmac: new driver for the Atmel AHB DMA Controller")
Reported-by: Peter Rosin <peda@axentia.se>
Signed-off-by: Tudor Ambarus <tudor.ambarus@microchip.com>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/lkml/13c6c9a2-6db5-c3bf-349b-4c127ad3496a@axentia.se/
Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
Link: https://lore.kernel.org/r/20221025090306.297886-1-tudor.ambarus@microchip.com
Link: https://lore.kernel.org/r/20221025090306.297886-13-tudor.ambarus@microchip.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/dma/at_hdmac.c

index 7ac3874d8407970f8fecd67e83af0052dc567f9e..417e4913880dfb1066c3ea19203b03d8ed21c12b 100644 (file)
@@ -556,10 +556,6 @@ static void atc_handle_error(struct at_dma_chan *atchan)
        bad_desc = atc_first_active(atchan);
        list_del_init(&bad_desc->desc_node);
 
-       /* As we are stopped, take advantage to push queued descriptors
-        * in active_list */
-       list_splice_init(&atchan->queue, atchan->active_list.prev);
-
        /* Try to restart the controller */
        if (!list_empty(&atchan->active_list))
                atc_dostart(atchan, atc_first_active(atchan));