linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: James Bottomley <James.Bottomley@suse.de>
Cc: linux-arch@vger.kernel.org, linux-parisc@vger.kernel.org,
	Christoph Hellwig <hch@lst.de>,
	Russell King <rmk@arm.linux.org.uk>,
	Paul Mundt <lethal@linux-sh.org>
Subject: Re: [PATCHv2 2/5] parisc: add mm API for DMA to vmalloc/vmap areas
Date: Mon, 04 Jan 2010 07:12:52 +1100	[thread overview]
Message-ID: <1262549572.2173.261.camel@pasglop> (raw)
In-Reply-To: <1262469190.2741.27.camel@mulgrave.site>

On Sat, 2010-01-02 at 15:53 -0600, James Bottomley wrote:
> 
> > See my other message on that subject but I believe this is a
> sub-optimal
> > semantic. I'd rather expose separately dma_vmap_sync_outbound vs.
> > dma_vma_sync_inboud_before vs. dma_vma_sync_inboud_after.
> 
> Well, this is such a micro optimisation, is it really worth it?

It's not that "micro" in the sense that flush can take significantly
longer than invalidate. Mostly a non issue except in network.... most
non cache coherent systems are low end and pretty sensitive to that sort
of stuff, especially when used as ... routers :-) But yes, it probably
doesn't matter in your current case of XFS vmap, I was mostly trying to
push toward generically exposing finer interfaces :-) And god knows
who'll use your vmap DMA APIs in the future.

> If I map exactly to architectural operations, it's flush (without
> invalidate if possible) before an outbound DMA transfer and nothing
> after.  For inbound, it's invalidate before and after (the after only
> assuming the architecture can do speculative move in), but doing a
> flush first instead of an invalidate on DMA inbound produces a correct
> result on architectures I know about.

It is correct. Just sub-optimal ;-) However it does handle another quirk
which is side effect on "edges". If all is well, the DMA buffer is
completely self contained in its own cache lines but experience shows
that isn't always the case and it might share a cache line on the edges
(typical with skb's).

This is of course utterly broken except in one case (which I -think- is
the case with skb's) where the data sharing the cache line isn't
accessed during the DMA transfer.

However, for that to work, as you can see, one needs to flush and not
invalidate the "edge" cache lines before the inbound transfer. So your
approach of flush + invalidate is "safer". But I'd still rather have the
semantic exposed at a higher level so that arch can decide what to use
and allow for the micro-optimisation...

> Your logic assumes the cache line is dirty.  If you look at the XFS
> usage, it never seems to do local modifications on a read, so the line
> should be clean.  At least on parisc, a flush of a clean cache line is
> exactly equivalent to an invalidate.  Even if there's some write into
> the read area in xfs I've missed, it's only a few extra cycles because
> the lines are mostly clean.

Right, in your case of vmap, it doesn't seem to be a big deal, but heh,
somebody is bound to use it again for something else right ? :-)

Anyways, just some thoughts I've been having about DMA APIs in general,
I don't say we must change it now, especially not the existing ones, but
for a -new- API like that I would have preferred if it exposed a richer
semantic from day 1.

Cheers,
Ben.


  reply	other threads:[~2010-01-03 20:12 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-23 21:22 [PATCHv2 0/5] fix xfs by making I/O to vmap/vmalloc areas work James Bottomley
2009-12-23 21:22 ` [PATCHv2 1/5] mm: add coherence API for DMA to vmalloc/vmap areas James Bottomley
2009-12-23 21:22   ` James Bottomley
2009-12-23 21:22   ` [PATCHv2 2/5] parisc: add mm " James Bottomley
2009-12-23 21:22     ` [PATCHv2 3/5] arm: " James Bottomley
2009-12-23 21:22       ` [PATCHv2 4/5] sh: " James Bottomley
2009-12-23 21:22         ` James Bottomley
2009-12-23 21:22         ` [PATCHv2 5/5] xfs: fix xfs to work with Virtually Indexed architectures James Bottomley
2009-12-24 11:03           ` Christoph Hellwig
2009-12-24 11:03             ` Christoph Hellwig
2009-12-27 15:32             ` James Bottomley
2010-01-02 21:33     ` [PATCHv2 2/5] parisc: add mm API for DMA to vmalloc/vmap areas Benjamin Herrenschmidt
2010-01-02 21:33       ` Benjamin Herrenschmidt
2010-01-02 21:53       ` James Bottomley
2010-01-03 20:12         ` Benjamin Herrenschmidt [this message]
2010-01-03 20:12           ` Benjamin Herrenschmidt
2009-12-24 10:08   ` [PATCHv2 1/5] mm: add coherence " Matt Fleming
2009-12-24 10:08     ` Matt Fleming
2009-12-24 12:39     ` Matthew Wilcox
2009-12-24 12:39       ` Matthew Wilcox
2009-12-24 13:06       ` Matt Fleming
2009-12-24 13:06         ` Matt Fleming
2009-12-27 15:37       ` James Bottomley
2010-01-02 21:27       ` Benjamin Herrenschmidt
2010-01-02 21:54         ` James Bottomley
2010-01-03 20:14           ` Benjamin Herrenschmidt
2010-01-03 20:14             ` Benjamin Herrenschmidt

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=1262549572.2173.261.camel@pasglop \
    --to=benh@kernel.crashing.org \
    --cc=James.Bottomley@suse.de \
    --cc=hch@lst.de \
    --cc=lethal@linux-sh.org \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-parisc@vger.kernel.org \
    --cc=rmk@arm.linux.org.uk \
    /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).