From: Michael Roth <mdroth@linux.vnet.ibm.com>
To: Paolo Bonzini <pbonzini@redhat.com>,
Alexey Kardashevskiy <aik@ozlabs.ru>,
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:55:57 -0500 [thread overview]
Message-ID: <20150526145557.4646.3678@loki> (raw)
In-Reply-To: <55648239.7070905@redhat.com>
Quoting Paolo Bonzini (2015-05-26 09:24:57)
>
>
> On 26/05/2015 16:17, Alexey Kardashevskiy wrote:
> > 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?
>
> Yes, and then you hit the situation documented in docs/memory.txt.
>
> >> Why do you need different regions? Why can't you have always the same
> >> IOMMU regions, and either:
> >
> > They may change a size.
>
> That's not a problem, there's memory_region_set_size for that.
What on earth, I could've sworn I looked for this... yes I think that
would solve the issue here. mr_add/mr_del can handle the change in
offsets, set size can deal with the change and size, and we can then
move to using an MR allocated at IOMMU creation time.
>
> > 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.
>
> Okay.
>
> >> 1) create/destroy an alias to that region
> >
> > How does this change things compared to iommus in regard to parenting?
>
> Aliases do not have the same restriction. But this doesn't help your
> case if you have separate TCE tables etc.
>
> >> 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.
>
> They may be. You may need more than one though.
>
> What guest actions trigger the change? Is it a hypercall? If so, what
> hypercall is it so I can look at the documentation?
>
> > 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).
>
> Creating sPAPRTCETables dynamically would be a fix as well. You _can_
> unparent the sPAPRTCETable whenever you want. But it's not necessarily
> the right solution.
Yah, I think this would work too, simply resizing the IOMMU MR seems
more straightforward in our case though.
>
> Why does it break migration? There is only one migration handler for
> all htabs, I think. Or is this a different thing than the htabs?
I think the issue was that migration expects all objects in destination
to be instantiated prior to the start of migration, so any scheme where
the IOMMU objects are creating/destroyed at essentially random times
causes problems in terms of figuring out where to load in the migrated
TCE tables.
>
> The sPAPRTCETable would be created in its parent device's post_load handler.
>
> > Ok. I'll redo this thing again and try using less QOM objects...
>
> Wait, I haven't understood the problem yet.
AFAIK you've given us an ideal solution using memory_region_set_size()
so we can avoid the dynamic MR creation during reset. Not sure if
there's anything else that's missing.
>
> Paolo
>
next prev parent reply other threads:[~2015-05-26 14:56 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 [this message]
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
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=20150526145557.4646.3678@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 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.