From: "Bryan O'Sullivan" <bos@pathscale.com>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1 of 3] Introduce __raw_memcpy_toio32
Date: Tue, 10 Jan 2006 07:59:21 -0800 [thread overview]
Message-ID: <1136908761.32183.18.camel@serpentine.pathscale.com> (raw)
In-Reply-To: <20060110011844.7a4a1f90.akpm@osdl.org>
On Tue, 2006-01-10 at 01:18 -0800, Andrew Morton wrote:
> "Bryan O'Sullivan" <bos@pathscale.com> wrote:
> >
> > This arch-independent routine copies data to a memory-mapped I/O region,
> > using 32-bit accesses. It does not guarantee access ordering, nor does
> > it perform a memory barrier afterwards. This style of access is required
> > by some devices.
>
> Not providing orderingor barriers makes this a rather risky thing to export
> - people might use it, find their driver "works" on one architecture, but
> fails on another.
The kdoc comments for the routine clearly state these limitations, so I
hope that between the comments and the naming, the risk is minimal.
> I guess the "__" is a decent warning of this, and the patch anticipates a
> higher-level raw_memcpy_toio32() which implements those things, yes?
It leaves room for it, yes, though I don't see much reason to add such a
routine until a driver specifically needs it.
> How come __raw_memcpy_toio32() is inlined?
There's no technical reason for it to be. I'm simply trying to find an
acceptable way to get the code into the tree that accommodates per-arch
implementations.
So let me rewind a little and state my problem.
My driver needs a copy routine that works in 32-bit chunks, writes to
MMIO space, doesn't care about ordering, and doesn't guarantee a memory
barrier. It also very much wants individual arches to be able to
implement this routine themselves; even though it's a small, simple
loop, we've benchmarked our x86_64 version as giving us 5% better
performance overall (i.e. visible to apps, not just microbenchmarks)
when doing reasonably large copies. I'd expect other arches to have
similar benefits.
I'm more than willing to recast the code into whatever form makes people
happy, but it would be greatly beneficial to me if it also met my
requirements.
So far, my attempts have been thus:
* out of line, with __HAVE_ARCH_XXX to avoid bloat on arches that
have specialised implementations - __HAVE_ARCH_XXX is out of
style
* out of line, unconditional - made people unhappy on bloat
grounds, since arches that have specialised implementations end
up with an extra unneeded routine
* inline, apparently in Linus's preferred style - an inline that
isn't really necessary
For a routine whose C implementation is six lines long, it's had an
impressive submission history :-)
What do you suggest I try next? I'll be happy to try a different tack.
<b
next prev parent reply other threads:[~2006-01-10 15:59 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-06 20:26 [PATCH 0 of 3] 32-bit MMIO copy routine Bryan O'Sullivan
2006-01-06 20:26 ` [PATCH 1 of 3] Introduce __raw_memcpy_toio32 Bryan O'Sullivan
2006-01-10 9:18 ` Andrew Morton
2006-01-10 14:55 ` Roland Dreier
2006-01-10 16:07 ` Bryan O'Sullivan
2006-01-10 16:56 ` [PATCH] [RFC] Generic 32-bit MMIO copy, out of line Bryan O'Sullivan
2006-01-10 17:07 ` [PATCH 1 of 3] Introduce __raw_memcpy_toio32 Christoph Hellwig
2006-01-10 17:13 ` Bryan O'Sullivan
2006-01-10 17:49 ` Bryan O'Sullivan
2006-01-10 17:51 ` Christoph Hellwig
2006-01-10 17:55 ` Bryan O'Sullivan
2006-01-10 22:05 ` Andrew Morton
2006-01-10 22:29 ` Bryan O'Sullivan
2006-01-10 23:32 ` Andrew Morton
2006-01-11 17:20 ` Bryan O'Sullivan
2006-01-11 17:22 ` Sam Ravnborg
2006-01-11 17:30 ` Andrew Morton
2006-01-11 17:43 ` Bryan O'Sullivan
2006-01-11 18:49 ` Roland Dreier
2006-01-11 18:57 ` Bryan O'Sullivan
2006-01-11 19:01 ` Roland Dreier
2006-01-11 19:08 ` Bryan O'Sullivan
2006-01-13 15:19 ` Adrian Bunk
2006-01-10 18:02 ` Randy.Dunlap
2006-01-10 20:04 ` Sam Ravnborg
2006-01-10 15:59 ` Bryan O'Sullivan [this message]
2006-01-06 20:26 ` [PATCH 2 of 3] memcpy32 for x86_64 Bryan O'Sullivan
2006-01-06 20:26 ` [PATCH 3 of 3] Add __raw_memcpy_toio32 to each arch Bryan O'Sullivan
-- strict thread matches above, loose matches on Subject: below --
2006-01-10 19:53 [PATCH 0 of 3] 32-bit MMIO copy routines, reworked Bryan O'Sullivan
2006-01-10 19:53 ` [PATCH 1 of 3] Introduce __raw_memcpy_toio32 Bryan O'Sullivan
2006-01-11 22:39 [PATCH 0 of 3] MMIO 32-bit copy routine, the final frontier Bryan O'Sullivan
2006-01-11 22:39 ` [PATCH 1 of 3] Introduce __raw_memcpy_toio32 Bryan O'Sullivan
2006-01-11 23:43 ` Andrew Morton
[not found] <5s6p8-1O3-29@gated-at.bofh.it>
[not found] ` <5s6p8-1O3-27@gated-at.bofh.it>
[not found] ` <5tnZx-1lb-17@gated-at.bofh.it>
[not found] ` <5tt8U-xV-5@gated-at.bofh.it>
[not found] ` <5tueu-2mb-9@gated-at.bofh.it>
[not found] ` <5tvaH-3MA-55@gated-at.bofh.it>
[not found] ` <5tvX6-4MO-13@gated-at.bofh.it>
[not found] ` <5tvX6-4MO-11@gated-at.bofh.it>
[not found] ` <5tvXa-4MO-23@gated-at.bofh.it>
[not found] ` <5tzQR-2zH-11@gated-at.bofh.it>
2006-01-15 15:33 ` Bodo Eggert
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=1136908761.32183.18.camel@serpentine.pathscale.com \
--to=bos@pathscale.com \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox