From: Cyril Chemparathy <cyril-l0cyMroinI0@public.gmane.org>
To: Linus Walleij <linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Cc: Sergei Shtylyov
<sshtylyov-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org>,
Documentation List
<linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Lindgren <tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>,
Russell King - ARM Linux
<linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org>,
Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
"Nair, Sandeep" <sandeep_n-l0cyMroinI0@public.gmane.org>,
Chris Ball <cjb-2X9k7bc8m7Mdnm+yROfE0A@public.gmane.org>,
Matt Porter <mporter-l0cyMroinI0@public.gmane.org>,
Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>,
Devicetree Discuss
<devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org>,
Dan Williams <djbw-b10kYP2dOMg@public.gmane.org>,
Rob Herring <rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>,
Linux OMAP List
<linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
ARM Kernel List
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
Linux DaVinci Kernel List
<davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org>,
"Cousson, Benoit" <b-cousson-l0cyMroinI0@public.gmane.org>,
Mark Brown
<broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org>,
MMC List <linux-mmc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Linux Kernel Mailing List
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
balbi-l0cyMroinI0@public.gmane.org,
Landley <rob-VoJi6FS/r0vR7s880joybQ@public.gmane.org>LinuxLinux
Subject: Re: [PATCH v7 01/10] ARM: davinci: move private EDMA API to arm/common
Date: Mon, 4 Feb 2013 17:30:51 -0500 [thread overview]
Message-ID: <5110369B.9060901@ti.com> (raw)
In-Reply-To: <CACRpkdZihnp3_Df==QRWxQupgi7W_YXZxc-MxkusVH6J+Vx56A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
On 02/04/2013 03:29 PM, Linus Walleij wrote:
> On Mon, Feb 4, 2013 at 8:22 PM, Cyril Chemparathy <cyril-l0cyMroinI0@public.gmane.org> wrote:
>
>> Based on our experience with fitting multiple subsystems on top of this
>> DMA-Engine driver, I must say that the DMA-Engine interface has proven
>> to be a less than ideal fit for the network driver use case.
>>
>> The first problem is that the DMA-Engine interface expects to "push"
>> completed traffic up into the upper layer as a part of its callback.
>> This doesn't fit cleanly with NAPI, which expects to "pull" completed
>> traffic from below in the NAPI poll. We've somehow kludged together a
>> solution around this, but it isn't very elegant.
>
> I cannot understand the actual technical problem from the above
> paragraphs though. dmaengine doesn't have a concept of pushing
> nor polling, it basically copies streams of words from A to B, where
> A/B can be a device or a buffer, nothing else.
>
NAPI needs to switch between polled and interrupt driven modes of
operation. Further, in a given poll, it needs to be able to limit the
amount of traffic processed to a specified budget.
> The thing you're looking for sounds more like an adapter on top
> of dmaengine, which can surely be constructed, some
> drivers/dma/dmaengine-napi.c or whatever.
>
I'm not debating the possibility of duct-taping a network driver on top
of the dma-engine interface. That is very much doable, and we have done
this already.
Starting with a stock dma-engine driver, our first approach was to use
dmaengine_pause() and dmaengine_resume() in the network driver to
throttle completion callbacks per NAPI's needs. This worked, but it was
ugly because the completion callback was now being used in a
multi-purpose fashion - (a) as an interrupt notifier [to do a
napi_schedule()], and (b) as a hand over mechanism for completed packets
[within a napi_poll()]. The network driver needed to maintain a nasty
little state machine for this, and this ended up being quite non-trivial
after we'd fixed up most of the issues.
Having learned our lessons from the first attempt, the second step was
to add a separate notification callback from the dma-engine layer - a
notification independent of any particular descriptor. With this
callback in place, we got rid of some of the state machine crap in the
network driver.
The third step was to add a dmaengine_poll() call instead of constantly
bouncing a channel between paused and running states. This further
cleaned up some of the network driver code, but now the dma-engine
driver looks like crap if it needs to support both the traditional and
new (i.e. notify + poll) modes. This is where we are at today.
Even with the addition of these extensions, the interaction between the
network driver and the dma-engine driver is clumsy and involves multiple
back and forth calls per packet. This is not elegant, and certainly not
efficient. In comparison, the virtqueue interface is a natural fit with
the network driver, and is free of the aforementioned problems.
[...]
> Surely the way to look up resources cannot be paramount in this
> discussion, I think the real problem must be your specific networking
> usecase, so we need to drill into that.
>
Agreed. The dma resource to driver binding is certainly a lesser
problem than the first. There are a variety of schemes that we could
cook up here (filter functions, named lookups, etc.). However, I think
that these schemes offer advantages when the binding between the dma
resource and the dma user is somewhat dynamic.
On the other hand, when the binding between a dma resource and user is
fixed by hardware and/or configuration, the driver model approach works
better, IMHO.
Thanks
-- Cyril.
------------------------------------------------------------------------------
Free Next-Gen Firewall Hardware Offer
Buy your Sophos next-gen firewall before the end March 2013
and get the hardware for free! Learn more.
http://p.sf.net/sfu/sophos-d2d-feb
next prev parent reply other threads:[~2013-02-04 22:30 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-01 18:22 [PATCH v7 00/10] DMA Engine support for AM33XX Matt Porter
[not found] ` <1359742975-10421-1-git-send-email-mporter-l0cyMroinI0@public.gmane.org>
2013-02-01 18:22 ` [PATCH v7 01/10] ARM: davinci: move private EDMA API to arm/common Matt Porter
2013-02-01 18:41 ` Tony Lindgren
2013-02-02 12:49 ` Russell King - ARM Linux
2013-02-02 14:44 ` Matt Porter
[not found] ` <5022f635a527470dbd0be932063e9cd2@DFLE72.ent.ti.com>
2013-02-01 18:49 ` Matt Porter
[not found] ` <2077c13e12314dc3adc8e5b653855da0@DFLE72.ent.ti.com>
2013-02-01 18:59 ` Matt Porter
2013-02-02 0:01 ` Sergei Shtylyov
2013-02-02 12:45 ` Russell King - ARM Linux
2013-02-02 17:27 ` Sergei Shtylyov
[not found] ` <e9be6668da8b4372a04687847daa1d8c@DFLE72.ent.ti.com>
2013-02-02 18:07 ` Matt Porter
2013-02-02 18:16 ` Tony Lindgren
2013-02-02 19:48 ` Matt Porter
2013-02-02 21:02 ` Tony Lindgren
2013-02-02 19:06 ` Sergei Shtylyov
[not found] ` <3245316d7aa94b2e823f98b69497547d@DLEE74.ent.ti.com>
[not found] ` <3245316d7aa94b2e823f98b69497547d-0VoBT8GTp4aIQmiDNMet8wC/G2K4zDHf@public.gmane.org>
2013-02-02 19:55 ` Matt Porter
2013-02-02 20:18 ` Sergei Shtylyov
2013-02-01 19:52 ` Sergei Shtylyov
[not found] ` <510C1D0E.6030401-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org>
2013-02-01 18:58 ` Felipe Balbi
2013-02-01 20:49 ` Sergei Shtylyov
[not found] ` <510C2A47.1090607-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org>
2013-02-01 20:56 ` Felipe Balbi
2013-02-01 21:30 ` Russell King - ARM Linux
2013-02-02 0:07 ` Sergei Shtylyov
2013-02-02 0:44 ` Russell King - ARM Linux
[not found] ` <20130202004455.GX2637-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2013-02-02 2:09 ` Sergei Shtylyov
2013-02-02 10:18 ` Russell King - ARM Linux
2013-02-02 12:17 ` Russell King - ARM Linux
[not found] ` <20130202121738.GZ2637-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2013-02-02 17:02 ` Sergei Shtylyov
[not found] ` <20130202101851.GY2637-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2013-02-02 16:27 ` Sergei Shtylyov
2013-02-02 16:45 ` Russell King - ARM Linux
[not found] ` <20130202164522.GC2637-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2013-02-02 17:17 ` Sergei Shtylyov
[not found] ` <510C58DF.3010103-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org>
2013-02-04 14:27 ` Arnd Bergmann
2013-02-02 0:13 ` Sergei Shtylyov
[not found] ` <20130201213003.GW2637-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2013-02-04 15:41 ` Felipe Balbi
2013-02-04 15:45 ` Russell King - ARM Linux
2013-02-04 17:36 ` Sergei Shtylyov
2013-02-04 16:47 ` Felipe Balbi
2013-02-04 17:10 ` Russell King - ARM Linux
2013-02-04 17:54 ` Sergei Shtylyov
[not found] ` <510FF5C9.3030600-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org>
2013-02-04 17:02 ` Felipe Balbi
2013-02-04 18:22 ` Sergei Shtylyov
[not found] ` <20130204170216.GC4269-S8G//mZuvNWo5Im9Ml3/Zg@public.gmane.org>
2013-02-04 19:22 ` Cyril Chemparathy
2013-02-04 20:29 ` Linus Walleij
2013-02-04 20:33 ` Mark Brown
2013-02-04 21:11 ` Linus Walleij
[not found] ` <CACRpkdbPyZt8=pLhz-5qcaSSAk6VBn61dPTNp6teU9HksBwN2w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-02-04 21:47 ` Arnd Bergmann
2013-02-05 12:38 ` Russell King - ARM Linux
[not found] ` <20130205123828.GB17852-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2013-02-05 15:37 ` Cyril Chemparathy
2013-02-04 21:54 ` Cyril Chemparathy
2013-02-05 12:41 ` Russell King - ARM Linux
[not found] ` <20130205124120.GC17852-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2013-02-05 15:42 ` Cyril Chemparathy
2013-02-05 15:30 ` Linus Walleij
2013-02-05 17:14 ` Russell King - ARM Linux
[not found] ` <20130205171451.GE17852-l+eeeJia6m9vn6HldHNs0ANdhmdF6hFW@public.gmane.org>
2013-02-05 18:33 ` Linus Walleij
[not found] ` <CACRpkdZihnp3_Df==QRWxQupgi7W_YXZxc-MxkusVH6J+Vx56A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-02-04 22:30 ` Cyril Chemparathy [this message]
[not found] ` <5110369B.9060901-l0cyMroinI0@public.gmane.org>
2013-02-05 16:21 ` Linus Walleij
2013-02-05 16:47 ` Mark Brown
2013-02-05 17:06 ` Russell King - ARM Linux
2013-02-05 17:41 ` Mark Brown
2013-02-05 18:29 ` Linus Walleij
[not found] ` <CACRpkdbeoMO1rjPiWDAuVL0uYwMGF+9-vCxqoMiMd1uAgZm=RQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-02-05 19:45 ` Cyril Chemparathy
2013-02-05 18:28 ` Tony Lindgren
[not found] ` <20130205182848.GJ25185-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org>
2013-02-05 22:26 ` Arnd Bergmann
[not found] ` <201302052226.30754.arnd-r2nGTMty4D4@public.gmane.org>
2013-02-06 7:45 ` Felipe Balbi
2013-02-01 23:10 ` Sergei Shtylyov
[not found] ` <1359742975-10421-2-git-send-email-mporter-l0cyMroinI0@public.gmane.org>
2013-02-09 16:05 ` Sekhar Nori
2013-02-09 20:08 ` Russell King - ARM Linux
2013-03-04 22:05 ` Matt Porter
[not found] ` <e92425fefcc04bb4ab739ec8d4e82672@DLEE74.ent.ti.com>
[not found] ` <e92425fefcc04bb4ab739ec8d4e82672-0VoBT8GTp4aIQmiDNMet8wC/G2K4zDHf@public.gmane.org>
2013-03-04 22:12 ` Matt Porter
2013-02-01 18:22 ` [PATCH v7 02/10] ARM: edma: remove unused transfer controller handlers Matt Porter
2013-02-01 18:22 ` [PATCH v7 05/10] dmaengine: edma: Add TI EDMA device tree binding Matt Porter
2013-02-01 18:26 ` Matt Porter
2013-02-01 18:22 ` [PATCH v7 06/10] ARM: dts: add AM33XX EDMA support Matt Porter
2013-02-01 18:22 ` [PATCH v7 07/10] dmaengine: add dma_request_slave_channel_compat() Matt Porter
2013-02-01 18:28 ` Matt Porter
2013-02-12 16:38 ` Vinod Koul
2013-02-01 18:22 ` [PATCH v7 08/10] spi: omap2-mcspi: convert to dma_request_slave_channel_compat() Matt Porter
2013-02-01 18:22 ` [PATCH v7 09/10] spi: omap2-mcspi: add generic DMA request support to the DT binding Matt Porter
2013-02-01 18:22 ` [PATCH v7 10/10] ARM: dts: add AM33XX SPI DMA support Matt Porter
2013-02-01 18:22 ` [PATCH v7 03/10] ARM: edma: add AM33XX support to the private EDMA API Matt Porter
2013-02-01 18:22 ` [PATCH v7 04/10] dmaengine: edma: enable build for AM33XX Matt Porter
2013-02-01 18:32 ` [PATCH v7 00/10] DMA Engine support " Matt Porter
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=5110369B.9060901@ti.com \
--to=cyril-l0cymroini0@public.gmane.org \
--cc=arnd-r2nGTMty4D4@public.gmane.org \
--cc=b-cousson-l0cyMroinI0@public.gmane.org \
--cc=balbi-l0cyMroinI0@public.gmane.org \
--cc=broonie-yzvPICuk2AATkU/dhu1WVueM+bqZidxxQQ4Iyu8u01E@public.gmane.org \
--cc=cjb-2X9k7bc8m7Mdnm+yROfE0A@public.gmane.org \
--cc=davinci-linux-open-source-VycZQUHpC/PFrsHnngEfi1aTQe2KTcn/@public.gmane.org \
--cc=devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org \
--cc=djbw-b10kYP2dOMg@public.gmane.org \
--cc=linus.walleij-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
--cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-lFZ/pmaqli7XmaaqVzeoHQ@public.gmane.org \
--cc=linux-mmc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-omap-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mporter-l0cyMroinI0@public.gmane.org \
--cc=rob-VoJi6FS/r0vR7s880joybQ@public.gmane.org \
--cc=rob.herring-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org \
--cc=sandeep_n-l0cyMroinI0@public.gmane.org \
--cc=sshtylyov-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org \
--cc=tony-4v6yS6AI5VpBDgjK7y7TUQ@public.gmane.org \
--cc=vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.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 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).