linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Nicolas Ferre <nicolas.ferre@microchip.com>
To: Tudor Ambarus <tudor.ambarus@microchip.com>, <vkoul@kernel.org>,
	<peda@axentia.se>, <du@axentia.se>
Cc: <maciej.sosnowski@intel.com>, <mripard@kernel.org>,
	<torfl6749@gmail.com>, <linux-kernel@vger.kernel.org>,
	<dmaengine@vger.kernel.org>,
	<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v2 00/32] dmaengine: at_hdmac: Fix concurrency bugs and then convert to virt-dma
Date: Fri, 28 Oct 2022 15:00:38 +0200	[thread overview]
Message-ID: <4fc31b0c-3295-2272-52c8-548634c3a6dc@microchip.com> (raw)
In-Reply-To: <20221025090306.297886-1-tudor.ambarus@microchip.com>

On 25/10/2022 at 11:02, Tudor Ambarus wrote:
> v2:
> - reorder patches so that fixes come first -> easier to backport to
> stable kernels.
> - drop the devm_request_irq() patch as we had to disable the irq anyway
> in remove() in order to avoid spurios IRQs. Using devm variant brings no
> palpable benefit.
> - reword pm_ptr commit message
> 
> 
> at_hdmac driver had poor list handling and concurrency bugs.
> We experienced calling of the completion call twice for the
> same descriptor. Peter Rosin encountered the same while
> reporting a different bug:
> https://lore.kernel.org/lkml/13c6c9a2-6db5-c3bf-349b-4c127ad3496a@axentia.se/
> 
> Two sets of tests were performed:
> 1/ tested just the fixes, to make sure everything is fine and the
> concurrency bugs are squashed even without the conversion to virt-dma.
> All went fine.
> 2/ tested the entire series including the conversion the virt-dma
> All went fine.
> 
> I tested NAND (prep_dma_memcpy), MMC (prep_dma_slave_sg),
> usart (cyclic mode), dmatest (memcpy, memset).

All these tests are reassuring.

The important piece to preserve is the computation of the residue as it 
went with lots of experiments in both silicon and simulation with the IP 
designer. The errors were very difficult to reproduce.
As this part seems well understood and maintained it its good 
conditions, I can give my Ack to the series.
So, for the whole series, after a quick-but-not-too-quick review:
Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>

Thanks for this effort Tudor. Best regards,
   Nicolas

> With the conversion to virt-dma I replaced the election of a new transfer
> in the tasklet with the election of the new transfer in the interrupt
> handler. We should have a shorter idle window as we remove the scheduling
> latency of the tasklet. Using mtd_speedtest showed similar performances
> when using NAND with DMA. That could be because of using a low timming
> mode on NAND.
> 
> 
> Tudor Ambarus (32):
>    dmaengine: at_hdmac: Fix at_lli struct definition
>    dmaengine: at_hdmac: Don't start transactions at tx_submit level
>    dmaengine: at_hdmac: Start transfer for cyclic channels in
>      issue_pending
>    dmaengine: at_hdmac: Fix premature completion of desc in issue_pending
>    dmaengine: at_hdmac: Do not call the complete callback on
>      device_terminate_all
>    dmaengine: at_hdmac: Protect atchan->status with the channel lock
>    dmaengine: at_hdmac: Fix concurrency problems by removing
>      atc_complete_all()
>    dmaengine: at_hdmac: Fix concurrency over descriptor
>    dmaengine: at_hdmac: Free the memset buf without holding the chan lock
>    dmaengine: at_hdmac: Fix concurrency over the active list
>    dmaengine: at_hdmac: Fix descriptor handling when issuing it to
>      hardware
>    dmaengine: at_hdmac: Fix completion of unissued descriptor in case of
>      errors
>    dmaengine: at_hdmac: Don't allow CPU to reorder channel enable
>    dmaengine: at_hdmac: Fix impossible condition
>    dmaengine: at_hdmac: Check return code of dma_async_device_register
>    dmaengine: at_hdmac: Do not print messages on console while holding
>      the lock
>    dmaengine: at_hdmac: Return dma_cookie_status()'s ret code when
>      txstate is NULL
>    dmaengine: at_hdmac: Remove superfluous cast
>    dmaengine: at_hdmac: Pass residue by address to avoid unnecessary
>      implicit casts
>    dmaengine: at_hdmac: s/atc_get_bytes_left/atc_get_residue
>    dmaengine: at_hdmac: Introduce atc_get_llis_residue()
>    dmaengine: at_hdmac: Use devm_kzalloc() and struct_size()
>    dmaengine: at_hdmac: Use devm_platform_ioremap_resource
>    dmaengine: at_hdmac: Use devm_clk_get()
>    dmaengine: at_hdmac: Use pm_ptr()
>    dmaengine: at_hdmac: Set include entries in alphabetic order
>    dmaengine: at_hdmac: Keep register definitions and structures private
>      to at_hdmac.c
>    dmaengine: at_hdmac: Use bitfield access macros
>    dmaengine: at_hdmac: Rename "dma_common" to "dma_device"
>    dmaengine: at_hdmac: Rename "chan_common" to "dma_chan"
>    dmaengine: at_hdmac: Remove unused member of at_dma_chan
>    dmaengine: at_hdmac: Convert driver to use virt-dma
> 
>   MAINTAINERS                 |    1 -
>   drivers/dma/Kconfig         |    1 +
>   drivers/dma/at_hdmac.c      | 1899 ++++++++++++++++++-----------------
>   drivers/dma/at_hdmac_regs.h |  478 ---------
>   4 files changed, 990 insertions(+), 1389 deletions(-)
>   delete mode 100644 drivers/dma/at_hdmac_regs.h
> 

