qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout.
@ 2015-02-16  8:25 Gerd Hoffmann
  2015-02-16  8:25 ` [Qemu-devel] [PULL 1/7] vnc: fix qemu crash when not configure vnc option Gerd Hoffmann
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2015-02-16  8:25 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann

  Hi,

The "multiple vnc servers" patch series introduced some issues, mostly
due to the QemuOpts conversion of the vnc option parsing.  This pull
fixes most of them.  There also is one optimization.

There is one pending issue related to -readconfig just reported by
Markus.  Will be fixed with the next pull, don't want delay the
other fixes even longer, they are quite late already because I was
sick for a while.

please pull,
  Gerd

The following changes since commit cd2d5541271f1934345d8ca42f5fafff1744eee7:

  Merge remote-tracking branch 'remotes/rth/tags/pull-tcg-20150212' into staging (2015-02-13 11:44:50 +0000)

are available in the git repository at:


  git://git.kraxel.org/qemu tags/pull-vnc-20150216-1

for you to fetch changes up to 9e0ff75e5158c7dbb65ee447382bbdf4cafbef8b:

  vnc: fix coverity warning (2015-02-16 08:48:00 +0100)

----------------------------------------------------------------
vnc: fixup some QemuOpts conversion fallout.

----------------------------------------------------------------
Gerd Hoffmann (1):
      vnc: fix coverity warning

Gonglei (5):
      vnc: fix qemu crash when not configure vnc option
      vnc: correct missing property about vnc_display
      vnc: using bool type instead of int for QEMU_OPT_BOOL
      vnc: introduce an wrapper for auto assign vnc id
      vnc: auto assian an id when calling change vnc qmp interface

Peter Lieven (1):
      ui/vnc: optimize full scanline updates

 include/ui/console.h |  1 +
 qmp.c                |  5 ++++
 ui/vnc.c             | 74 +++++++++++++++++++++++++++++++++++++++++-----------
 3 files changed, 65 insertions(+), 15 deletions(-)

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PULL 1/7] vnc: fix qemu crash when not configure vnc option
  2015-02-16  8:25 [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout Gerd Hoffmann
@ 2015-02-16  8:25 ` Gerd Hoffmann
  2015-02-16  8:26 ` [Qemu-devel] [PULL 2/7] vnc: correct missing property about vnc_display Gerd Hoffmann
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2015-02-16  8:25 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gonglei, Gerd Hoffmann, Anthony Liguori

From: Gonglei <arei.gonglei@huawei.com>

Add missing vnc options: to, ipv4, ipv6 and fix
qemu crash.

Reproducer:
$ x86_64-softmmu/qemu-system-x86_64
qemu-system-x86_64: Invalid parameter 'to'
Segmentation fault (core dumped)

BTW the patch fix the below bug:
https://bugs.launchpad.net/qemu/+bug/1414222

Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Reviewed-by: Don Slutz <dslutz@verizon.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/vnc.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/ui/vnc.c b/ui/vnc.c
index 02552ee..90e8a88 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -3272,6 +3272,15 @@ static QemuOptsList qemu_vnc_opts = {
             .name = "connections",
             .type = QEMU_OPT_NUMBER,
         },{
+            .name = "to",
+            .type = QEMU_OPT_NUMBER,
+        },{
+            .name = "ipv4",
+            .type = QEMU_OPT_BOOL,
+        },{
+            .name = "ipv6",
+            .type = QEMU_OPT_BOOL,
+        },{
             .name = "password",
             .type = QEMU_OPT_BOOL,
         },{
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PULL 2/7] vnc: correct missing property about vnc_display
  2015-02-16  8:25 [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout Gerd Hoffmann
  2015-02-16  8:25 ` [Qemu-devel] [PULL 1/7] vnc: fix qemu crash when not configure vnc option Gerd Hoffmann
