diff mbox

[04/22] display: enable DIRTY_MEMORY_VGA tracking explicitly

Message ID 1427391520-29497-5-git-send-email-pbonzini@redhat.com
State New
Headers show

Commit Message

Paolo Bonzini March 26, 2015, 5:38 p.m. UTC
This will be required soon by the memory core.

Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 hw/display/cg3.c             | 1 +
 hw/display/exynos4210_fimd.c | 7 ++++++-
 hw/display/g364fb.c          | 2 +-
 hw/display/sm501.c           | 1 +
 hw/display/tcx.c             | 1 +
 5 files changed, 10 insertions(+), 2 deletions(-)

Comments

Stefan Hajnoczi April 20, 2015, 1:11 p.m. UTC | #1
On Thu, Mar 26, 2015 at 06:38:22PM +0100, Paolo Bonzini wrote:
> diff --git a/hw/display/g364fb.c b/hw/display/g364fb.c
> index 46f7b41..be62dd6 100644
> --- a/hw/display/g364fb.c
> +++ b/hw/display/g364fb.c
> @@ -489,7 +489,7 @@ static void g364fb_init(DeviceState *dev, G364State *s)
>      memory_region_init_ram_ptr(&s->mem_vram, NULL, "vram",
>                                 s->vram_size, s->vram);
>      vmstate_register_ram(&s->mem_vram, dev);
> -    memory_region_set_coalescing(&s->mem_vram);
> +    memory_region_set_log(&s->mem_vram, true, DIRTY_MEMORY_VGA);

This change isn't 100% clear to me.  I guess that coalescing
(performance optimization) doesn't make sense when logging is enabled?
Paolo Bonzini April 20, 2015, 1:54 p.m. UTC | #2
On 20/04/2015 15:11, Stefan Hajnoczi wrote:
>> -    memory_region_set_coalescing(&s->mem_vram); +
>> memory_region_set_log(&s->mem_vram, true, DIRTY_MEMORY_VGA);
> 
> This change isn't 100% clear to me.  I guess that coalescing 
> (performance optimization) doesn't make sense when logging is
> enabled?

No, it's just that coalescing is for MMIO, not RAM.  Setting
coalescing was a no-op.  I'll make this a separate patch.

Paolo
Stefan Hajnoczi April 22, 2015, 9:12 a.m. UTC | #3
On Mon, Apr 20, 2015 at 03:54:52PM +0200, Paolo Bonzini wrote:
> 
> 
> On 20/04/2015 15:11, Stefan Hajnoczi wrote:
> >> -    memory_region_set_coalescing(&s->mem_vram); +
> >> memory_region_set_log(&s->mem_vram, true, DIRTY_MEMORY_VGA);
> > 
> > This change isn't 100% clear to me.  I guess that coalescing 
> > (performance optimization) doesn't make sense when logging is
> > enabled?
> 
> No, it's just that coalescing is for MMIO, not RAM.  Setting
> coalescing was a no-op.  I'll make this a separate patch.

Thanks!
diff mbox

Patch

diff --git a/hw/display/cg3.c b/hw/display/cg3.c
index 1e6ff2b..cbcf518 100644
--- a/hw/display/cg3.c
+++ b/hw/display/cg3.c
@@ -309,6 +309,7 @@  static void cg3_realizefn(DeviceState *dev, Error **errp)
 
     memory_region_init_ram(&s->vram_mem, NULL, "cg3.vram", s->vram_size,
                            &error_abort);
+    memory_region_set_log(&s->vram_mem, true, DIRTY_MEMORY_VGA);
     vmstate_register_ram_global(&s->vram_mem);
     sysbus_init_mmio(sbd, &s->vram_mem);
 
diff --git a/hw/display/exynos4210_fimd.c b/hw/display/exynos4210_fimd.c
index 45c62af..f01d084 100644
--- a/hw/display/exynos4210_fimd.c
+++ b/hw/display/exynos4210_fimd.c
@@ -1136,7 +1136,11 @@  static void fimd_update_memory_section(Exynos4210fimdState *s, unsigned win)
     /* TODO: add .exit and unref the region there.  Not needed yet since sysbus
      * does not support hot-unplug.
      */
-    memory_region_unref(w->mem_section.mr);
+    if (w->mem_section.mr) {
+        memory_region_set_log(w->mem_section.mr, false, DIRTY_MEMORY_VGA);
+        memory_region_unref(w->mem_section.mr);
+    }
+
     w->mem_section = memory_region_find(sysbus_address_space(sbd),
                                         fb_start_addr, w->fb_len);
     assert(w->mem_section.mr);
@@ -1162,6 +1166,7 @@  static void fimd_update_memory_section(Exynos4210fimdState *s, unsigned win)
         cpu_physical_memory_unmap(w->host_fb_addr, fb_mapped_len, 0, 0);
         goto error_return;
     }
+    memory_region_set_log(w->mem_section.mr, true, DIRTY_MEMORY_VGA);
     return;
 
 error_return:
diff --git a/hw/display/g364fb.c b/hw/display/g364fb.c
index 46f7b41..be62dd6 100644
--- a/hw/display/g364fb.c
+++ b/hw/display/g364fb.c
@@ -489,7 +489,7 @@  static void g364fb_init(DeviceState *dev, G364State *s)
     memory_region_init_ram_ptr(&s->mem_vram, NULL, "vram",
                                s->vram_size, s->vram);
     vmstate_register_ram(&s->mem_vram, dev);
-    memory_region_set_coalescing(&s->mem_vram);
+    memory_region_set_log(&s->mem_vram, true, DIRTY_MEMORY_VGA);
 }
 
 #define TYPE_G364 "sysbus-g364"
diff --git a/hw/display/sm501.c b/hw/display/sm501.c
index c72154b..43f8538 100644
--- a/hw/display/sm501.c
+++ b/hw/display/sm501.c
@@ -1412,6 +1412,7 @@  void sm501_init(MemoryRegion *address_space_mem, uint32_t base,
     memory_region_init_ram(&s->local_mem_region, NULL, "sm501.local",
                            local_mem_bytes, &error_abort);
     vmstate_register_ram_global(&s->local_mem_region);
+    memory_region_set_log(&s->local_mem_region, true, DIRTY_MEMORY_VGA);
     s->local_mem = memory_region_get_ram_ptr(&s->local_mem_region);
     memory_region_add_subregion(address_space_mem, base, &s->local_mem_region);
 
diff --git a/hw/display/tcx.c b/hw/display/tcx.c
index a9f9f66..58faa96 100644
--- a/hw/display/tcx.c
+++ b/hw/display/tcx.c
@@ -1006,6 +1006,7 @@  static void tcx_realizefn(DeviceState *dev, Error **errp)
     memory_region_init_ram(&s->vram_mem, OBJECT(s), "tcx.vram",
                            s->vram_size * (1 + 4 + 4), &error_abort);
     vmstate_register_ram_global(&s->vram_mem);
+    memory_region_set_log(&s->vram_mem, true, DIRTY_MEMORY_VGA);
     vram_base = memory_region_get_ram_ptr(&s->vram_mem);
 
     /* 10/ROM : FCode ROM */