1. 22 Dec, 2023 1 commit
    • Jan Kuliga's avatar
      dmaengine: xilinx: xdma: Rework xdma_terminate_all() · 855c2e1d
      Jan Kuliga authored
      Simplify xdma_xfer_stop(). Stop the dma engine and clear its status
      register unconditionally - just do what its name states. This change
      also allows to call it without grabbing a lock, which minimizes
      the total time spent with a spinlock held.
      
      Delete the currently processed vd.node from the vc.desc_issued list
      prior to passing it to vchan_terminate_vdesc(). In case there's more
      than one descriptor pending on vc.desc_issued list, calling
      vchan_terminate_desc() results in losing the link between
      vc.desc_issued list head and the second descriptor on the list. Doing so
      results in resources leakege, as vchan_dma_desc_free_list() won't be
      able to properly free memory resources attached to descriptors,
      resulting in dma_pool_destroy() failure.
      
      Don't call vchan_dma_desc_free_list() from within xdma_terminate_all().
      Move all terminated descriptors to the vc.desc_terminated list instead.
      This allows to postpone freeing memory resources associated with
      descriptors until the call to vchan_synchronize(), which is called from
      xdma_synchronize() callback. This is the right way to do it -
      xdma_terminate_all() should return as soon as possible, while freeing
      resources (that may be time consuming in case of large number of
      descriptors) can be done safely later.
      
      Fixes: f5c392d1 ("dmaengine: xilinx: xdma: Add terminate_all/synchronize callbacks")
      Signed-off-by: default avatarJan Kuliga <jankul@alatek.krakow.pl>
      Link: https://lore.kernel.org/r/20231218113943.9099-5-jankul@alatek.krakow.plSigned-off-by: default avatarVinod Koul <vkoul@kernel.org>
      855c2e1d
  2. 21 Dec, 2023 22 commits
  3. 11 Dec, 2023 7 commits
  4. 24 Nov, 2023 10 commits