@ 2015-02-16  8:26 ` Gerd Hoffmann
  2015-02-16  8:26 ` [Qemu-devel] [PULL 3/7] vnc: using bool type instead of int for QEMU_OPT_BOOL Gerd Hoffmann
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2015-02-16  8:26 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gonglei, Gerd Hoffmann, Anthony Liguori

From: Gonglei <arei.gonglei@huawei.com>

Missing three property for vnc socket connection,
revalue display variable with correct way.

Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/vnc.c | 26 +++++++++++++++++++++++---
 1 file changed, 23 insertions(+), 3 deletions(-)

diff --git a/ui/vnc.c b/ui/vnc.c
index 90e8a88..6a82d7f 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -3316,10 +3316,15 @@ void vnc_display_open(const char *id, Error **errp)
 {
     VncDisplay *vs = vnc_display_find(id);
     QemuOpts *opts = qemu_opts_find(&qemu_vnc_opts, id);
-    const char *display, *share, *device_id;
+    const char *share, *device_id;
     QemuConsole *con;
     int password = 0;
     int reverse = 0;
+    const char *vnc;
+    const char *has_to;
+    char *display, *to = NULL;
+    bool has_ipv4 = false;
+    bool has_ipv6 = false;
 #ifdef CONFIG_VNC_WS
     const char *websocket;
 #endif
@@ -3345,10 +3350,21 @@ void vnc_display_open(const char *id, Error **errp)
     if (!opts) {
         return;
     }
-    display = qemu_opt_get(opts, "vnc");
-    if (!display || strcmp(display, "none") == 0) {
+    vnc = qemu_opt_get(opts, "vnc");
+    if (!vnc || strcmp(vnc, "none") == 0) {
         return;
     }
+
+    has_to = qemu_opt_get(opts, "to");
+    if (has_to) {
+        to = g_strdup_printf(",to=%s", has_to);
+    }
+    has_ipv4 = qemu_opt_get_bool(opts, "ipv4", false);
+    has_ipv6 = qemu_opt_get_bool(opts, "ipv6", false);
+    display = g_strdup_printf("%s%s%s%s", vnc,
+                                  has_to ? to : "",
+                                  has_ipv4 ? ",ipv4" : "",
+                                  has_ipv6 ? ",ipv6" : "");
     vs->display = g_strdup(display);
 
     password = qemu_opt_get_bool(opts, "password", false);
@@ -3628,6 +3644,8 @@ void vnc_display_open(const char *id, Error **errp)
             }
 #endif /* CONFIG_VNC_WS */
         }
