From: Michael Roth <mdroth@linux.vnet.ibm.com>
To: Alexey Kardashevskiy <aik@ozlabs.ru>,
Paolo Bonzini <pbonzini@redhat.com>,
David Gibson <david@gibson.dropbear.id.au>
Cc: Alex Williamson <alex.williamson@redhat.com>,
qemu-ppc@nongnu.org, qemu-devel@nongnu.org,
Alexander Graf <agraf@suse.de>
Subject: Re: [Qemu-devel] [PATCH qemu v7 06/14] spapr_iommu: Introduce "enabled" state for TCE table
Date: Tue, 26 May 2015 09:36:44 -0500 [thread overview]
Message-ID: <20150526143644.4646.66301@loki> (raw)
In-Reply-To: <55648086.3010804@ozlabs.ru>
Quoting Alexey Kardashevskiy (2015-05-26 09:17:42)
> On 05/27/2015 12:03 AM, Paolo Bonzini wrote:
> >
> >
> > On 26/05/2015 16:00, Alexey Kardashevskiy wrote:
> >> On 05/26/2015 11:48 PM, Paolo Bonzini wrote:
> >>>
> >>>
> >>> On 26/05/2015 15:42, Alexey Kardashevskiy wrote:
> >>>>
> >>>>
> >>>> The next patch of this patchset changes:
> >>>> spapr_tce_table_do_enable()
> >>>> memory_region_init_iommu(&iommu)
> >>>> memory_region_add_subregion(&root, &iommu)
> >>>>
> >>>> spapr_tce_table_disable()
> >>>> memory_region_del_subregion(&root, &iommu)
> >>>> object_unref(&iommu)
> >>>>
> >>>> These spapr_tce_xxx are called by request from the guest. &root is a
> >>>> container and exists as long as sPAPRTCETable exists.
> >>>>
> >>>> Where do I get a leaking child property here?
> >>>
> >>> When you unref iommu and not unparent it. The next
> >>> memory_region_init_iommu creates a second child property, and the first
> >>> is gone.
> >>
> >> But when do I get this child property? In memory_region_add_subregion()?
> >> And memory_region_del_subregion() does not do the opposite thing
> >> (unparent)?
> >
> > In memory_region_init_iommu.
>
> Ah. So I need at least s/object_unref/object_unparent/ in my current code,
> right?
I've actually tried that. In that case, FlatView still holds a
reference to the region, and when RCU thread finally unrefs, it sees
that the MR no longer as an owner in the code below:
void memory_region_unref(MemoryRegion *mr)
{
Object *obj = OBJECT(mr);
if (obj && obj->parent) {
object_unref(obj->parent);
} else {
object_unref(obj);
}
g_free(ref_tag);
}
Since the region, prior to the object_unparent(), had an owner, it
gave it's ownership over to the owner (which takes a ref on it as
a child property) and unref'd itself. Now that it's been orphaned,
any attempts by RCU to call memory_region_unref() on it result in
it MR attempting to unref itself, rather than it's owner, but it's
ref is already 0: object_unparent() caused it to be finalized already,
so we actually end up triggering the same assertion as with
object_unref: g_assert(obj->ref > 0);
When we use object_unref() instead of object_unparent(), we hit that
same assertion when the owner get's finalized, since it still sees the
MR as a child and attempts to unref it again.
>
> >>> What is different between the various IOMMU regions, so that you cannot
> >>> create just one?
> >>
> >> There are two DMA windows on the same PCI bus (in hardware too), at
> >> different offset and with a different page size.
> >
> > Why do you need different regions? Why can't you have always the same
> > IOMMU regions, and either:
>
> They may change a size. These are dynamic DMA windows, guest may remove all
> and create randomly. Each region is backed by a separate TCE table with
> different page size.
>
> > 1) create/destroy an alias to that region
>
> How does this change things compared to iommus in regard to parenting?
>
>
> > 2) change the behavior of the translation function, while keeping a
> > single region?
>
> Have one sPAPRTCETable object with 0, 1 or 2 (and potentially more) actual
> TCE tables? I can do that too but I thought subregions are just natural for
> that. I even wanted to create sPAPRTCETable' dynamically but this would
> break migration (because we cannot start QEMU with an additional
> sPAPRTCETable if it exists in the source which is not always the case).
>
> Ok. I'll redo this thing again and try using less QOM objects...
>
>
> --
> Alexey
>
next prev parent reply other threads:[~2015-05-26 14:36 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-25 12:24 [Qemu-devel] [PATCH qemu v7 00/14] spapr: vfio: Enable Dynamic DMA windows (DDW) Alexey Kardashevskiy
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 01/14] spapr_pci: Finish making find_phb()/find_dev() public Alexey Kardashevskiy
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 02/14] vmstate: Define VARRAY with VMS_ALLOC Alexey Kardashevskiy
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 03/14] vfio: spapr: Move SPAPR-related code to a separate file Alexey Kardashevskiy
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 04/14] spapr_pci_vfio: Enable multiple groups per container Alexey Kardashevskiy
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 05/14] spapr_pci: Convert finish_realize() to dma_capabilities_update()+dma_init_window() Alexey Kardashevskiy
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 06/14] spapr_iommu: Introduce "enabled" state for TCE table Alexey Kardashevskiy
2015-05-05 12:28 ` David Gibson
2015-05-25 15:05 ` Alexey Kardashevskiy
2015-05-26 2:46 ` David Gibson
2015-05-26 8:58 ` Paolo Bonzini
2015-05-26 9:01 ` Alexander Graf
2015-05-26 9:16 ` Paolo Bonzini
2015-05-26 10:15 ` Alexey Kardashevskiy
2015-05-26 10:16 ` Paolo Bonzini
2015-05-26 12:33 ` Alexey Kardashevskiy
2015-05-26 12:50 ` Paolo Bonzini
2015-05-26 13:28 ` Alexey Kardashevskiy
2015-05-26 13:31 ` Paolo Bonzini
2015-05-26 13:42 ` Alexey Kardashevskiy
2015-05-26 13:48 ` Paolo Bonzini
2015-05-26 14:00 ` Alexey Kardashevskiy
2015-05-26 14:03 ` Paolo Bonzini
2015-05-26 14:17 ` Alexey Kardashevskiy
2015-05-26 14:24 ` Paolo Bonzini
2015-05-26 14:55 ` Michael Roth
2015-05-26 14:58 ` Paolo Bonzini
2015-05-26 15:49 ` Alexey Kardashevskiy
2015-05-26 15:51 ` Paolo Bonzini
2015-05-26 23:55 ` Alexey Kardashevskiy
2015-05-27 7:05 ` Paolo Bonzini
2015-07-04 1:12 ` Alexey Kardashevskiy
2015-07-06 0:52 ` Alexey Kardashevskiy
2015-07-06 11:16 ` Paolo Bonzini
2015-05-26 15:00 ` Alexey Kardashevskiy
2015-05-26 15:08 ` Paolo Bonzini
2015-05-26 15:49 ` Alexey Kardashevskiy
2015-05-26 14:36 ` Michael Roth [this message]
2015-05-27 2:54 ` David Gibson
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 07/14] spapr_iommu: Add root memory region Alexey Kardashevskiy
2015-05-05 12:31 ` David Gibson
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 08/14] spapr_pci: Do complete reset of DMA config when resetting PHB Alexey Kardashevskiy
2015-05-05 12:34 ` David Gibson
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 09/14] spapr_vfio_pci: Remove redundant spapr-pci-vfio-host-bridge Alexey Kardashevskiy
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 10/14] linux headers update for DDW on SPAPR Alexey Kardashevskiy
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 11/14] vfio: spapr: Add SPAPR IOMMU v2 support (DMA memory preregistering) Alexey Kardashevskiy
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 12/14] spapr: Add pseries-2.4 machine Alexey Kardashevskiy
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 13/14] spapr_pci/spapr_pci_vfio: Support Dynamic DMA Windows (DDW) Alexey Kardashevskiy
2015-05-05 12:49 ` David Gibson
2015-06-18 11:35 ` Alexey Kardashevskiy
2015-06-19 1:45 ` David Gibson
2015-06-19 6:49 ` Markus Armbruster
2015-06-22 2:00 ` David Gibson
2015-04-25 12:24 ` [Qemu-devel] [PATCH qemu v7 14/14] vfio: Enable DDW ioctls to VFIO IOMMU driver Alexey Kardashevskiy
2015-05-05 12:50 ` David Gibson
2015-05-05 9:30 ` [Qemu-devel] [PATCH qemu v7 00/14] spapr: vfio: Enable Dynamic DMA windows (DDW) Alexey Kardashevskiy
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=20150526143644.4646.66301@loki \
--to=mdroth@linux.vnet.ibm.com \
--cc=agraf@suse.de \
--cc=aik@ozlabs.ru \
--cc=alex.williamson@redhat.com \
--cc=david@gibson.dropbear.id.au \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@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).