public inbox for linux-crypto@vger.kernel.org
 help / color / mirror / Atom feed
From: Vinod Koul <vkoul@kernel.org>
To: Frank Li <Frank.li@nxp.com>
Cc: "Manivannan Sadhasivam" <mani@kernel.org>,
	"Krzysztof Wilczyński" <kwilczynski@kernel.org>,
	"Kishon Vijay Abraham I" <kishon@kernel.org>,
	"Bjorn Helgaas" <bhelgaas@google.com>,
	"Christoph Hellwig" <hch@lst.de>,
	"Sagi Grimberg" <sagi@grimberg.me>,
	"Chaitanya Kulkarni" <kch@nvidia.com>,
	"Herbert Xu" <herbert@gondor.apana.org.au>,
	"David S. Miller" <davem@davemloft.net>,
	"Nicolas Ferre" <nicolas.ferre@microchip.com>,
	"Alexandre Belloni" <alexandre.belloni@bootlin.com>,
	"Claudiu Beznea" <claudiu.beznea@tuxon.dev>,
	"Koichiro Den" <den@valinux.co.jp>,
	"Niklas Cassel" <cassel@kernel.org>,
	dmaengine@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-pci@vger.kernel.org, linux-nvme@lists.infradead.org,
	mhi@lists.linux.dev, linux-arm-msm@vger.kernel.org,
	linux-crypto@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, imx@lists.linux.dev
Subject: Re: [PATCH v2 1/8] dmaengine: Add API to combine configuration and preparation (sg and single)
Date: Tue, 17 Mar 2026 16:07:41 +0530	[thread overview]
Message-ID: <abku9bXxkZWUwOhE@vaman> (raw)
In-Reply-To: <aa7cbL-B5sbjZr_l@lizhi-Precision-Tower-5810>

On 09-03-26, 10:42, Frank Li wrote:
> On Mon, Mar 09, 2026 at 12:04:59PM +0100, Vinod Koul wrote:
> > On 18-12-25, 10:56, Frank Li wrote:
> > > Previously, configuration and preparation required two separate calls. This
> > > works well when configuration is done only once during initialization.
> > >
> > > However, in cases where the burst length or source/destination address must
> > > be adjusted for each transfer, calling two functions is verbose and
> > > requires additional locking to ensure both steps complete atomically.
> > >
> > > Add a new API dmaengine_prep_config_single() and dmaengine_prep_config_sg()
> > > and callback device_prep_config_sg() that combines configuration and
> > > preparation into a single operation. If the configuration argument is
> > > passed as NULL, fall back to the existing implementation.
> > >
> > > Add a new API dmaengine_prep_config_single_safe() and
> > > dmaengine_prep_config_sg_safe() for re-entrancy, which require driver
> > > implement callback device_prep_config_sg().
> >
> > Okay to add API
> >
> > > +	struct dma_async_tx_descriptor *(*device_prep_config_sg)(
> > > +		struct dma_chan *chan, struct scatterlist *sgl,
> > > +		unsigned int sg_len, enum dma_transfer_direction direction,
> > > +		unsigned long flags, struct dma_slave_config *config,
> > > +		void *context);
> >
> > Do we want to have drivers implement one more callback. It does not make
> > sense to me. Why not handle this in framework and have it call the
> > respective lower level APIs.
> 
> To avoid use addtional lock! suppose each API is re-entriable.
> 
> thread 1:  call dmaengine_prep_config_sg_safe()
> thread 2:  call dmaengine_prep_config_sg_safe()
> 
> If DMA engine driver implement device_prep_config_sg, thread 1 and thread 2
> can run parallel.
> 
> If driver have not implement this callback, it have to use mutex make sure
> config and prep atomic.
> 
> https://lore.kernel.org/dmaengine/20260109-edma_dymatic-v1-0-9a98c9c98536@nxp.com/
> show finial opitimziation result, which depend on this. If can't call
> prep() function parallel, which will kill performace.

Which seems to be 10% in your case.

> > Drivers should implement simple apis and collectively the functionality
> > can come from the framework.
> >
> > Would you consider revising as such. Bonus all existing drivers can
> > start using this API, no change required for drivers in that case'
> 
> Not that simple, some devices just call config at probe, especial fix
> FIFO address and burst length.
> 
> Call config and prep only need for the case, which need adjust src/dst
> address, burst length or other parameter for each transfer.

Correct. In the cases where config is done once they can invoke with
NULL config. I would like the middle layer to handle complexities and
drivers should be simpler

> 
> Frank
> 
> >
> >
> > --
> > ~Vinod

-- 
~Vinod

  reply	other threads:[~2026-03-17 10:37 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-18 15:56 [PATCH v2 0/8] dmaengine: Add new API to combine onfiguration and descriptor preparation Frank Li
2025-12-18 15:56 ` [PATCH v2 1/8] dmaengine: Add API to combine configuration and preparation (sg and single) Frank Li
2025-12-19 10:33   ` Damien Le Moal
2025-12-23 10:41   ` Vinod Koul
2026-03-09 11:04   ` Vinod Koul
2026-03-09 14:42     ` Frank Li
2026-03-17 10:37       ` Vinod Koul [this message]
2026-03-17 14:04         ` Frank Li
2025-12-18 15:56 ` [PATCH v2 2/8] PCI: endpoint: pci-epf-test: Use dmaenigne_prep_config_single() to simplify code Frank Li
2025-12-19 10:34   ` Damien Le Moal
2025-12-18 15:56 ` [PATCH v2 3/8] dmaengine: dw-edma: Use new .device_prep_config_sg() callback Frank Li
2025-12-19 10:35   ` Damien Le Moal
2025-12-18 15:56 ` [PATCH v2 4/8] dmaengine: dw-edma: Pass dma_slave_config to dw_edma_device_transfer() Frank Li
2025-12-19 10:38   ` Damien Le Moal
2025-12-18 15:56 ` [PATCH v2 5/8] nvmet: pci-epf: Remove unnecessary dmaengine_terminate_sync() on each DMA transfer Frank Li
2025-12-19 10:38   ` Damien Le Moal
2025-12-18 15:56 ` [PATCH v2 6/8] nvmet: pci-epf: Use dmaengine_prep_config_single_safe() API Frank Li
2025-12-19 10:42   ` Damien Le Moal
2025-12-18 15:56 ` [PATCH v2 7/8] PCI: epf-mhi: Use dmaengine_prep_config_single() to simplify code Frank Li
2025-12-18 15:56 ` [PATCH v2 8/8] crypto: atmel: Use dmaengine_prep_config_single() API Frank Li

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=abku9bXxkZWUwOhE@vaman \
    --to=vkoul@kernel.org \
    --cc=Frank.li@nxp.com \
    --cc=alexandre.belloni@bootlin.com \
    --cc=bhelgaas@google.com \
    --cc=cassel@kernel.org \
    --cc=claudiu.beznea@tuxon.dev \
    --cc=davem@davemloft.net \
    --cc=den@valinux.co.jp \
    --cc=dmaengine@vger.kernel.org \
    --cc=hch@lst.de \
    --cc=herbert@gondor.apana.org.au \
    --cc=imx@lists.linux.dev \
    --cc=kch@nvidia.com \
    --cc=kishon@kernel.org \
    --cc=kwilczynski@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvme@lists.infradead.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=mani@kernel.org \
    --cc=mhi@lists.linux.dev \
    --cc=nicolas.ferre@microchip.com \
    --cc=sagi@grimberg.me \
    /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