From: "Michael S. Tsirkin" <mst@redhat.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
Anthony Liguori <aliguori@us.ibm.com>,
Jan Kiszka <jan.kiszka@siemens.com>,
QEMU Developers <qemu-devel@nongnu.org>,
Marcel Apfelbaum <marcel.a@redhat.com>
Subject: Re: [Qemu-devel] [PATCH RFC v2 2/2] hw/pci: handle unassigned pci addresses
Date: Sun, 15 Sep 2013 14:05:52 +0300 [thread overview]
Message-ID: <20130915110552.GA4600@redhat.com> (raw)
In-Reply-To: <CAFEAcA9rOn31dBL3gMf9dKKrWCJJE2UmLTiNtjd6cT1=mTK8oA@mail.gmail.com>
On Sun, Sep 15, 2013 at 11:56:40AM +0100, Peter Maydell wrote:
> On 15 September 2013 08:14, Michael S. Tsirkin <mst@redhat.com> wrote:
> > On Tue, Sep 10, 2013 at 02:12:56PM +0100, Peter Maydell wrote:
> >> On 10 September 2013 14:02, Michael S. Tsirkin <mst@redhat.com> wrote:
> >> > On Tue, Sep 10, 2013 at 01:50:47PM +0100, Peter Maydell wrote:
> >> >> On 10 September 2013 13:39, Michael S. Tsirkin <mst@redhat.com> wrote:
> >> >> > On Mon, Sep 09, 2013 at 02:16:41PM +0100, Peter Maydell wrote:
> >> >> >> memory_region_init_alias(&pci_dev->bus_master_enable_region,
> >> >> >> OBJECT(pci_dev), "bus master",
> >> >> >> dma_as->root, 0,
> >> >> >> memory_region_size(dma_as->root));
> >> >> >>
> >> >> >> If instead of using this alias directly as the
> >> >> >> bus_master_enable region you instead:
> >> >> >> * create a container region
> >> >> >> * create a 'background' region at negative priority
> >> >> >> (ie one per device, and you can make the 'opaque' pointer
> >> >> >> point to the device, not the bus)
> >> >> >> * put the alias and the background region into the container
> >> >> >> * use the container as the bus_master_enable region
> >> >> >
> >> >> > Interesting. There's one thing I don't understand here:
> >> >> > as far as I can see bus_master_enable_region covers the
> >> >> > whole 64 bit memory address space.
> >> >> >
> >> >> > It looks like it will always override the background
> >> >> > region in the same container. What did I miss?
> >> >>
> >> >> That should be itself a container,
> >> >> so assuming it doesn't
> >> >> itself have any kind of background region the "holes"
> >> >> inside it will still be present when we put it in
> >> >> our new container. (Basically putting a container,
> >> >> or an alias to one, inside a region is just saying
> >> >> "put everything in that container inside this region
> >> >> at the appropriate place").
> >> >
> >> > Confused. "That" and "it" here refers to what exactly?
> >>
> >> Well, I was a bit confused by your talking about
> >> the properties of "bus_master_enable_region" when my
> >> suggestion is effectively that we change what that is.
> >> So let's start again:
> >> * create a container region
> >> This is 64 bits wide, but totally empty
> >> * create a 'background' region at negative priority
> >> 64 bits wide
> >> * put the alias and the background region into the container
> >> The alias is 64 bits wide too, but it is an alias of
> >> dma_as->root, which is a container with no background
> >> region.
> >> * use the container as the bus_master_enable region
> >> -- all you see in this container is the background region
> >> and anyhing that was in dma_as->root.
> >
> > This confused me even more.
> > dma root covers whole 64 bit doesn't it?
>
> It has a size of 64 bits but it doesn't necessarily have
> actual memory subregions with I/O operations covering the
> whole contiguous range from 0 to 2^64-1
> (that would only
> happen if the things responding to DMA cover the whole
> 64 bit address, which corresponds to the situation in hardware
> where something will respond to the bus master transaction
> for any address. The hardware still has the "if nothing
> responds do this" capability, it just never gets used.)
>
> The case where the DMA root is an IOMMU could be
> a problem though, because address_space_translate()
> hardcodes io_mem_unassigned as the fallback if the
> IOMMU says "no, can't write here".
>
> > The doc says:
> > "This is done with memory_region_add_subregion_overlap(), which
> > allows the region to overlap any other region in the same container, and
> > specifies a priority that allows the core to decide which of two regions
> > at
> > the same address are visible (highest wins)."
> >
> > So if I create an alias that also covers whole 64 bit
> > and background in the same
> > container, background with a negative priority,
> > won't alias always win?
>
> The alias will win for the addresses it handles. But if
> the alias is a container with "holes" then it doesn't handle
> the "holes" and the lower priority background region will
> get them.
>
> -- PMM
Confused. How can there be a container with holes?
I thought the only way to create non-contigious
configurations is by creating multiple aliases?
Imagine this configuration:
region B - subregion of A, from 0x1000 to 0x3000
region C - subregion of A, from 0x2000 to 0x4000
region D - subregion of B from offset 0 to 0x1000
If B has higher priority that C, then part of C
from 0x2000 to 0x3000 is hidden, even though B
is a container and there's no subregion of B covering
that address range.
Right?
next prev parent reply other threads:[~2013-09-15 11:03 UTC|newest]
Thread overview: 71+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-09-09 11:11 [Qemu-devel] [PATCH RFC v2 0/3] pci: complete master abort protocol Marcel Apfelbaum
2013-09-09 11:11 ` [Qemu-devel] [PATCH RFC v2 1/2] memory: allow MemoryRegion's priority field to accept negative values Marcel Apfelbaum
2013-09-09 11:28 ` Peter Maydell
2013-09-09 12:03 ` Marcel Apfelbaum
2013-09-09 11:11 ` [Qemu-devel] [PATCH RFC v2 2/2] hw/pci: handle unassigned pci addresses Marcel Apfelbaum
2013-09-09 11:40 ` Michael S. Tsirkin
2013-09-09 12:11 ` Marcel Apfelbaum
2013-09-09 12:23 ` Michael S. Tsirkin
2013-09-09 12:43 ` Marcel Apfelbaum
2013-09-09 12:52 ` Peter Maydell
2013-09-09 12:59 ` Michael S. Tsirkin
2013-09-09 13:02 ` Peter Maydell
2013-09-09 13:15 ` Marcel Apfelbaum
2013-09-09 13:19 ` Peter Maydell
2013-09-09 13:29 ` Marcel Apfelbaum
2013-09-09 13:39 ` Peter Maydell
2013-09-09 14:04 ` Marcel Apfelbaum
2013-09-09 14:21 ` Peter Maydell
2013-09-09 14:51 ` Marcel Apfelbaum
2013-09-09 14:58 ` Peter Maydell
2013-09-09 16:00 ` Michael S. Tsirkin
2013-09-09 16:02 ` Peter Maydell
2013-09-09 16:34 ` Michael S. Tsirkin
2013-09-09 16:54 ` Jan Kiszka
2013-09-09 16:58 ` Peter Maydell
2013-09-09 17:09 ` Jan Kiszka
2013-09-09 17:14 ` Peter Maydell
2013-09-09 17:27 ` Jan Kiszka
2013-09-09 17:37 ` Michael S. Tsirkin
2013-09-09 17:41 ` Peter Maydell
2013-09-09 18:06 ` Jan Kiszka
2013-09-09 18:11 ` Paolo Bonzini
2013-09-09 19:35 ` Michael S. Tsirkin
2013-09-09 18:03 ` Paolo Bonzini
2013-09-09 18:49 ` Jan Kiszka
2013-09-09 18:59 ` Peter Maydell
2013-09-09 19:04 ` Jan Kiszka
2013-09-09 19:27 ` Michael S. Tsirkin
2013-09-09 19:31 ` Michael S. Tsirkin
2013-09-09 15:54 ` Michael S. Tsirkin
2013-09-09 14:04 ` Michael S. Tsirkin
2013-09-09 14:16 ` Marcel Apfelbaum
2013-09-09 13:59 ` Michael S. Tsirkin
2013-09-09 13:07 ` Marcel Apfelbaum
2013-09-09 13:16 ` Peter Maydell
2013-09-09 13:44 ` Marcel Apfelbaum
2013-09-10 12:39 ` Michael S. Tsirkin
2013-09-10 12:50 ` Peter Maydell
2013-09-10 13:02 ` Michael S. Tsirkin
2013-09-10 13:12 ` Peter Maydell
2013-09-10 14:11 ` Michael S. Tsirkin
2013-09-15 7:14 ` Michael S. Tsirkin
2013-09-15 10:56 ` Peter Maydell
2013-09-15 11:05 ` Michael S. Tsirkin [this message]
2013-09-15 11:23 ` Peter Maydell
2013-09-15 12:17 ` Michael S. Tsirkin
2013-09-15 13:24 ` Peter Maydell
2013-09-15 13:39 ` Michael S. Tsirkin
2013-09-15 13:49 ` Peter Maydell
2013-09-15 14:08 ` Michael S. Tsirkin
2013-09-15 14:08 ` Peter Maydell
2013-09-15 14:20 ` Michael S. Tsirkin
2013-09-15 14:49 ` Peter Maydell
2013-09-15 15:05 ` Michael S. Tsirkin
2013-09-15 15:08 ` Peter Maydell
2013-09-15 15:31 ` Michael S. Tsirkin
2013-09-15 17:12 ` Peter Maydell
2013-09-15 9:29 ` Marcel Apfelbaum
2013-09-09 14:01 ` Michael S. Tsirkin
2013-09-09 13:58 ` Michael S. Tsirkin
2013-09-09 14:10 ` Marcel Apfelbaum
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=20130915110552.GA4600@redhat.com \
--to=mst@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=jan.kiszka@siemens.com \
--cc=marcel.a@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.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 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).