All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: Arnd Bergmann <arnd@arndb.de>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>,
	linaro-mm-sig@lists.linaro.org,
	LKML <linux-kernel@vger.kernel.org>,
	DRI Development <dri-devel@lists.freedesktop.org>,
	linux-media@vger.kernel.org, Rob Clark <rob.clark@linaro.org>,
	Rebecca Schultz Zavin <rebecca@android.com>
Subject: Re: [PATCH] dma-buf: mmap support
Date: Wed, 18 Apr 2012 16:24:38 +0200	[thread overview]
Message-ID: <20120418142438.GA20469@phenom.ffwll.local> (raw)
In-Reply-To: <201204181406.14159.arnd@arndb.de>

On Wed, Apr 18, 2012 at 02:06:13PM +0000, Arnd Bergmann wrote:
> On Wednesday 18 April 2012, Daniel Vetter wrote:
> > +   Because existing importing subsystems might presume coherent mappings for
> > +   userspace, the exporter needs to set up a coherent mapping. If that's not
> > +   possible, it needs to fake coherency by manually shooting down ptes when
> > +   leaving the cpu domain and flushing caches at fault time. Note that all the
> > +   dma_buf files share the same anon inode, hence the exporter needs to replace
> > +   the dma_buf file stored in vma->vm_file with it's own if pte shootdown is
> > +   requred. This is because the kernel uses the underlying inode's address_space
> > +   for vma tracking (and hence pte tracking at shootdown time with
> > +   unmap_mapping_range).
> > +
> > +   If the above shootdown dance turns out to be too expensive in certain
> > +   scenarios, we can extend dma-buf with a more explicit cache tracking scheme
> > +   for userspace mappings. But the current assumption is that using mmap is
> > +   always a slower path, so some inefficiencies should be acceptable.
> > +
> > +   Exporters that shoot down mappings (for any reasons) shall not do any
> > +   synchronization at fault time with outstanding device operations.
> > +   Synchronization is an orthogonal issue to sharing the backing storage of a
> > +   buffer and hence should not be handled by dma-buf itself. This is explictly
> > +   mentioned here because many people seem to want something like this, but if
> > +   different exporters handle this differently, buffer sharing can fail in
> > +   interesting ways depending upong the exporter (if userspace starts depending
> > +   upon this implicit synchronization).
> 
> How do you ensure that no device can do DMA on the buffer while it's mapped
> into user space in a noncoherent manner?

We don't. Letting userspace shoot into it's foot is part of the interface.
drm drivers and afaik also v4l has some explicit interfaces where
userspace and the kernel can communicate who is allowed to stomp on a
buffer (and sync up access with various degrees of sophistication).
Userspace still needs to use this interfaces to ensure that any dma
activity it wants to have completed is completed.

To ensure coherency for userspace that does not try to get unnecessary
holes in its feet, the exporter needs to zap all ptes pointing to a dma
buf object and flush relevant parts of the cpu cache before device dma
starts (signalled with dma_buf_map_sg from the importer atm, but we'll
eventually grow streaming support I guess). On page fault time it has then
to invalidate any cpu caches, so that userspace does not read stale data.

Like I've said in the above blurb in the documentation, I think
synchronization is an orthogonal issue to sharing memory.
-Daniel
-- 
Daniel Vetter
Mail: daniel@ffwll.ch
Mobile: +41 (0)79 365 57 48

  parent reply	other threads:[~2012-04-18 14:24 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-18 13:52 [PATCH] dma-buf: mmap support Daniel Vetter
2012-04-18 14:06 ` Arnd Bergmann
2012-04-18 14:20   ` Rob Clark
2012-04-18 14:24   ` Daniel Vetter [this message]
2012-04-18 19:10   ` Alan Cox
2012-04-23 23:00 ` Rebecca Schultz Zavin
2012-04-24  9:08 Daniel Vetter
2012-04-24 16:37 ` InKi Dae
2012-04-24 17:02   ` Daniel Vetter
2012-04-25  2:31     ` InKi Dae
2012-05-11 15:30 ` Rob Clark
2012-05-11 15:30   ` Rob Clark
2012-05-18  4:12   ` Sumit Semwal

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=20120418142438.GA20469@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=arnd@arndb.de \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=linaro-mm-sig@lists.linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=rebecca@android.com \
    --cc=rob.clark@linaro.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.