linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 0/7] add virt-dma support for imx-sdma
@ 2018-06-19 16:56 Robin Gong
  2018-06-19 16:56 ` [PATCH v5 1/7] tty: serial: imx: correct dma cookie status Robin Gong
                   ` (9 more replies)
  0 siblings, 10 replies; 18+ messages in thread
From: Robin Gong @ 2018-06-19 16:56 UTC (permalink / raw)
  To: vkoul, s.hauer, l.stach, dan.j.williams, gregkh, jslaby
  Cc: linux-serial, dmaengine, linux-kernel, linux-arm-kernel, linux-imx

The legacy sdma driver has below limitations or drawbacks:
  1. Hardcode the max BDs number as "PAGE_SIZE / sizeof(*)", and alloc
     one page size for one channel regardless of only few BDs needed
     most time. But in few cases, the max PAGE_SIZE maybe not enough.
  2. One SDMA channel can't stop immediatley once channel disabled which
     means SDMA interrupt may come in after this channel terminated.There
     are some patches for this corner case such as commit "2746e2c389f9",
     but not cover non-cyclic.

The common virt-dma overcomes the above limitations. It can alloc bd
dynamically and free bd once this tx transfer done. No memory wasted or
maximum limititation here, only depends on how many memory can be requested
from kernel. For No.2, such issue can be workaround by checking if there
is available descript("sdmac->desc") now once the unwanted interrupt
coming. At last the common virt-dma is easier for sdma driver maintain.

Change from v4:
  1. identify lockdep issue which caused by allocate memory with
     'GFP_KERNEL', change to 'GFP_NOWAIT' instead so that lockdep
     ignore check. That also make sense since Audio/uart driver may
     call dma function after spin_lock_irqsave()...
  2. use dma pool instead for bd description allocated,since audio
     driver may call dma_terminate_all in irq. Please refer to 7/7.
  3. remove 7/7 serial patch in v4, since lockdep issued fixed by No.1 

Change from v3:
  1. add two uart patches which impacted by this patchset.
  2. unlock 'vc.lock' before cyclic dma callback and lock again after
     it because some driver such as uart will call dmaengine_tx_status
     which will acquire 'vc.lock' again and dead lock comes out.
  3. remove 'Revert commit' stuff since that patch is not wrong and
     combine two patch into one patch as Sascha's comment.

Change from v2:
  1. include Sascha's patch to make the main patch easier to review.
     Thanks Sacha.
  2. remove useless 'desc'/'chan' in struct sdma_channe.

Change from v1:
  1. split v1 patch into 5 patches.
  2. remove some unnecessary condition check.
  3. remove unnecessary 'pending' list.

Robin Gong (6):
  tty: serial: imx: correct dma cookie status
  dmaengine: imx-sdma: add virt-dma support
  dmaengine: imx-sdma: remove useless 'lock' and 'enabled' in 'struct
    sdma_channel'
  dmaengine: imx-sdma: remove the maximum limitation for bd numbers
  dmaengine: imx-sdma: add sdma_transfer_init to decrease code overlap
  dmaengine: imx-sdma: alloclate bd memory from dma pool

Sascha Hauer (1):
  dmaengine: imx-sdma: factor out a struct sdma_desc from struct
    sdma_channel

 drivers/dma/Kconfig      |   1 +
 drivers/dma/imx-sdma.c   | 400 +++++++++++++++++++++++++++--------------------
 drivers/tty/serial/imx.c |   2 +-
 3 files changed, 235 insertions(+), 168 deletions(-)

-- 
2.7.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2018-08-06 12:44 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-19 16:56 [PATCH v5 0/7] add virt-dma support for imx-sdma Robin Gong
2018-06-19 16:56 ` [PATCH v5 1/7] tty: serial: imx: correct dma cookie status Robin Gong
2018-06-26 19:22   ` Uwe Kleine-König
2018-06-29 11:03     ` Vinod
2018-06-19 16:56 ` [PATCH v5 2/7] dmaengine: imx-sdma: factor out a struct sdma_desc from struct sdma_channel Robin Gong
2018-06-19 16:57 ` [PATCH v5 3/7] dmaengine: imx-sdma: add virt-dma support Robin Gong
2018-06-19 16:57 ` [PATCH v5 4/7] dmaengine: imx-sdma: remove useless 'lock' and 'enabled' in 'struct sdma_channel' Robin Gong
2018-06-19 16:57 ` [PATCH v5 5/7] dmaengine: imx-sdma: remove the maximum limitation for bd numbers Robin Gong
2018-06-19 16:57 ` [PATCH v5 6/7] dmaengine: imx-sdma: add sdma_transfer_init to decrease code overlap Robin Gong
2018-06-19 16:57 ` [PATCH v5 7/7] dmaengine: imx-sdma: alloclate bd memory from dma pool Robin Gong
2018-08-06 12:44   ` Lucas Stach
2018-06-22  1:12 ` [PATCH v5 0/7] add virt-dma support for imx-sdma Robin Gong
2018-06-22  6:14 ` Sascha Hauer
2018-06-26 15:04 ` Lucas Stach
2018-06-27  1:18   ` Robin Gong
2018-07-02  2:32   ` Robin Gong
2018-07-02 13:17     ` Vinod
2018-07-03  2:57       ` Robin Gong

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).