From: Keir Fraser <Keir.Fraser@cl.cam.ac.uk>
To: Paul Mackerras <paulus@samba.org>
Cc: Keir Fraser <Keir.Fraser@cl.cam.ac.uk>,
Jesse Barnes <jbarnes@engr.sgi.com>,
akpm@osdl.org, linux-kernel@vger.kernel.org, riel@redhat.com,
Ian.Pratt@cl.cam.ac.uk, kurt@garloff.de,
Christian.Limpach@cl.cam.ac.uk
Subject: Re: [PATCH] Xen/i386 cleanups - AGP bus/phys cleanups
Date: Thu, 17 Mar 2005 10:56:45 +0000 [thread overview]
Message-ID: <E1DBsgI-0001Cg-00@mta1.cl.cam.ac.uk> (raw)
In-Reply-To: Your message of "Thu, 17 Mar 2005 20:34:47 +1100." <16953.20279.77584.501222@cargo.ozlabs.ibm.com>
> > So: I would very much like you to take the patches I made to generic.c
> > that replace __get_free_pages() calls with dma_alloc_coherent(). For
>
> This is also wrong - the base address of the GATT is a physical
> address not a bus address. This change will break agpgart on ppc64
> systems and I won't be able to play bzflag on my G5 any more. :)
> dma_alloc_coherent allocates iommu entries and returns a bus address,
> but the addresses coming out of the GART don't go through a further
> translation through the iommu.
Okay, thank you for clearing up my confusion over how the GART
actually works. :-) I see you are right: my current patch is indeed
bogus, sorry about that. Unfortunately this means that some other
solution needs to be found for Xen....
> > now, the patch lines that poke into the GATT I guess stay as they are.
> > We can maintain an out-of-tree patch for Xen, or perhaps if
> > virt_to_phys() is not used very much we can override its definition.
>
> It sounds like xen is trying to overload the concepts of physical and
> bus addresses to represent the mapping from "logical" addresses seen
> by the kernel to "absolute" addresses (the "real" physical
> addresses). IMHO that is a mistake and will only lead to trouble.
Well, actually it has worked well for us so far. Our model of memory
allocation amongst Xen guests is fine-grained (page granularity). The
fact a guest can get random sparse physical pages does not fit well
with Linux's expectation (even with discontig-mem builds) of at least
getting fairly large contiguous physical chunks of RAM.
For this reason, we do rather abuse the notion of 'phys'
addresses. But we get away with it because it really doesn't matter to
the VM system that these addresses bear no relation to reality. In
most cases that it does matter it is because we are programming an I/O
device, in which case we have convenient hook points (bus-address
macros and the DMA-mapping interface). Another slightly tricky one was
block-I/O buffer merging but, again, we found a fairly clean way of
hooking that in an appropriate manner.
Even generic IOMMUs we will be able to handle -- we have control of
the DMA-mapping interface in arch/xen -- so it seems to be the case
that AGPGART is the one significant spanner in the works for us,
because it is an IOMMU in the form of a generic (arch-agnostic)
driver.
So: how about the following solution. It's a bit more distasteful
than I'd like, but I see no alternative apart from us maintaining an
out-of-tree patch to be applied only when building Linux for Xen.
What we need are four hook functions to be defined and used in place
of virt_to_phys, phys_to_virt, __get_free_pages, and
free_pages. Possible names might be:
To go into asm/io.h:
virt_to_fsb, fsb_to_virt, alloc_fsb_pages, free_fsb_pages
Or, to go into asm/agp.h:
agp_virt_to_phys, agp_phys_to_virt, agp_alloc/free_pages
The former names are an attempt to make the hooks a bit more 'generic'
by defining something applicable wherever you want an address that is
usable directly on the front-side bus. The latter are a bit hackier,
but then, maybe that is appropriate. :-)
I'd be happy to cook up a patch to do this if it isn't too offensive
for anyone.
-- Keir
next prev parent reply other threads:[~2005-03-17 11:51 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-03-16 11:48 Keir Fraser
2005-03-16 14:31 ` Christoph Hellwig
2005-03-16 14:58 ` Keir Fraser
2005-03-16 15:01 ` Rik van Riel
2005-03-16 18:10 ` Christoph Hellwig
2005-03-16 18:35 ` Keir Fraser
2005-03-16 18:42 ` Jesse Barnes
2005-03-16 19:08 ` Keir Fraser
2005-03-16 19:06 ` Christoph Hellwig
2005-03-16 19:11 ` Keir Fraser
2005-03-16 17:40 ` Alan Cox
2005-03-16 17:54 ` Jesse Barnes
2005-03-16 21:24 ` Paul Mackerras
2005-03-16 22:06 ` Jesse Barnes
2005-03-16 23:55 ` Rik van Riel
2005-03-17 0:39 ` Paul Mackerras
2005-03-17 1:05 ` Tupshin Harper
2005-03-17 3:44 ` Rik van Riel
2005-03-17 4:42 ` Christoph Hellwig
2005-03-17 4:58 ` Rik van Riel
2005-03-17 9:16 ` Keir Fraser
2005-03-17 9:34 ` Paul Mackerras
2005-03-17 10:56 ` Keir Fraser [this message]
2005-03-19 10:07 ` Eric W. Biederman
2005-03-19 10:56 ` Christian Limpach
2005-03-19 13:01 ` Keir Fraser
2005-03-17 13:53 ` Alan Cox
2005-03-18 0:16 ` Paul Mackerras
2005-03-18 4:23 ` Rik van Riel
2005-03-18 9:05 ` Keir Fraser
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=E1DBsgI-0001Cg-00@mta1.cl.cam.ac.uk \
--to=keir.fraser@cl.cam.ac.uk \
--cc=Christian.Limpach@cl.cam.ac.uk \
--cc=Ian.Pratt@cl.cam.ac.uk \
--cc=akpm@osdl.org \
--cc=jbarnes@engr.sgi.com \
--cc=kurt@garloff.de \
--cc=linux-kernel@vger.kernel.org \
--cc=paulus@samba.org \
--cc=riel@redhat.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
all inboxes | Powered by JetHome®