From: Igor Mammedov <imammedo@redhat.com>
To: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: qemu-devel@nongnu.org, pbonzini@redhat.com,
maxime.coquelin@redhat.com, mst@redhat.com, groug@kaod.org
Subject: Re: [Qemu-devel] [PATCH v4 1/6] vhost: Move log_dirty check
Date: Wed, 27 Dec 2017 13:10:54 +0100 [thread overview]
Message-ID: <20171227131054.7601e26f@igors-macbook-pro.local> (raw)
In-Reply-To: <20171214152010.GA4380@work-vm>
On Thu, 14 Dec 2017 15:20:10 +0000
"Dr. David Alan Gilbert" <dgilbert@redhat.com> wrote:
> * Igor Mammedov (imammedo@redhat.com) wrote:
> > On Wed, 13 Dec 2017 18:08:02 +0000
> > "Dr. David Alan Gilbert (git)" <dgilbert@redhat.com> wrote:
> >
> > > From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
> > >
> > > Move the log_dirty check into vhost_section.
> > >
> > > Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> > > ---
> > > hw/virtio/trace-events | 3 +++
> > > hw/virtio/vhost.c | 20 +++++++++++++-------
> > > 2 files changed, 16 insertions(+), 7 deletions(-)
> > >
> > > diff --git a/hw/virtio/trace-events b/hw/virtio/trace-events
> > > index 775461ae98..4a493bcd46 100644
> > > --- a/hw/virtio/trace-events
> > > +++ b/hw/virtio/trace-events
> > > @@ -1,5 +1,8 @@
> > > # See docs/devel/tracing.txt for syntax documentation.
> > >
> > > +# hw/virtio/vhost.c
> > > +vhost_section(const char *name, int r) "%s:%d"
> > > +
> > > # hw/virtio/virtio.c
> > > virtqueue_alloc_element(void *elem, size_t sz, unsigned in_num, unsigned out_num) "elem %p size %zd in_num %u out_num %u"
> > > virtqueue_fill(void *vq, const void *elem, unsigned int len, unsigned int idx) "vq %p elem %p len %u idx %u"
> > > diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
> > > index e4290ce93d..e923219e63 100644
> > > --- a/hw/virtio/vhost.c
> > > +++ b/hw/virtio/vhost.c
> > > @@ -27,6 +27,7 @@
> > > #include "hw/virtio/virtio-access.h"
> > > #include "migration/blocker.h"
> > > #include "sysemu/dma.h"
> > > +#include "trace.h"
> > >
> > > /* enabled until disconnected backend stabilizes */
> > > #define _VHOST_DEBUG 1
> > > @@ -567,18 +568,12 @@ static void vhost_set_memory(MemoryListener *listener,
> > > memory_listener);
> > > hwaddr start_addr = section->offset_within_address_space;
> > > ram_addr_t size = int128_get64(section->size);
> > > - bool log_dirty =
> > > - memory_region_get_dirty_log_mask(section->mr) & ~(1 << DIRTY_MEMORY_MIGRATION);
> > > int s = offsetof(struct vhost_memory, regions) +
> > > (dev->mem->nregions + 1) * sizeof dev->mem->regions[0];
> > > void *ram;
> > >
> > > dev->mem = g_realloc(dev->mem, s);
> > >
> > > - if (log_dirty) {
> > > - add = false;
> > > - }
> > > -
> > > assert(size);
> > >
> > > /* Optimize no-change case. At least cirrus_vga does this a lot at this time. */
> > > @@ -611,8 +606,19 @@ static void vhost_set_memory(MemoryListener *listener,
> > >
> > > static bool vhost_section(MemoryRegionSection *section)
> > > {
> > > - return memory_region_is_ram(section->mr) &&
> > > + bool result;
> > > + bool log_dirty = memory_region_get_dirty_log_mask(section->mr) &
> > > + ~(1 << DIRTY_MEMORY_MIGRATION);
> > > + result = memory_region_is_ram(section->mr) &&
> > > !memory_region_is_rom(section->mr);
> > > +
> > > + /* Vhost doesn't handle any block which is doing dirty-tracking other
> > > + * than migration; this typically fires on VGA areas.
> > > + */
> > > + result &= !log_dirty;
> > before patch even if log_dirty, vhost_set_memory will still proceed
> > and may remove dirty section from memmap and set memory_changed = true
> >
> > but with this patch it will just ignore such section,
> > I'm not sure it's right (it might be right with new approach add/nop
> > but then this patch should go after new code in place and old one
> > if gone).
>
> I thought about that, but then I came to the conclusion that the whole
> idea is that we're supposed to be ignoring these regions - so why
> should they cause any change to the behaviour of vhost at all?
> Thus this way seems safer.
the thing is that with originally with old code backend will use memap
with not yet dirty region, then after region becomes dirty current code
will REMOVE dirty region from map and NOTIFY backend.
While this patch is fine for new approach as memmap is build from scratch,
it doesn't look correct for current code since region that just became
dirty will not be removed from memap and might be used backend.
Whether it would really break something or not I'm not sure,
maybe Michael may Ack this patch ii using dirty region is fine.
>
> Dave
>
> > > +
> > > + trace_vhost_section(section->mr->name, result);
> > > + return result;
> > > }
> > >
> > > static void vhost_begin(MemoryListener *listener)
> >
> --
> Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
next prev parent reply other threads:[~2017-12-27 12:11 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-13 18:08 [Qemu-devel] [PATCH v4 0/6] Rework vhost memory region updates Dr. David Alan Gilbert (git)
2017-12-13 18:08 ` [Qemu-devel] [PATCH v4 1/6] vhost: Move log_dirty check Dr. David Alan Gilbert (git)
2017-12-14 14:30 ` Igor Mammedov
2017-12-14 15:20 ` Dr. David Alan Gilbert
2017-12-15 10:01 ` Igor Mammedov
2017-12-27 12:10 ` Igor Mammedov [this message]
2018-01-09 18:42 ` Dr. David Alan Gilbert
2017-12-13 18:08 ` [Qemu-devel] [PATCH v4 2/6] vhost: Simplify ring verification checks Dr. David Alan Gilbert (git)
2017-12-14 14:07 ` Igor Mammedov
2017-12-15 12:24 ` Dr. David Alan Gilbert
2017-12-13 18:08 ` [Qemu-devel] [PATCH v4 3/6] vhost: Add temporary memory structure Dr. David Alan Gilbert (git)
2017-12-14 15:15 ` Igor Mammedov
2017-12-15 13:15 ` Dr. David Alan Gilbert
2017-12-13 18:08 ` [Qemu-devel] [PATCH v4 4/6] vhost: add regions to temporary list Dr. David Alan Gilbert (git)
2017-12-13 21:31 ` Paolo Bonzini
2017-12-14 15:53 ` Dr. David Alan Gilbert
2017-12-14 15:27 ` Igor Mammedov
2017-12-14 18:43 ` Michael S. Tsirkin
2017-12-18 20:29 ` Dr. David Alan Gilbert
2017-12-15 13:30 ` Dr. David Alan Gilbert
2017-12-15 14:50 ` Paolo Bonzini
2017-12-15 16:11 ` Dr. David Alan Gilbert
2017-12-13 18:08 ` [Qemu-devel] [PATCH v4 5/6] vhost: compare and flip in new memory region list Dr. David Alan Gilbert (git)
2017-12-13 18:08 ` [Qemu-devel] [PATCH v4 6/6] vhost: Clean out old vhost_set_memory and friends Dr. David Alan Gilbert (git)
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=20171227131054.7601e26f@igors-macbook-pro.local \
--to=imammedo@redhat.com \
--cc=dgilbert@redhat.com \
--cc=groug@kaod.org \
--cc=maxime.coquelin@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@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 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).