+        g_free(to);
+        g_free(display);
         g_free(vs->display);
         vs->display = dpy;
         qemu_set_fd_handler2(vs->lsock, NULL,
@@ -3642,6 +3660,8 @@ void vnc_display_open(const char *id, Error **errp)
     return;
 
 fail:
+    g_free(to);
+    g_free(display);
     g_free(vs->display);
     vs->display = NULL;
 #ifdef CONFIG_VNC_WS
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PULL 3/7] vnc: using bool type instead of int for QEMU_OPT_BOOL
  2015-02-16  8:25 [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout Gerd Hoffmann
  2015-02-16  8:25 ` [Qemu-devel] [PULL 1/7] vnc: fix qemu crash when not configure vnc option Gerd Hoffmann
  2015-02-16  8:26 ` [Qemu-devel] [PULL 2/7] vnc: correct missing property about vnc_display Gerd Hoffmann
@ 2015-02-16  8:26 ` Gerd Hoffmann
  2015-02-16  8:26 ` [Qemu-devel] [PULL 4/7] vnc: introduce an wrapper for auto assign vnc id Gerd Hoffmann
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2015-02-16  8:26 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gonglei, Gerd Hoffmann, Anthony Liguori

From: Gonglei <arei.gonglei@huawei.com>

Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/vnc.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/ui/vnc.c b/ui/vnc.c
index 6a82d7f..e7c35aa 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -3318,8 +3318,8 @@ void vnc_display_open(const char *id, Error **errp)
     QemuOpts *opts = qemu_opts_find(&qemu_vnc_opts, id);
     const char *share, *device_id;
     QemuConsole *con;
-    int password = 0;
-    int reverse = 0;
+    bool password = false;
+    bool reverse = false;
     const char *vnc;
     const char *has_to;
     char *display, *to = NULL;
@@ -3329,11 +3329,11 @@ void vnc_display_open(const char *id, Error **errp)
     const char *websocket;
 #endif
 #ifdef CONFIG_VNC_TLS
-    int tls = 0, x509 = 0;
+    bool tls = false, x509 = false;
     const char *path;
 #endif
 #ifdef CONFIG_VNC_SASL
-    int sasl = 0;
+    bool sasl = false;
     int saslErr;
 #endif
 #if defined(CONFIG_VNC_TLS) || defined(CONFIG_VNC_SASL)
@@ -3385,7 +3385,7 @@ void vnc_display_open(const char *id, Error **errp)
     tls  = qemu_opt_get_bool(opts, "tls", false);
     path = qemu_opt_get(opts, "x509");
     if (path) {
-        x509 = 1;
+        x509 = true;
         vs->tls.x509verify = qemu_opt_get_bool(opts, "x509verify", false);
         if (vnc_tls_set_x509_creds_dir(vs, path) < 0) {
             error_setg(errp, "Failed to find x509 certificates/keys in %s",
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PULL 4/7] vnc: introduce an wrapper for auto assign vnc id
  2015-02-16  8:25 [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout Gerd Hoffmann
                   ` (2 preceding siblings ...)
  2015-02-16  8:26 ` [Qemu-devel] [PULL 3/7] vnc: using bool type instead of int for QEMU_OPT_BOOL Gerd Hoffmann
@ 2015-02-16  8:26 ` Gerd Hoffmann
  2015-02-16  8:26 ` [Qemu-devel] [PULL 5/7] vnc: auto assian an id when calling change vnc qmp interface Gerd Hoffmann
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2015-02-16  8:26 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gonglei, Gerd Hoffmann, Anthony Liguori

From: Gonglei <arei.gonglei@huawei.com>

Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 include/ui/console.h |  1 +
 ui/vnc.c             | 22 +++++++++++++++-------
 2 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/include/ui/console.h b/include/ui/console.h
index 8a4d671..5c19c3c 100644
--- a/include/ui/console.h
+++ b/include/ui/console.h
@@ -335,6 +335,7 @@ void vnc_display_init(const char *id);
 void vnc_display_open(const char *id, Error **errp);
 void vnc_display_add_client(const char *id, int csock, bool skipauth);
 char *vnc_display_local_addr(const char *id);
+void vnc_auto_assign_id(QemuOptsList *olist, QemuOpts *opts);
 #ifdef CONFIG_VNC
 int vnc_display_password(const char *id, const char *password);
 int vnc_display_pw_expire(const char *id, time_t expires);
diff --git a/ui/vnc.c b/ui/vnc.c
index e7c35aa..faa218f 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -3685,6 +3685,19 @@ QemuOpts *vnc_parse_func(const char *str)
     return qemu_opts_parse(qemu_find_opts("vnc"), str, 1);
 }
 
+void vnc_auto_assign_id(QemuOptsList *olist, QemuOpts *opts)
+{
+    int i = 2;
+    char *id;
+
+    id = g_strdup("default");
+    while (qemu_opts_find(olist, id)) {
+        g_free(id);
+        id = g_strdup_printf("vnc%d", i++);
+    }
+    qemu_opts_set_id(opts, id);
+}
+
 int vnc_init_func(QemuOpts *opts, void *opaque)
 {
     Error *local_err = NULL;
@@ -3693,13 +3706,8 @@ int vnc_init_func(QemuOpts *opts, void *opaque)
 
     if (!id) {
         /* auto-assign id if not present */
-        int i = 2;
-        id = g_strdup("default");
-        while (qemu_opts_find(olist, id)) {
-            g_free(id);
-            id = g_strdup_printf("vnc%d", i++);
-        }
-        qemu_opts_set_id(opts, id);
+        vnc_auto_assign_id(olist, opts);
+        id = (char *)qemu_opts_id(opts);
     }
 
     vnc_display_init(id);
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PULL 5/7] vnc: auto assian an id when calling change vnc qmp interface
  2015-02-16  8:25 [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout Gerd Hoffmann
                   ` (3 preceding siblings ...)
  2015-02-16  8:26 ` [Qemu-devel] [PULL 4/7] vnc: introduce an wrapper for auto assign vnc id Gerd Hoffmann
@ 2015-02-16  8:26 ` Gerd Hoffmann
  2015-02-16  8:26 ` [Qemu-devel] [PULL 6/7] ui/vnc: optimize full scanline updates Gerd Hoffmann
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2015-02-16  8:26 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gonglei, Gerd Hoffmann, Luiz Capitulino

From: Gonglei <arei.gonglei@huawei.com>

Only in this way, change vnc qmp interface can take effect,
because qemu_opts_find(&qemu_vnc_opts, id) will return NULL
in vnc_display_open(), It can't connect successfully vnc
server forever.

Signed-off-by: Gonglei <arei.gonglei@huawei.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qmp.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/qmp.c b/qmp.c
index 6b2c4be..d701cff 100644
--- a/qmp.c
+++ b/qmp.c
@@ -387,6 +387,11 @@ static void qmp_change_vnc_listen(const char *target, Error **errp)
         qemu_opts_del(opts);
     }
     opts = vnc_parse_func(target);
+    if (!opts) {
+        return;
+    }
+
+    vnc_auto_assign_id(olist, opts);
     vnc_display_open("default", errp);
 }
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PULL 6/7] ui/vnc: optimize full scanline updates
  2015-02-16  8:25 [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout Gerd Hoffmann
                   ` (4 preceding siblings ...)
  2015-02-16  8:26 ` [Qemu-devel] [PULL 5/7] vnc: auto assian an id when calling change vnc qmp interface Gerd Hoffmann
@ 2015-02-16  8:26 ` Gerd Hoffmann
  2015-02-16  8:26 ` [Qemu-devel] [PULL 7/7] vnc: fix coverity warning Gerd Hoffmann
  2015-02-24 12:58 ` [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout Peter Maydell
  7 siblings, 0 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2015-02-16  8:26 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Lieven, Gerd Hoffmann, Anthony Liguori

From: Peter Lieven <pl@kamp.de>

in case we send and update for a complete scanline increment
the y offset to avoid running to find_next_bit for that lines
twice.

Signed-off-by: Peter Lieven <pl@kamp.de>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/vnc.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/ui/vnc.c b/ui/vnc.c
index faa218f..14289fd 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -1111,6 +1111,12 @@ static int vnc_update_client(VncState *vs, int has_dirty, bool sync)
                 n += vnc_job_add_rect(job, x * VNC_DIRTY_PIXELS_PER_BIT, y,
                                       (x2 - x) * VNC_DIRTY_PIXELS_PER_BIT, h);
             }
+            if (!x && x2 == width / VNC_DIRTY_PIXELS_PER_BIT) {
+                y += h;
+                if (y == height) {
+                    break;
+                }
+            }
         }
 
         vnc_job_push(job);
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PULL 7/7] vnc: fix coverity warning
  2015-02-16  8:25 [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout Gerd Hoffmann
                   ` (5 preceding siblings ...)
  2015-02-16  8:26 ` [Qemu-devel] [PULL 6/7] ui/vnc: optimize full scanline updates Gerd Hoffmann
@ 2015-02-16  8:26 ` Gerd Hoffmann
  2015-02-24 12:58 ` [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout Peter Maydell
  7 siblings, 0 replies; 9+ messages in thread
From: Gerd Hoffmann @ 2015-02-16  8:26 UTC (permalink / raw)
  To: qemu-devel; +Cc: Gerd Hoffmann, Anthony Liguori

vnc_display_local_addr will not be called with an invalid display id.
Add assert() to silence coverity warning about a null pointer dereference.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 ui/vnc.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/ui/vnc.c b/ui/vnc.c
index 14289fd..10a2724 100644
--- a/ui/vnc.c
+++ b/ui/vnc.c
@@ -3248,6 +3248,7 @@ char *vnc_display_local_addr(const char *id)
 {
     VncDisplay *vs = vnc_display_find(id);
 
+    assert(vs);
     return vnc_socket_local_addr("%s:%s", vs->lsock);
 }
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout.
  2015-02-16  8:25 [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout Gerd Hoffmann
                   ` (6 preceding siblings ...)
  2015-02-16  8:26 ` [Qemu-devel] [PULL 7/7] vnc: fix coverity warning Gerd Hoffmann
@ 2015-02-24 12:58 ` Peter Maydell
  7 siblings, 0 replies; 9+ messages in thread
From: Peter Maydell @ 2015-02-24 12:58 UTC (permalink / raw)
  To: Gerd Hoffmann; +Cc: QEMU Developers

On 16 February 2015 at 17:25, Gerd Hoffmann <kraxel@redhat.com> wrote:
>   Hi,
>
> The "multiple vnc servers" patch series introduced some issues, mostly
> due to the QemuOpts conversion of the vnc option parsing.  This pull
> fixes most of them.  There also is one optimization.
>
> There is one pending issue related to -readconfig just reported by
> Markus.  Will be fixed with the next pull, don't want delay the
> other fixes even longer, they are quite late already because I was
> sick for a while.
>
> please pull,
>   Gerd
>
> The following changes since commit cd2d5541271f1934345d8ca42f5fafff1744eee7:
>
>   Merge remote-tracking branch 'remotes/rth/tags/pull-tcg-20150212' into staging (2015-02-13 11:44:50 +0000)
>
> are available in the git repository at:
>
>
>   git://git.kraxel.org/qemu tags/pull-vnc-20150216-1
>
> for you to fetch changes up to 9e0ff75e5158c7dbb65ee447382bbdf4cafbef8b:
>
>   vnc: fix coverity warning (2015-02-16 08:48:00 +0100)

Applied, thanks.

-- PMM

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-02-24 12:59 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-02-16  8:25 [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout Gerd Hoffmann
2015-02-16  8:25 ` [Qemu-devel] [PULL 1/7] vnc: fix qemu crash when not configure vnc option Gerd Hoffmann
2015-02-16  8:26 ` [Qemu-devel] [PULL 2/7] vnc: correct missing property about vnc_display Gerd Hoffmann
2015-02-16  8:26 ` [Qemu-devel] [PULL 3/7] vnc: using bool type instead of int for QEMU_OPT_BOOL Gerd Hoffmann
2015-02-16  8:26 ` [Qemu-devel] [PULL 4/7] vnc: introduce an wrapper for auto assign vnc id Gerd Hoffmann
2015-02-16  8:26 ` [Qemu-devel] [PULL 5/7] vnc: auto assian an id when calling change vnc qmp interface Gerd Hoffmann
2015-02-16  8:26 ` [Qemu-devel] [PULL 6/7] ui/vnc: optimize full scanline updates Gerd Hoffmann
2015-02-16  8:26 ` [Qemu-devel] [PULL 7/7] vnc: fix coverity warning Gerd Hoffmann
2015-02-24 12:58 ` [Qemu-devel] [PULL 0/7] vnc: fixup some QemuOpts conversion fallout Peter Maydell

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).