qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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
> 

  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 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).