lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Fri, 28 Oct 2022 15:00:38 +0200
From:   Nicolas Ferre <nicolas.ferre@...rochip.com>
To:     Tudor Ambarus <tudor.ambarus@...rochip.com>, <vkoul@...nel.org>,
        <peda@...ntia.se>, <du@...ntia.se>
CC:     <maciej.sosnowski@...el.com>, <mripard@...nel.org>,
        <torfl6749@...il.com>, <linux-kernel@...r.kernel.org>,
        <dmaengine@...r.kernel.org>, <linux-arm-kernel@...ts.infradead.org>
Subject: Re: [PATCH v2 00/32] dmaengine: at_hdmac: Fix concurrency bugs and
 then convert to virt-dma

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@...rochip.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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