fix vnc regression
PATCH 1/1 fix vnc regression
This patch fix the following two regressions:
1. we should use bitmap_set() and bitmap_clear() to replace vnc_set_bits().
2. The unit of bitmap_intersects()'third parameter is bit, not words. But we pass the num of words to bitmap_intersects().
--- ui/vnc.c | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-)
ui/vnc.c +6 -2
@@ -1655,7 +1655,10 @@ static void framebuffer_update_request(VncState *vs, int incremental,if (!incremental) { vs->force_update =1 ;for (i =0 ; i < h; i++) { -bitmap_set (vs->dirty[y_position + i], x_position /16 , w /16 ); +bitmap_set (vs->dirty[y_position + i],0 , + (ds_get_width (vs->ds) /16 )); +bitmap_clear (vs->dirty[y_position + i], (ds_get_width (vs->ds) /16 ), +VNC_DIRTY_WORDS *BITS_PER_LONG ); } } }
@@ -2406,7 +2409,8 @@ static int vnc_refresh_server_surface(VncDisplay *vd) guest_row = vd->guest.ds->data; server_row = vd->server->data;for (y =0 ; y < vd->guest.ds->height; y++) { -if (bitmap_intersects (vd->guest.dirty[y], width_mask,VNC_DIRTY_WORDS )) { +if (bitmap_intersects (vd->guest.dirty[y], width_mask, +VNC_DIRTY_WORDS *BITS_PER_LONG )) {int x;uint8_t *guest_ptr;uint8_t *server_ptr;
Signature · 1 line
1.7.1
Quoted 17 lines · Wen Congyang
This patch fix the following two regressions:
1. we should usebitmap_set()andbitmap_clear()to replacevnc_set_bits().
2. The unit of bitmap_intersects()'third parameter is bit, not words. But we pass the num of words tobitmap_intersects().Signed-off-by Wen Congyang <[email protected]>---
ui/vnc.c | 8 ++++++--1 files changed, 6 insertions(+), 2 deletions(-)ui/vnc.c +0
-0@@ -1655,7 +1655,10 @@ static void framebuffer_update_request(VncState *vs, int incremental, if (!incremental) {
ui/vnc.c static void framebuffer_update_request(VncState *vs, int incremental, · line 1664
Quoted 10 lines
ui/vnc.c +4
-1vs->force_update = 1; for (i = 0; i < h; i++) { - bitmap_set(vs->dirty[y_position + i], x_position / 16, w / 16); + bitmap_set(vs->dirty[y_position + i], 0, + (ds_get_width(vs->ds) / 16)); + bitmap_clear(vs->dirty[y_position + i], (ds_get_width(vs->ds) / 16), + VNC_DIRTY_WORDS * BITS_PER_LONG); } } }
Oh, right, (!incremental) case was broken.
ui/vnc.c static int vnc_refresh_server_surface(VncDisplay *vd) · line 2416
Quoted 10 lines
ui/vnc.c +2
-1@@ -2406,7 +2409,8 @@ static int vnc_refresh_server_surface(VncDisplay *vd) guest_row = vd->guest.ds->data; server_row = vd->server->data; for (y = 0; y < vd->guest.ds->height; y++) { - if (bitmap_intersects(vd->guest.dirty[y], width_mask, VNC_DIRTY_WORDS)) { + if (bitmap_intersects(vd->guest.dirty[y], width_mask, + VNC_DIRTY_WORDS * BITS_PER_LONG)) { int x; uint8_t *guest_ptr; uint8_t *server_ptr;
Good catch,
Thanks,
Signature · 2 lines
Corentin Chary http://xf.iksaif.net
PATCH v2 1/1 fix vnc regression
This patch fix the following two regressions:
1. we should use bitmap_set() and bitmap_clear() to replace vnc_set_bits().
2. The unit of bitmap_intersects()'third parameter is bit, not words. But we pass the num of words to bitmap_intersects().
Changes from v1 to v2:
1. fix the third argument of bitmap_clear()
--- ui/vnc.c | 9 +++++++-- 1 files changed, 7 insertions(+), 2 deletions(-)
ui/vnc.c +7 -2
@@ -1655,7 +1655,11 @@ static void framebuffer_update_request(VncState *vs, int incremental,if (!incremental) { vs->force_update =1 ;for (i =0 ; i < h; i++) { -bitmap_set (vs->dirty[y_position + i], x_position /16 , w /16 ); +bitmap_set (vs->dirty[y_position + i],0 , + (ds_get_width (vs->ds) /16 )); +bitmap_clear (vs->dirty[y_position + i], (ds_get_width (vs->ds) /16 ), +VNC_DIRTY_WORDS *BITS_PER_LONG - + (ds_get_width (vs->ds) /16 )); } } }
@@ -2406,7 +2410,8 @@ static int vnc_refresh_server_surface(VncDisplay *vd) guest_row = vd->guest.ds->data; server_row = vd->server->data;for (y =0 ; y < vd->guest.ds->height; y++) { -if (bitmap_intersects (vd->guest.dirty[y], width_mask,VNC_DIRTY_WORDS )) { +if (bitmap_intersects (vd->guest.dirty[y], width_mask, +VNC_DIRTY_WORDS *BITS_PER_LONG )) {int x;uint8_t *guest_ptr;uint8_t *server_ptr;
Signature · 1 line
1.7.1
Quoted 9 lines · Wen Congyang
This patch fix the following two regressions:
1. we should usebitmap_set()andbitmap_clear()to replacevnc_set_bits().
2. The unit of bitmap_intersects()'third parameter is bit, not words. But we pass the num of words tobitmap_intersects().Changes from v1 to v2:
1. fix the third argument ofbitmap_clear()Signed-off-by Wen Congyang <[email protected]>
Seems ok, tested with valgrind this time.
But could you re-send this one and the other one at
http://patchwork.ozlabs.org/patch/84887/ :
- with appropriate Signed-off-by: and changelog for the other patch
- using a const size_t width = ds_get_width(vs->ds) / 16; in both patchs to make the call more explicit
Thanks,
Signature · 2 lines
Corentin Chary http://xf.iksaif.net