-- 
Nicolas Ferre


  parent reply	other threads:[~2022-10-28 13:00 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-25  9:02 [PATCH v2 00/32] dmaengine: at_hdmac: Fix concurrency bugs and then convert to virt-dma Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 01/32] dmaengine: at_hdmac: Fix at_lli struct definition Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 02/32] dmaengine: at_hdmac: Don't start transactions at tx_submit level Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 03/32] dmaengine: at_hdmac: Start transfer for cyclic channels in issue_pending Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 04/32] dmaengine: at_hdmac: Fix premature completion of desc " Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 05/32] dmaengine: at_hdmac: Do not call the complete callback on device_terminate_all Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 06/32] dmaengine: at_hdmac: Protect atchan->status with the channel lock Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 07/32] dmaengine: at_hdmac: Fix concurrency problems by removing atc_complete_all() Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 08/32] dmaengine: at_hdmac: Fix concurrency over descriptor Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 09/32] dmaengine: at_hdmac: Free the memset buf without holding the chan lock Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 10/32] dmaengine: at_hdmac: Fix concurrency over the active list Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 11/32] dmaengine: at_hdmac: Fix descriptor handling when issuing it to hardware Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 12/32] dmaengine: at_hdmac: Fix completion of unissued descriptor in case of errors Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 13/32] dmaengine: at_hdmac: Don't allow CPU to reorder channel enable Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 14/32] dmaengine: at_hdmac: Fix impossible condition Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 15/32] dmaengine: at_hdmac: Check return code of dma_async_device_register Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 16/32] dmaengine: at_hdmac: Do not print messages on console while holding the lock Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 17/32] dmaengine: at_hdmac: Return dma_cookie_status()'s ret code when txstate is NULL Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 18/32] dmaengine: at_hdmac: Remove superfluous cast Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 19/32] dmaengine: at_hdmac: Pass residue by address to avoid unnecessary implicit casts Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 20/32] dmaengine: at_hdmac: s/atc_get_bytes_left/atc_get_residue Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 21/32] dmaengine: at_hdmac: Introduce atc_get_llis_residue() Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 22/32] dmaengine: at_hdmac: Use devm_kzalloc() and struct_size() Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 23/32] dmaengine: at_hdmac: Use devm_platform_ioremap_resource Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 24/32] dmaengine: at_hdmac: Use devm_clk_get() Tudor Ambarus
2022-10-25  9:02 ` [PATCH v2 25/32] dmaengine: at_hdmac: Use pm_ptr() Tudor Ambarus
2022-10-25  9:03 ` [PATCH v2 26/32] dmaengine: at_hdmac: Set include entries in alphabetic order Tudor Ambarus
2022-10-25  9:03 ` [PATCH v2 27/32] dmaengine: at_hdmac: Keep register definitions and structures private to at_hdmac.c Tudor Ambarus
2022-10-25  9:03 ` [PATCH v2 28/32] dmaengine: at_hdmac: Use bitfield access macros Tudor Ambarus
2022-10-25  9:03 ` [PATCH v2 29/32] dmaengine: at_hdmac: Rename "dma_common" to "dma_device" Tudor Ambarus
2022-10-25  9:03 ` [PATCH v2 30/32] dmaengine: at_hdmac: Rename "chan_common" to "dma_chan" Tudor Ambarus
2022-10-25  9:03 ` [PATCH v2 31/32] dmaengine: at_hdmac: Remove unused member of at_dma_chan Tudor Ambarus
2022-10-25  9:03 ` [PATCH v2 32/32] dmaengine: at_hdmac: Convert driver to use virt-dma Tudor Ambarus
2022-10-28 12:55   ` Nicolas Ferre
2022-10-25  9:06 ` [PATCH v2 00/32] dmaengine: at_hdmac: Fix concurrency bugs and then convert to virt-dma Tudor.Ambarus
2022-10-28 13:00 ` Nicolas Ferre [this message]
2022-11-04 13:22 ` Vinod Koul
2022-11-04 15:14   ` Tudor.Ambarus
2022-11-04 15:21     ` Tudor.Ambarus
2022-11-04 17:59       ` Vinod Koul
2022-11-07  4:33         ` Vinod Koul
2022-11-07  9:00           ` Tudor.Ambarus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4fc31b0c-3295-2272-52c8-548634c3a6dc@microchip.com \
    --to=nicolas.ferre@microchip.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=du@axentia.se \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maciej.sosnowski@intel.com \
    --cc=mripard@kernel.org \
    --cc=peda@axentia.se \
    --cc=torfl6749@gmail.com \
    --cc=tudor.ambarus@microchip.com \
    --cc=vkoul@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).