From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Igor Mammedov <imammedo@redhat.com>
Cc: qemu-devel@nongnu.org, maxime.coquelin@redhat.com, mst@redhat.com
Subject: Re: [Qemu-devel] [RFC 3/7] vhost: New memory update functions
Date: Tue, 5 Dec 2017 18:25:00 +0000 [thread overview]
Message-ID: <20171205182459.GE2405@work-vm> (raw)
In-Reply-To: <20171130164853.2ed19634@redhat.com>
* Igor Mammedov (imammedo@redhat.com) wrote:
> On Wed, 29 Nov 2017 18:50:22 +0000
> "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com> wrote:
>
> > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> >
> > vhost_update_mem will replace the existing update mechanism.
> > They make use of the Flatview we have now to make the update simpler.
> > This commit just adds the basic structure.
> see below suggestion on dropping vhost_region_add/vhost_region_del
>
> > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > ---
> > hw/virtio/vhost.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 44 insertions(+)
> >
> > diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> > index 938253d1e8..c959a59fb3 100644
> > --- a/hw/virtio/vhost.c
> > +++ b/hw/virtio/vhost.c
> > @@ -629,6 +629,43 @@ static void vhost_begin(MemoryListener *listener)
> > dev->mem_changed_start_addr = -1;
> > }
> >
> > +struct vhost_update_mem_tmp {
> > + struct vhost_dev *dev;
> > + uint32_t nregions;
> > + struct vhost_memory_region *regions;
> > +};
> > +
> > +/* Called for each MRS from vhost_update_mem */
> > +static int vhost_update_mem_cb(MemoryRegionSection *mrs, void *opaque)
> > +{
> > + if (!vhost_section(mrs)) {
> > + return 0;
> > + }
> > +
> it's possible to move section tracking from vhost_region_add() to here
>
> ++dev->n_mem_sections;
> dev->mem_sections = g_renew(MemoryRegionSection, dev->mem_sections,
> dev->n_mem_sections);
> ;[dev->n_mem_sections - 1] = *section;
> memory_region_ref(section->mr);
> ...
>
> > +static int vhost_update_mem(struct vhost_dev *dev)
> > +{
> > + int res;
> > + struct vhost_update_mem_tmp vtmp;
> > + vtmp.regions = 0;
> > + vtmp.nregions = 0;
> > + vtmp.dev = dev;
>
> iterate over dev->mem_sections
> memory_region_unref(section->mr);
> g_free(dev->mem_sections)
> dev->mem_sections = NULL;
>
> with this you won't need vhost_region_add/del callbacks anymore
Yes, with the addition of a:
dev->n_mem_sections = 0;
in the deletion bit, that seems to work nicely. Added.
Thanks,
Dave
>
> > +
> > + res = address_space_iterate(&address_space_memory,
> > + vhost_update_mem_cb, &vtmp);
> > + if (res) {
> > + goto out;
> > + }
> > +
> > + /* TODO */
> > +out:
> > + g_free(vtmp.regions);
> > + return res;
> > +}
> > +
> > static void vhost_commit(MemoryListener *listener)
> > {
> > struct vhost_dev *dev = container_of(listener, struct vhost_dev,
> > @@ -648,6 +685,10 @@ static void vhost_commit(MemoryListener *listener)
> > return;
> > }
> >
> > + if (vhost_update_mem(dev)) {
> > + return;
> > + }
> > +
> > if (dev->started) {
> > start_addr = dev->mem_changed_start_addr;
> > size = dev->mem_changed_end_addr - dev->mem_changed_start_addr + 1;
> > @@ -1523,6 +1564,9 @@ int vhost_dev_start(struct vhost_dev *hdev, VirtIODevice *vdev)
> > goto fail_features;
> > }
> >
> > + if (vhost_update_mem(hdev)) {
> > + goto fail_mem;
> > + }
> > if (vhost_dev_has_iommu(hdev)) {
> > memory_listener_register(&hdev->iommu_listener, vdev->dma_as);
> > }
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2017-12-05 18:25 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-29 18:50 [Qemu-devel] [RFC 0/7] Rework vhost memory region updates Dr. David Alan Gilbert (git)
2017-11-29 18:50 ` [Qemu-devel] [RFC 1/7] memory: address_space_iterate Dr. David Alan Gilbert (git)
2017-11-29 18:50 ` [Qemu-devel] [RFC 2/7] vhost: Move log_dirty check Dr. David Alan Gilbert (git)
2017-11-29 18:50 ` [Qemu-devel] [RFC 3/7] vhost: New memory update functions Dr. David Alan Gilbert (git)
2017-11-30 15:48 ` Igor Mammedov
2017-12-05 18:25 ` Dr. David Alan Gilbert [this message]
2017-11-29 18:50 ` [Qemu-devel] [RFC 4/7] vhost: update_mem_cb implementation Dr. David Alan Gilbert (git)
2017-11-30 11:27 ` Igor Mammedov
2017-12-06 20:09 ` Dr. David Alan Gilbert
2017-11-29 18:50 ` [Qemu-devel] [RFC 5/7] vhost: Compare new and old memory lists Dr. David Alan Gilbert (git)
2017-11-29 18:50 ` [Qemu-devel] [RFC 6/7] vhost: Copy updated region data into device state Dr. David Alan Gilbert (git)
2017-11-29 18:50 ` [Qemu-devel] [RFC 7/7] vhost: Remove vhost_set_memory and children Dr. David Alan Gilbert (git)
2017-11-30 11:22 ` [Qemu-devel] [RFC 0/7] Rework vhost memory region updates Igor Mammedov
2017-11-30 12:08 ` Dr. David Alan Gilbert
2017-11-30 12:40 ` Igor Mammedov
2017-11-30 12:47 ` Dr. David Alan Gilbert
2017-11-30 12:58 ` Igor Mammedov
2017-11-30 13:06 ` Dr. David Alan Gilbert
2017-11-30 15:08 ` Igor Mammedov
2017-11-30 15:18 ` Dr. David Alan Gilbert
2017-11-30 15:32 ` Igor Mammedov
2017-11-30 15:41 ` Dr. David Alan Gilbert
2017-11-30 16:51 ` Greg Kurz
2017-12-01 10:02 ` Stefan Hajnoczi
2017-12-01 10:19 ` Dr. David Alan Gilbert
2017-12-01 14:22 ` [Qemu-devel] [RFC] vhost: check if ring mapping is still valid when building memmap Igor Mammedov
2017-12-07 18:17 ` Dr. David Alan Gilbert
2017-12-08 14:42 ` Igor Mammedov
2017-12-08 17:51 ` Dr. David Alan Gilbert
2017-12-11 9:37 ` Igor Mammedov
2017-12-11 11:03 ` Dr. David Alan Gilbert
2017-12-11 13:45 ` Igor Mammedov
2017-12-11 15:43 ` Dr. David Alan Gilbert
2017-12-08 20:45 ` Dr. David Alan Gilbert
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=20171205182459.GE2405@work-vm \
--to=dgilbert@redhat.com \
--cc=imammedo@redhat.com \
--cc=maxime.coquelin@redhat.com \
--cc=mst@redhat.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.