All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Cc: "qemu-devel@nongnu.org Developers" <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH 6/9] ioport: split deletion and destruction
Date: Thu, 31 Jul 2014 16:30:36 +0200	[thread overview]
Message-ID: <53DA530C.3020802@redhat.com> (raw)
In-Reply-To: <CAEgOgz4ic0vOL1foPGzoSo+u74mYKdUv-_BCyjmDX97bq9DcXA@mail.gmail.com>

Il 31/07/2014 14:34, Peter Crosthwaite ha scritto:
> So I found the original implementation made sense to me, in that _del
> is the converse of _add and _destroy _init WRT to the MR ops.
> 
> Currently
> _init = malloc array
> _add = mr_init + mr_add_subregion
> _del = mr_del_subregion + mr_destroy
> _destory = free array
> 
> This delays mr_destory to _destroy breaking the symmetry.

Note that there is a fundamental difference between init and destroy:
when you do init, the MemoryRegion should not be providing references to
the MemoryRegion's owner.  So you can do it pretty much whenever you want.

However, after del_subregion the device models can have references to
the MemoryRegion's owner (via address_space_map/unmap) and destroy has
to be delayed to a point when these references have disappeared.  This
is why I'm keen on making memory_region_destroy happen automatically at
finalize time, as I do later in this series: last year I had tried doing
it manually with instance_finalize, and it was an unreviewable mess.

With this patch, you still would need manual portio_list_destroy calls
in instance_finalize, but PortioLists are used sparingly so it's much
simpler to manage them.

This difference is why in this patch I focused only on
portio_list_del/destroy.  However, I can try and move init to
portio_list_add; then the symmetry is restored.


> With this change is is still possible to:
> 
> _init()
> _add()
> _del()
> _add()
> _del()
> _destrory()
> 
> And not leak a ref, with the reinited memory region on second add?
> 
> Then again I may be misunderstanding, as apparently neither of these
> API have any users so I'm having trouble getting a handle on intended
> usage:

Yes, that's because these patches are mostly used by ISA devices or
VGAs, and currently neither is hot-unpluggable.

Paolo

  reply	other threads:[~2014-07-31 14:30 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-30 10:27 [Qemu-devel] [PATCH for-2.2 0/9] memory: remove memory_region_destroy Paolo Bonzini
2014-07-30 10:27 ` [Qemu-devel] [PATCH 1/9] qom: object: delete properties before calling instance_finalize Paolo Bonzini
2014-07-31 11:41   ` Peter Crosthwaite
2014-07-30 10:27 ` [Qemu-devel] [PATCH 2/9] qom: object: move unparenting to the child property's release callback Paolo Bonzini
2014-07-30 10:27 ` [Qemu-devel] [PATCH 3/9] sysbus: remove unused function sysbus_del_io Paolo Bonzini
2014-07-31  4:04   ` Peter Crosthwaite
2014-07-30 10:27 ` [Qemu-devel] [PATCH 4/9] vga: do not dynamically allocate chain4_alias Paolo Bonzini
2014-07-31 12:01   ` Peter Crosthwaite
2014-07-31 12:06     ` Paolo Bonzini
2014-07-30 10:27 ` [Qemu-devel] [PATCH 5/9] nic: do not destroy memory regions in cleanup functions Paolo Bonzini
2014-07-31  9:46   ` Stefan Hajnoczi
2014-07-31 12:06     ` Peter Crosthwaite
2014-07-30 10:27 ` [Qemu-devel] [PATCH 6/9] ioport: split deletion and destruction Paolo Bonzini
2014-07-31 12:34   ` Peter Crosthwaite
2014-07-31 14:30     ` Paolo Bonzini [this message]
2014-07-30 10:27 ` [Qemu-devel] [PATCH 7/9] memory: convert memory_region_destroy to object_unparent Paolo Bonzini
2014-07-30 10:27 ` [Qemu-devel] [PATCH 8/9] memory: remove memory_region_destroy Paolo Bonzini
2014-07-31 12:52   ` Peter Crosthwaite
2014-08-15  7:23     ` Peter Crosthwaite
2014-07-30 10:27 ` [Qemu-devel] [PATCH 9/9] tpm_tis: remove instance_finalize callback Paolo Bonzini
2014-07-31 12:00   ` Peter Crosthwaite
2014-07-31 12:05     ` Paolo Bonzini
2014-07-31 13:02       ` Peter Crosthwaite

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=53DA530C.3020802@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=peter.crosthwaite@xilinx.com \
    --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.