qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Michael S. Tsirkin" <mst@redhat.com>
Subject: [Qemu-devel] [PATCH 05/22] memory: return bitmap from memory_region_is_logging
Date: Thu, 26 Mar 2015 18:38:23 +0100	[thread overview]
Message-ID: <1427391520-29497-6-git-send-email-pbonzini@redhat.com> (raw)
In-Reply-To: <1427391520-29497-1-git-send-email-pbonzini@redhat.com>

For now it only returns (1 << DIRTY_MEMORY_VGA) or 0, but this
will change soon so adjust the callers.

Listeners check for "any bit except migration", which is handled
via the global start/stop listener callbacks.  This in practice
means VGA because the code bitmap is TCG-specific; however, be
explicit, as for example things would be different if vhost ever
ran with TCG.

Instead, the VMware VGA is looking explicitly for DIRTY_MEMORY_VGA.

Cc: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
        This is the ugliest patch in the series.  My long-term plan
        is to get rid of the global start/stop hooks in the
        MemoryListeners.

 hw/display/vmware_vga.c | 2 +-
 hw/virtio/vhost.c       | 3 ++-
 include/exec/memory.h   | 5 +++--
 kvm-all.c               | 3 ++-
 memory.c                | 2 +-
 xen-hvm.c               | 3 ++-
 6 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/hw/display/vmware_vga.c b/hw/display/vmware_vga.c
index c17ddd1..93d7426 100644
--- a/hw/display/vmware_vga.c
+++ b/hw/display/vmware_vga.c
@@ -1124,7 +1124,7 @@ static void vmsvga_update_display(void *opaque)
      * Is it more efficient to look at vram VGA-dirty bits or wait
      * for the driver to issue SVGA_CMD_UPDATE?
      */
