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 16:39:44 +0300 [thread overview]
Message-ID: <20130915133944.GA5219@redhat.com> (raw)
In-Reply-To: <CAFEAcA_e6H5NySN1azOx8RZs08biefPcRxoOHov+gFdgkAD9iQ@mail.gmail.com>
On Sun, Sep 15, 2013 at 02:24:07PM +0100, Peter Maydell wrote:
> On 15 September 2013 13:17, Michael S. Tsirkin <mst@redhat.com> wrote:
> > On Sun, Sep 15, 2013 at 12:23:41PM +0100, Peter Maydell wrote:
> >>. If it's a "pure container" then it
> >> doesn't respond for areas that none of its subregions
> >> cover (it can't, it has no idea what it should do).
> >
> > Interesting. This really is completely undocumented
> > though.
> >
> > documentation merely says:
> > specifies a priority that allows the core to decide which of two regions at
> > the same address are visible (highest wins)
> >
> > which makes one think the only thing affecting
> > visibility is the priority.
>
> Yes, we could definitely stand to improve the documentation.
>
> > I wonder whether there's a way to describe this
> > in terms that dont expose the implementation of
> > render_memory_region, somehow.
> >
> > Maybe like follows:
> > when multiple regions cover the same address only one region is going to
> > "win" and get invoked for an access.
> > The winner can be determined as follows:
> > - "pure container" regions created with memory_region_init(..)
> > are ignored
> > - if multiple non-container regions cover an address, the winner is
> > determined using a priority vector, built of priority field values
> > from address space down to our region (i.e. region priority, followed by
> > a subregion priority, followed by a sub subregion priority etc).
> >
> > These priority vectors are compared as follows:
> >
> > - if vectors are identical, which wins is undefined
> > - otherwise if one vector is a sub-vector of another,
> > which wins is undefined
> > - otherwise the first vector in the lexicographical
> > order wins
>
> This just seems to me to be documenting a theoretical
> implementation. If we're lucky it has the same semantics
> as what we actually do; if we're unlucky it doesn't in
> some corner case and is just confusing. And it would
> certainly be confusing if you look at the code and it does
> absolutely nothing like the documentation's algorithm.
>
> I think we could simply add an extra bullet point in the
> 'Visibility' section of docs/memory.txt saying:
> - if a search within a container or alias subregion does not find
> a match, we continue with the next subregion in priority order.
>
> plus a note at the bottom saying:
> "Notice that these rules mean that if a container subregion
> does not handle an address in its range (ie it has "holes"
> where it has not mapped its own subregions) then lower
> priority siblings of the container will be checked to see if they
> should be used for accesses within those "holes".
>
> We could also do with explicitly mentioning in the section
> about priority that priority is container local, since this seems
> to be the number one confusion among people looking at
> memory region priority.
>
> >> Mostly this doesn't come up because you don't need
> >> to play games with overlapping memory regions and
> >> containers very often: the common case is "nothing
> >> overlaps at all". But the facilities are there if you need
> >> them.
>
> > Dynamic regions like PI BARs are actually very common,
> > IMO this means overlapping case is actually very common.
>
> Yes, that's true, but even then it's usually just "overlaps
> of subregions within a single container" and there isn't
> a need to worry about within-container versus outside-container
> interactions.
>
> -- PMM
Well actually if you look at the 'subregion collisions'
mail that I sent, must of the collisions are exactly
of this sort.
For example, mcfg in q35 overlaps the pci hole, so
any pci bar can be made to overlap it.
I guess documentation should just explain what
happens when regions overlap and not try to
say whether this case is common, or not.
--
MST
next prev parent reply other threads:[~2013-09-15 13:37 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
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 [this message]
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=20130915133944.GA5219@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 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.