All of lore.kernel.org
 help / color / mirror / Atom feed
From: Federico Vaga <federico.vaga@cern.ch>
To: Vinod Koul <vkoul@kernel.org>, <linux-kernel@vger.kernel.org>
Cc: <dmaengine@vger.kernel.org>
Subject: dmaengine: usage of dmaengine_get() and dma_find_channel()
Date: Mon, 21 Jan 2019 17:41:58 +0100	[thread overview]
Message-ID: <23108003.0nNWatJzJB@pcbe13614> (raw)

Hello,

I am a bit puzzle about the proper usage these two functions:

void dmaengine_get(void)
struct dma_chan *dma_find_channel(enum dma_transaction_type tx_type)

Looking into the kernel sources dma_find_channel is not used, despite the fact 
that it looks as one of the suggested mechanism to access a DMA engine. So, I 
cannot find a valid example of its usage.

The same for dmaengine_get(). On the other hand, at least this function is 
used in: drivers/video/fbdev/mx3fb.c. But I believe that its usage is wrong 
because it uses: dmaengine_get() + dma_request_channel(), instead of 
dmaengine_get() + dma_find_channel().

Reading the code my understanding is that dmaengine_get() + dma_find_channel() 
should be used for "public" (not private) DMA engine channels.

It's here where things are getting obscure to me. My understanding is that DMA 
channels which are not private can be used by several drivers at the same 
time. In principle they submit all their transfers and the DMA engine will 
process them and then the DMA engine will notify the drivers about their 
completion.

My understanding is also that the dmaengine subsystem assumes that "public" 
channels of the same type are interchangeable.

In my use case I wrote a DMA engine which is specific for a subset of driver, 
and it cannot be used by others (so is sharable among a group of drivers). All 
these drivers, potentially, they can submit their transfers to the DMA engine 
in parallel; but I cannot do it because I'm forced to use 
dma_request_channel() in order to be able to filter the DMA channels, and this 
will make automatically the channel PRIVATE which prevents other drivers to 
use the same channel.

With the current API I do not see alternative for me. I have to use 
dma_request_channel() in order to filter DMA channels. But I am wondering if 
it make sense for you, and if it does, is there a solution today? Or, is it 
possibile to design one?

Thanks (I do not know if this message is clear enough)



             reply	other threads:[~2019-01-21 16:42 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-21 16:41 Federico Vaga [this message]
2019-01-23 12:15 ` dmaengine: usage of dmaengine_get() and dma_find_channel() Vinod Koul
2019-01-23 12:36   ` Federico Vaga

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=23108003.0nNWatJzJB@pcbe13614 \
    --to=federico.vaga@cern.ch \
    --cc=dmaengine@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.