-    if (memory_region_is_logging(&s->vga.vram)) {
+    if (memory_region_is_logging(&s->vga.vram) & (1 << DIRTY_MEMORY_VGA)) {
         vga_sync_dirty_bitmap(&s->vga);
         dirty = memory_region_get_dirty(&s->vga.vram, 0,
             surface_stride(surface) * surface_height(surface),
diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index 5a12861..59321ee 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -377,7 +377,8 @@ 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_is_logging(section->mr);
+    bool log_dirty =
+        memory_region_is_logging(section->mr) & ~(1 << DIRTY_MEMORY_MIGRATION);
     int s = offsetof(struct vhost_memory, regions) +
         (dev->mem->nregions + 1) * sizeof dev->mem->regions[0];
     void *ram;
diff --git a/include/exec/memory.h b/include/exec/memory.h
index 081f7d6..8d5feb2 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -569,11 +569,12 @@ const char *memory_region_name(const MemoryRegion *mr);
 /**
  * memory_region_is_logging: return whether a memory region is logging writes
  *
- * Returns %true if the memory region is logging writes
+ * Returns a bitmap of clients for which the memory region is logging writes.
+ * Right now this will be either 0 or (1 << DIRTY_MEMORY_VGA).
  *
  * @mr: the memory region being queried
  */
-bool memory_region_is_logging(MemoryRegion *mr);
+uint8_t memory_region_is_logging(MemoryRegion *mr);
 
 /**
  * memory_region_is_rom: check whether a memory region is ROM
diff --git a/kvm-all.c b/kvm-all.c
index 335438a..6962653 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -663,7 +663,8 @@ static void kvm_set_phys_mem(MemoryRegionSection *section, bool add)
     KVMSlot *mem, old;
     int err;
     MemoryRegion *mr = section->mr;
-    bool log_dirty = memory_region_is_logging(mr);
+    bool log_dirty =
+        memory_region_is_logging(mr) & ~(1 << DIRTY_MEMORY_MIGRATION);
     bool writeable = !mr->readonly && !mr->rom_device;
     bool readonly_flag = mr->readonly || memory_region_is_romd(mr);
     hwaddr start_addr = section->offset_within_address_space;
diff --git a/memory.c b/memory.c
index e688f5e..45606bc 100644
--- a/memory.c
+++ b/memory.c
@@ -1318,7 +1318,7 @@ bool memory_region_is_skip_dump(MemoryRegion *mr)
     return mr->skip_dump;
 }
 
-bool memory_region_is_logging(MemoryRegion *mr)
+uint8_t memory_region_is_logging(MemoryRegion *mr)
 {
     return mr->dirty_log_mask;
 }
diff --git a/xen-hvm.c b/xen-hvm.c
index 315864c..acd89c8 100644
--- a/xen-hvm.c
+++ b/xen-hvm.c
@@ -488,7 +488,8 @@ static void xen_set_memory(struct MemoryListener *listener,
     XenIOState *state = container_of(listener, XenIOState, memory_listener);
     hwaddr start_addr = section->offset_within_address_space;
     ram_addr_t size = int128_get64(section->size);
-    bool log_dirty = memory_region_is_logging(section->mr);
+    bool log_dirty =
+        memory_region_is_logging(section->mr) & ~(1 << DIRTY_MEMORY_MIGRATION);
     hvmmem_type_t mem_type;
 
     if (section->mr == &ram_memory) {
-- 
2.3.3

  parent reply	other threads:[~2015-03-26 17:39 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-26 17:38 [Qemu-devel] [PATCH 00/22] Dirty bitmap atomic access and optimizations Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 01/22] memory: add memory_region_ram_resize Paolo Bonzini
2015-03-28 18:58   ` Michael S. Tsirkin
2015-03-29  7:30     ` Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 02/22] acpi-build: remove dependency from ram_addr.h Paolo Bonzini
2015-03-28 18:58   ` Michael S. Tsirkin
2015-03-26 17:38 ` [Qemu-devel] [PATCH 03/22] memory: the only dirty memory flag for users is DIRTY_MEMORY_VGA Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 04/22] display: enable DIRTY_MEMORY_VGA tracking explicitly Paolo Bonzini
2015-04-20 13:11   ` Stefan Hajnoczi
2015-04-20 13:54     ` Paolo Bonzini
2015-04-22  9:12       ` Stefan Hajnoczi
2015-03-26 17:38 ` Paolo Bonzini [this message]
2015-03-27  5:44   ` [Qemu-devel] [PATCH 05/22] memory: return bitmap from memory_region_is_logging Fam Zheng
2015-03-27  6:01     ` Paolo Bonzini
2015-03-28 18:54   ` Michael S. Tsirkin
2015-03-29  7:33     ` Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 06/22] framebuffer: check memory_region_is_logging Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 07/22] ui/console: " Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 08/22] memory: track DIRTY_MEMORY_CODE in mr->dirty_log_mask Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 09/22] memory: return DIRTY_MEMORY_MIGRATION from memory_region_is_logging Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 10/22] ram_addr: tweaks to xen_modified_memory Paolo Bonzini
2015-03-28 19:04   ` Stefano Stabellini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 11/22] exec: simplify notdirty_mem_write Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 12/22] exec: use memory_region_is_logging to optimize dirty tracking Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 13/22] exec: pass client mask to cpu_physical_memory_set_dirty_range Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 14/22] exec: only check relevant bitmaps for cleanliness Paolo Bonzini
2015-03-27  6:10   ` Fam Zheng
2015-03-27  9:19     ` Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 15/22] memory: do not touch code dirty bitmap unless TCG is enabled Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 16/22] bitmap: add atomic set functions Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 17/22] bitmap: add atomic test and clear Paolo Bonzini
2015-03-27  6:37   ` Fam Zheng
2015-03-27  9:21     ` Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 18/22] memory: use atomic ops for setting dirty memory bits Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 19/22] migration: move dirty bitmap sync to ram_addr.h Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 20/22] memory: replace cpu_physical_memory_reset_dirty() with test-and-clear Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 21/22] memory: make cpu_physical_memory_sync_dirty_bitmap() fully atomic Paolo Bonzini
2015-03-26 17:38 ` [Qemu-devel] [PATCH 22/22] migration: run bitmap sync outside iothread lock Paolo Bonzini
2015-04-20 13:23 ` [Qemu-devel] [PATCH 00/22] Dirty bitmap atomic access and optimizations Stefan Hajnoczi

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=1427391520-29497-6-git-send-email-pbonzini@redhat.com \
    --to=pbonzini@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 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).