diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2017-04-24 15:37:30 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2017-04-24 15:37:30 +0100 |
commit | eab1e53cacfb1d877317d5e7b416ddb43858d92e (patch) | |
tree | c91eff5084a4c5815e74d2c52444d1c50653ced7 /hw/display/g364fb.c | |
parent | 4c55b1d0bad8a703f0499fe62e3761a0cd288da3 (diff) | |
parent | 729abb6a920e80c3866f60d1638f08f2eba98a9a (diff) | |
download | qemu-eab1e53cacfb1d877317d5e7b416ddb43858d92e.zip qemu-eab1e53cacfb1d877317d5e7b416ddb43858d92e.tar.gz qemu-eab1e53cacfb1d877317d5e7b416ddb43858d92e.tar.bz2 |
Merge remote-tracking branch 'remotes/kraxel/tags/pull-vga-20170424-1' into staging
fix display update races, part one.
add xres + yres properties to qxl and virtio.
misc fixes and cleanups.
# gpg: Signature made Mon 24 Apr 2017 13:14:49 BST
# gpg: using RSA key 0x4CB6D8EED3E87138
# gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>"
# gpg: aka "Gerd Hoffmann <gerd@kraxel.org>"
# gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>"
# Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138
* remotes/kraxel/tags/pull-vga-20170424-1:
virtio-gpu: add xres and yres properties
qxl: add xres and yres properties
vmsvga: fix vmsvga_update_display
g364fb: make display updates thread safe
exynos: make display updates thread safe
framebuffer: make display updates thread safe
vga: make display updates thread safe.
vga: add vga_scanline_invalidated helper
memory: add support getting and using a dirty bitmap copy.
bitmap: add bitmap_copy_and_clear_atomic
virtio-gpu: replace PIXMAN_* by PIXMAN_BE_*
console: add same displaychangelistener registration pre-condition
console: add same surface replace pre-condition
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'hw/display/g364fb.c')
-rw-r--r-- | hw/display/g364fb.c | 28 |
1 files changed, 5 insertions, 23 deletions
diff --git a/hw/display/g364fb.c b/hw/display/g364fb.c index 8cdc205..86557d1 100644 --- a/hw/display/g364fb.c +++ b/hw/display/g364fb.c @@ -64,17 +64,8 @@ typedef struct G364State { static inline int check_dirty(G364State *s, ram_addr_t page) { - return memory_region_get_dirty(&s->mem_vram, page, G364_PAGE_SIZE, - DIRTY_MEMORY_VGA); -} - -static inline void reset_dirty(G364State *s, - ram_addr_t page_min, ram_addr_t page_max) -{ - memory_region_reset_dirty(&s->mem_vram, - page_min, - page_max + G364_PAGE_SIZE - page_min - 1, - DIRTY_MEMORY_VGA); + return memory_region_test_and_clear_dirty(&s->mem_vram, page, G364_PAGE_SIZE, + DIRTY_MEMORY_VGA); } static void g364fb_draw_graphic8(G364State *s) @@ -83,7 +74,7 @@ static void g364fb_draw_graphic8(G364State *s) int i, w; uint8_t *vram; uint8_t *data_display, *dd; - ram_addr_t page, page_min, page_max; + ram_addr_t page; int x, y; int xmin, xmax; int ymin, ymax; @@ -114,8 +105,6 @@ static void g364fb_draw_graphic8(G364State *s) } page = 0; - page_min = (ram_addr_t)-1; - page_max = 0; x = y = 0; xmin = s->width; @@ -137,9 +126,6 @@ static void g364fb_draw_graphic8(G364State *s) if (check_dirty(s, page)) { if (y < ymin) ymin = ymax = y; - if (page_min == (ram_addr_t)-1) - page_min = page; - page_max = page; if (x < xmin) xmin = x; for (i = 0; i < G364_PAGE_SIZE; i++) { @@ -196,10 +182,7 @@ static void g364fb_draw_graphic8(G364State *s) ymax = y; } else { int dy; - if (page_min != (ram_addr_t)-1) { - reset_dirty(s, page_min, page_max); - page_min = (ram_addr_t)-1; - page_max = 0; + if (xmax || ymax) { dpy_gfx_update(s->con, xmin, ymin, xmax - xmin + 1, ymax - ymin + 1); xmin = s->width; @@ -219,9 +202,8 @@ static void g364fb_draw_graphic8(G364State *s) } done: - if (page_min != (ram_addr_t)-1) { + if (xmax || ymax) { dpy_gfx_update(s->con, xmin, ymin, xmax - xmin + 1, ymax - ymin + 1); - reset_dirty(s, page_min, page_max); } } |