public inbox for linux-arch@vger.kernel.org
 help / color / mirror / Atom feed
From: James Bottomley <James.Bottomley@SteelEye.com>
To: Russell King <rmk@arm.linux.org.uk>
Cc: William Lee Irwin III <wli@holomorphy.com>,
	linux-arch@vger.kernel.org, Jeff Garzik <jgarzik@pobox.com>,
	Linus Torvalds <torvalds@osdl.org>,
	David Woodhouse <dwmw2@infradead.org>,
	Christoph Hellwig <hch@infradead.org>,
	Andrew Morton <akpm@osdl.org>, Andrea Arcangeli <andrea@suse.de>
Subject: Re: can device drivers return non-ram via vm_ops->nopage?
Date: 22 Mar 2004 10:27:00 -0500	[thread overview]
Message-ID: <1079969221.1759.25.camel@mulgrave> (raw)
In-Reply-To: <20040322151533.C11212@flint.arm.linux.org.uk>

On Mon, 2004-03-22 at 10:15, Russell King wrote:
> Correct.  However, note that the kernels view of the DMA mapping would
> not be accessed in this instance.  I guess this still causes you some
> problems, though I suspect that given an adequate API, you could
> tweak your iommu appropriately.

Ah, well now we're getting into one of the problems with the kernel's
API.  Currently we have a two stage approach: the DMA API makes the
kernel space coherent, and then vm APIs make the user spaces coherent.

We could do this exactly as you propose: make the mapping directly
coherent with the user address space and never visible to the kernel and
everything would work correctly.  We could do this simply by loading the
user coherency index into the IOMMU ptes on the mapping.

I've already begun thinking that we may want to shift the API to this
model (i.e. have a preferred address space to do DMA operations to). 
Even in most filesystem streaming mappings, only one address space
ususally wants to see the data (sharing is the rarity rather than the
rule).

> (a) call remap_page_range() with appropriate pgprot
> (b) use a vm_operations_struct interally to fault the pages in,
>     again using the appropraite pgprot.
> (c) disallow the mmap if it is within the architectures rules
>     (eg, all mmapings are of the same cache colour/congruence
>     modulus)
> (d) adjust whatever hardware for device DMA such that the mapping
>     is coherent and then do (a) or (b) and/or (c).
> (e) disallow the mmap entirely.
> 
> I suspect x86, ARM and similar could be either (a) or (b).  PA RISC would
> be (c) and (d).

Yes, we could probably do (c).  Like I said, (d) is a bit of a paradigm
shift for the API, but it's also doable.

> Note: I don't see the need for dma_coherent_munmap() - the mappings are
> destroyed on process exit, and we should not be freeing the coherent
> mapping until the mmap of it has gone - and you get to know this via
> the ->release method.  However, with (b) an architecture can positively
> check that this rule is followed via suitable refcounting and checking
> in dma_free_coherent.

I could see a point: since we can only keep one address space coherent,
we cannot allow multiple mmappings of the same region.  Thus, processes
would be able to hand off the coherent mmap, but wouldn't be allowed
simultaneously to map.  the unmap API would be telling the arch that the
mapping was free to be remapped.

James

  reply	other threads:[~2004-03-22 15:27 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20040321204931.A11519@infradead.org>
     [not found] ` <1079902670.17681.324.camel@imladris.demon.co.uk>
     [not found]   ` <Pine.LNX.4.58.0403211349340.1106@ppc970.osdl.org>
     [not found]     ` <20040321222327.D26708@flint.arm.linux.org.uk>
     [not found]       ` <405E1859.5030906@pobox.com>
     [not found]         ` <20040321225117.F26708@flint.arm.linux.org.uk>
     [not found]           ` <Pine.LNX.4.58.0403211504550.1106@ppc970.osdl.org>
     [not found]             ` <20040321234515.G26708@flint.arm.linux.org.uk>
     [not found]               ` <20040322002349.GZ2045@holomorphy.com>
     [not found]                 ` <405E3387.1050505@pobox.com>
2004-03-22  3:45                   ` can device drivers return non-ram via vm_ops->nopage? William Lee Irwin III
2004-03-22  4:41                     ` James Bottomley
2004-03-22  4:46                       ` William Lee Irwin III
2004-03-22  4:56                         ` James Bottomley
2004-03-22  5:26                           ` Benjamin Herrenschmidt
2004-03-22 11:58                             ` Andrea Arcangeli
2004-03-22 12:05                               ` Russell King
2004-03-22 12:34                                 ` Andrea Arcangeli
2004-03-22  9:30                       ` Russell King
2004-03-22 15:04                         ` James Bottomley
2004-03-22 15:15                           ` Russell King
2004-03-22 15:27                             ` James Bottomley [this message]
2004-03-22 21:50                               ` Benjamin Herrenschmidt
2004-03-22 22:18                                 ` Jeff Garzik
2004-03-22 22:35                                   ` William Lee Irwin III
2004-03-22 23:57                                     ` Benjamin Herrenschmidt
2004-03-23  0:22                                       ` David Woodhouse
2004-03-23  2:07                                       ` William Lee Irwin III
2004-03-23  9:28                                         ` Russell King
2004-03-23  9:34                                           ` David Woodhouse
2004-03-23 10:04                                             ` Russell King
2004-03-23 10:05                                               ` William Lee Irwin III
2004-03-23 11:29                                               ` Benjamin Herrenschmidt
2004-03-23 11:35                                         ` Andrea Arcangeli
2004-03-23 11:44                                           ` William Lee Irwin III
2004-03-23 12:34                                             ` Andrea Arcangeli
2004-03-23 12:40                                               ` Russell King
2004-03-23 15:25                                                 ` Linus Torvalds
2004-03-23 15:36                                                   ` Andrea Arcangeli
2004-03-23 15:46                                                     ` Linus Torvalds
2004-03-23 15:50                                                     ` Russell King
2004-03-23 22:10                                                     ` Benjamin Herrenschmidt
2004-03-25 20:25                                                 ` Russell King
2004-03-28 10:17                                                   ` Russell King
2004-03-23 12:49                                               ` William Lee Irwin III
2004-03-22 23:19                                   ` Russell King
2004-03-22 23:35                                     ` Jeff Garzik
2004-03-23  2:26                                       ` James Bottomley

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=1079969221.1759.25.camel@mulgrave \
    --to=james.bottomley@steeleye.com \
    --cc=akpm@osdl.org \
    --cc=andrea@suse.de \
    --cc=dwmw2@infradead.org \
    --cc=hch@infradead.org \
    --cc=jgarzik@pobox.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=rmk@arm.linux.org.uk \
    --cc=torvalds@osdl.org \
    --cc=wli@holomorphy.com \
    /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