Patchwork [RESEND,v3] fix vnc regression

login
register
mail settings
Submitter Wen Congyang
Date March 11, 2011, 9:10 a.m.
Message ID <4D79E708.9050007@cn.fujitsu.com>
Download mbox | patch
Permalink /patch/86387/
State New
Headers show

Comments

Wen Congyang - March 11, 2011, 9:10 a.m.
This patch fix the following regression:
1. we should use bitmap_set() and bitmap_clear() to replace vnc_set_bits().

Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>

---
 ui/vnc.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)
Anthony Liguori - March 22, 2011, 2:02 p.m.
On 03/11/2011 03:10 AM, Wen Congyang wrote:
> This patch fix the following regression:
> 1. we should use bitmap_set() and bitmap_clear() to replace vnc_set_bits().
>
> Signed-off-by: Wen Congyang<wency@cn.fujitsu.com>
>
> ---
>   ui/vnc.c |    8 ++++++--
>   1 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/ui/vnc.c b/ui/vnc.c
> index 34dc0cd..8fd35c1 100644
> --- a/ui/vnc.c
> +++ b/ui/vnc.c
> @@ -1645,17 +1645,21 @@ static void framebuffer_update_request(VncState *vs, int incremental,
>                                          int x_position, int y_position,
>                                          int w, int h)
>   {
> +    int i;
> +    const size_t width = ds_get_width(vs->ds) / 16;
> +
>       if (y_position>  ds_get_height(vs->ds))
>           y_position = ds_get_height(vs->ds);
>       if (y_position + h>= ds_get_height(vs->ds))
>           h = ds_get_height(vs->ds) - y_position;
>
> -    int i;
>       vs->need_update = 1;
>       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, width);
> +            bitmap_clear(vs->dirty[y_position + i], width,
> +                         VNC_DIRTY_WORDS * BITS_PER_LONG - width);
>           }

VNC_DIRTY_WORDS in not a valid symbol in the latest tip.

Regards,

Anthony Liguori

>       }
>   }
Corentin Chary - March 22, 2011, 2:04 p.m.
>> 16);
>> +            bitmap_set(vs->dirty[y_position + i], 0, width);
>> +            bitmap_clear(vs->dirty[y_position + i], width,
>> +                         VNC_DIRTY_WORDS * BITS_PER_LONG - width);
>>          }
>
> VNC_DIRTY_WORDS in not a valid symbol in the latest tip.
>
> Regards,

Patch updated here: http://patchwork.ozlabs.org/patch/87722/
Anthony Liguori - March 22, 2011, 2:09 p.m.
On 03/22/2011 09:04 AM, Corentin Chary wrote:
>>> 16);
>>> +            bitmap_set(vs->dirty[y_position + i], 0, width);
>>> +            bitmap_clear(vs->dirty[y_position + i], width,
>>> +                         VNC_DIRTY_WORDS * BITS_PER_LONG - width);
>>>           }
>> VNC_DIRTY_WORDS in not a valid symbol in the latest tip.
>>
>> Regards,
> Patch updated here: http://patchwork.ozlabs.org/patch/87722/

Can this be top posted?

Regards,

Anthony Liguori
Anthony Liguori - March 22, 2011, 4:28 p.m.
On 03/11/2011 03:10 AM, Wen Congyang wrote:
> This patch fix the following regression:
> 1. we should use bitmap_set() and bitmap_clear() to replace vnc_set_bits().
>
> Signed-off-by: Wen Congyang<wency@cn.fujitsu.com>

Applied (version that used VNC_DIRTY_BITS).  Thanks.

Regards,

Anthony Liguori

> ---
>   ui/vnc.c |    8 ++++++--
>   1 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/ui/vnc.c b/ui/vnc.c
> index 34dc0cd..8fd35c1 100644
> --- a/ui/vnc.c
> +++ b/ui/vnc.c
> @@ -1645,17 +1645,21 @@ static void framebuffer_update_request(VncState *vs, int incremental,
>                                          int x_position, int y_position,
>                                          int w, int h)
>   {
> +    int i;
> +    const size_t width = ds_get_width(vs->ds) / 16;
> +
>       if (y_position>  ds_get_height(vs->ds))
>           y_position = ds_get_height(vs->ds);
>       if (y_position + h>= ds_get_height(vs->ds))
>           h = ds_get_height(vs->ds) - y_position;
>
> -    int i;
>       vs->need_update = 1;
>       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, width);
> +            bitmap_clear(vs->dirty[y_position + i], width,
> +                         VNC_DIRTY_WORDS * BITS_PER_LONG - width);
>           }
>       }
>   }

Patch

diff --git a/ui/vnc.c b/ui/vnc.c
index 34dc0cd..8fd35c1 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -1645,17 +1645,21 @@  static void framebuffer_update_request(VncState *vs, int incremental,
                                        int x_position, int y_position,
                                        int w, int h)
 {
+    int i;
+    const size_t width = ds_get_width(vs->ds) / 16;
+
     if (y_position > ds_get_height(vs->ds))
         y_position = ds_get_height(vs->ds);
     if (y_position + h >= ds_get_height(vs->ds))
         h = ds_get_height(vs->ds) - y_position;
 
-    int i;
     vs->need_update = 1;
     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, width);
+            bitmap_clear(vs->dirty[y_position + i], width,
+                         VNC_DIRTY_WORDS * BITS_PER_LONG - width);
         }
     }
 }