From: Russell King <rmk@arm.linux.org.uk>
To: James Bottomley <James.Bottomley@steeleye.com>
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: Mon, 22 Mar 2004 15:15:33 +0000 [thread overview]
Message-ID: <20040322151533.C11212@flint.arm.linux.org.uk> (raw)
In-Reply-To: <1079967870.1759.12.camel@mulgrave>; from James.Bottomley@steeleye.com on Mon, Mar 22, 2004 at 10:04:23AM -0500
On Mon, Mar 22, 2004 at 10:04:23AM -0500, James Bottomley wrote:
> On Mon, 2004-03-22 at 04:30, Russell King wrote:
> > On Sun, Mar 21, 2004 at 11:41:35PM -0500, James Bottomley wrote:
> > > Let me illustrate what would go wrong on parisc: we have a VIPT cache
> > > and the concept of an address space.
> >
> > Is it not the case that VIPT caches are coloured, and mapping a page
> > into the appropriate place results in the same virtual index for both?
>
> Not coloured exactly since the caches are associative, but we have a
> congruence modulus. As long as two virtual addresses are equal modulo
> this, the cache will detect and unify virtual aliasing (basically it
> assigns the addresses the same coherence index). So, as long as the
> proposed API gives the arch control over where in the user vm the
> mapping goes, we would be able to accommodate it.
>
> However, my understanding of the API was that you *already* had a vm
> range and were trying to place a coherently mapped page into it.
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.
For example, if we had:
int dma_coherent_mmap(vma, cpuaddr, dmaaddr, size)
then the architecture could do whatever it needed to mmap that address
space. It could:
(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).
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.
--
Russell King
Linux kernel 2.6 ARM Linux - http://www.arm.linux.org.uk/
maintainer of: 2.6 PCMCIA - http://pcmcia.arm.linux.org.uk/
2.6 Serial core
next prev parent reply other threads:[~2004-03-22 15:15 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 [this message]
2004-03-22 15:27 ` James Bottomley
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=20040322151533.C11212@flint.arm.linux.org.uk \
--to=rmk@arm.linux.org.uk \
--cc=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=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