From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550822344104717.9014186666456; Thu, 21 Feb 2019 23:59:04 -0800 (PST) Received: from localhost ([127.0.0.1]:45976 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5jP-00029j-Jl for importer@patchew.org; Fri, 22 Feb 2019 02:58:51 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60425) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eN-0006xp-EW for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eL-0001Xk-UU for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:39 -0500 Received: from mx1.redhat.com ([209.132.183.28]:42144) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eL-0001QY-CE for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:37 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id AD467305B239 for ; Fri, 22 Feb 2019 07:53:32 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 16252600C5; Fri, 22 Feb 2019 07:53:26 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 2A92B11AB5; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:12 +0100 Message-Id: <20190222075326.9850-2-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Fri, 22 Feb 2019 07:53:32 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 01/15] kbd-state: don't block auto-repeat events X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Gerd Hoffmann , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Signed-off-by: Gerd Hoffmann Reviewed-by: Daniel P. Berrang=C3=A9 Message-id: 20190220100235.20914-1-kraxel@redhat.com --- ui/kbd-state.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/ui/kbd-state.c b/ui/kbd-state.c index ac14add70eab..f3ab2d7a665d 100644 --- a/ui/kbd-state.c +++ b/ui/kbd-state.c @@ -42,14 +42,18 @@ void qkbd_state_key_event(QKbdState *kbd, QKeyCode qcod= e, bool down) { bool state =3D test_bit(qcode, kbd->keys); =20 - if (state =3D=3D down) { + if (down =3D=3D false /* got key-up event */ && + state =3D=3D false /* key is not pressed */) { /* - * Filter out events which don't change the keyboard state. + * Filter out suspicious key-up events. * - * Most notably this allows to simply send along all key-up - * events, and this function will filter out everything where - * the corresponding key-down event wasn't send to the guest, - * for example due to being a host hotkey. + * This allows simply sending along all key-up events, and + * this function will filter out everything where the + * corresponding key-down event wasn't sent to the guest, for + * example due to being a host hotkey. + * + * Note that key-down events on already pressed keys are *not* + * suspicious, those are keyboard autorepeat events. */ return; } --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550822344179406.2490393880453; Thu, 21 Feb 2019 23:59:04 -0800 (PST) Received: from localhost ([127.0.0.1]:45974 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5jP-00028Y-0J for importer@patchew.org; Fri, 22 Feb 2019 02:58:51 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60398) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eM-0006xM-Ml for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eL-0001Wg-8g for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:38 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57618) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eK-0001MA-T5 for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:37 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 437DD356EA for ; Fri, 22 Feb 2019 07:53:29 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 16E7E1018A01; Fri, 22 Feb 2019 07:53:26 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 3705C11AB7; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:13 +0100 Message-Id: <20190222075326.9850-3-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Fri, 22 Feb 2019 07:53:29 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 02/15] spice: set device address and device display ID in QXL interface X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Markus Armbruster , Gerd Hoffmann , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , =?UTF-8?q?Luk=C3=A1=C5=A1=20Hr=C3=A1zk=C3=BD?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Luk=C3=A1=C5=A1 Hr=C3=A1zk=C3=BD Calls the new SPICE QXL interface function spice_qxl_set_device_info to set the hardware address of the graphics device represented by the QXL interface (e.g. a PCI path) and the device display IDs (the IDs of the device's monitors that belong to this QXL interface). Also stops using the deprecated spice_qxl_set_max_monitors, the new interface function replaces it. Signed-off-by: Luk=C3=A1=C5=A1 Hr=C3=A1zk=C3=BD Message-Id: <20190215150919.8263-1-lhrazky@redhat.com> Signed-off-by: Gerd Hoffmann --- include/ui/spice-display.h | 4 ++++ hw/display/qxl.c | 14 ++++++++++++- ui/spice-core.c | 51 ++++++++++++++++++++++++++++++++++++++++++= ++++ ui/spice-display.c | 11 ++++++++++ 4 files changed, 79 insertions(+), 1 deletion(-) diff --git a/include/ui/spice-display.h b/include/ui/spice-display.h index 87a84a59d4e0..53c3612c3202 100644 --- a/include/ui/spice-display.h +++ b/include/ui/spice-display.h @@ -179,3 +179,7 @@ void qemu_spice_wakeup(SimpleSpiceDisplay *ssd); void qemu_spice_display_start(void); void qemu_spice_display_stop(void); int qemu_spice_display_is_running(SimpleSpiceDisplay *ssd); + +bool qemu_spice_fill_device_address(QemuConsole *con, + char *device_address, + size_t size); diff --git a/hw/display/qxl.c b/hw/display/qxl.c index da8fd5a40a14..c8ce5781e037 100644 --- a/hw/display/qxl.c +++ b/hw/display/qxl.c @@ -276,7 +276,8 @@ static void qxl_spice_monitors_config_async(PCIQXLDevic= e *qxl, int replay) QXL_COOKIE_TYPE_POST_LOAD_MONITORS_CONFIG, 0)); } else { -#if SPICE_SERVER_VERSION >=3D 0x000c06 /* release 0.12.6 */ +/* >=3D release 0.12.6, < release 0.14.2 */ +#if SPICE_SERVER_VERSION >=3D 0x000c06 && SPICE_SERVER_VERSION < 0x000e02 if (qxl->max_outputs) { spice_qxl_set_max_monitors(&qxl->ssd.qxl, qxl->max_outputs); } @@ -2188,6 +2189,17 @@ static void qxl_realize_common(PCIQXLDevice *qxl, Er= ror **errp) SPICE_INTERFACE_QXL_MAJOR, SPICE_INTERFACE_QXL_MINOR); return; } + +#if SPICE_SERVER_VERSION >=3D 0x000e02 /* release 0.14.2 */ + char device_address[256] =3D ""; + if (qemu_spice_fill_device_address(qxl->vga.con, device_address, 256))= { + spice_qxl_set_device_info(&qxl->ssd.qxl, + device_address, + 0, + qxl->max_outputs); + } +#endif + qemu_add_vm_change_state_handler(qxl_vm_change_state_handler, qxl); =20 qxl->update_irq =3D qemu_bh_new(qxl_update_irq_bh, qxl); diff --git a/ui/spice-core.c b/ui/spice-core.c index a40fb2c00dab..37fae3c42405 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -34,6 +34,7 @@ #include "qemu/option.h" #include "migration/misc.h" #include "hw/hw.h" +#include "hw/pci/pci_bus.h" #include "ui/spice-display.h" =20 /* core bits */ @@ -863,6 +864,56 @@ bool qemu_spice_have_display_interface(QemuConsole *co= n) return false; } =20 +/* + * Recursively (in reverse order) appends addresses of PCI devices as it m= oves + * up in the PCI hierarchy. + * + * @returns true on success, false when the buffer wasn't large enough + */ +static bool append_pci_address(char *buf, size_t buf_size, const PCIDevice= *pci) +{ + PCIBus *bus =3D pci_get_bus(pci); + /* + * equivalent to if (!pci_bus_is_root(bus)), but the function is not b= uilt + * with PCI_CONFIG=3Dn, avoid using an #ifdef by checking directly + */ + if (bus->parent_dev !=3D NULL) { + append_pci_address(buf, buf_size, bus->parent_dev); + } + + size_t len =3D strlen(buf); + ssize_t written =3D snprintf(buf + len, buf_size - len, "/%02x.%x", + PCI_SLOT(pci->devfn), PCI_FUNC(pci->devfn)); + + return written > 0 && written < buf_size - len; +} + +bool qemu_spice_fill_device_address(QemuConsole *con, + char *device_address, + size_t size) +{ + DeviceState *dev =3D DEVICE(object_property_get_link(OBJECT(con), + "device", + &error_abort)); + PCIDevice *pci =3D (PCIDevice *) object_dynamic_cast(OBJECT(dev), + TYPE_PCI_DEVICE); + + if (pci =3D=3D NULL) { + warn_report("Setting device address of a display device to SPICE: " + "Not a PCI device."); + return false; + } + + strncpy(device_address, "pci/0000", size); + if (!append_pci_address(device_address, size, pci)) { + warn_report("Setting device address of a display device to SPICE: " + "Too many PCI devices in the chain."); + return false; + } + + return true; +} + int qemu_spice_add_display_interface(QXLInstance *qxlin, QemuConsole *con) { if (g_slist_find(spice_consoles, con)) { diff --git a/ui/spice-display.c b/ui/spice-display.c index aea6f6ebceda..a5e26479a866 100644 --- a/ui/spice-display.c +++ b/ui/spice-display.c @@ -1147,6 +1147,17 @@ static void qemu_spice_display_init_one(QemuConsole = *con) =20 ssd->qxl.base.sif =3D &dpy_interface.base; qemu_spice_add_display_interface(&ssd->qxl, con); + +#if SPICE_SERVER_VERSION >=3D 0x000e02 /* release 0.14.2 */ + char device_address[256] =3D ""; + if (qemu_spice_fill_device_address(con, device_address, 256)) { + spice_qxl_set_device_info(&ssd->qxl, + device_address, + qemu_console_get_head(con), + 1); + } +#endif + qemu_spice_create_host_memslot(ssd); =20 register_displaychangelistener(&ssd->dcl); --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550822648614864.3563942431125; Fri, 22 Feb 2019 00:04:08 -0800 (PST) Received: from localhost ([127.0.0.1]:46058 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5oR-0006IQ-M7 for importer@patchew.org; Fri, 22 Feb 2019 03:04:03 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60548) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eQ-0006yE-BO for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eO-0001cF-OK for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:42 -0500 Received: from mx1.redhat.com ([209.132.183.28]:50814) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eN-0001Sg-Bc for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:40 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 39FC63082A51 for ; Fri, 22 Feb 2019 07:53:33 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1B00F5D704; Fri, 22 Feb 2019 07:53:27 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 3EF9F11AB8; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:14 +0100 Message-Id: <20190222075326.9850-4-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.45]); Fri, 22 Feb 2019 07:53:33 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 03/15] sdl2: drop qemu_input_event_send_key_qcode call X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Gerd Hoffmann , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" qkbd_state_key_event() does that for us. Fixes: 07333e1ca3 kbd-state: use state tracker for sdl2 Reported-by: BALATON Zoltan Signed-off-by: Gerd Hoffmann Tested-by: BALATON Zoltan Message-id: 20190208072744.10687-1-kraxel@redhat.com --- ui/sdl2-input.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/ui/sdl2-input.c b/ui/sdl2-input.c index 664364a5e5be..fb345f45fb28 100644 --- a/ui/sdl2-input.c +++ b/ui/sdl2-input.c @@ -54,8 +54,5 @@ void sdl2_process_key(struct sdl2_console *scon, break; } } - } else { - qemu_input_event_send_key_qcode(con, qcode, - ev->type =3D=3D SDL_KEYDOWN); } } --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 15508224879581007.5691739320183; Fri, 22 Feb 2019 00:01:27 -0800 (PST) Received: from localhost ([127.0.0.1]:46035 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5ls-0004UW-Rj for importer@patchew.org; Fri, 22 Feb 2019 03:01:24 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60456) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eO-0006xv-7q for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eM-0001YE-4f for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:40 -0500 Received: from mx1.redhat.com ([209.132.183.28]:39122) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eL-0001Ko-HG for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:37 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 97278307D977 for ; Fri, 22 Feb 2019 07:53:27 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 1B49D60BF2; Fri, 22 Feb 2019 07:53:26 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 473E816E03; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:15 +0100 Message-Id: <20190222075326.9850-5-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.48]); Fri, 22 Feb 2019 07:53:27 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 04/15] ui/gtk: Fix the license information X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Thomas Huth , Markus Armbruster , Gerd Hoffmann , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Thomas Huth The license information in this file is very messy. A short note at the beginning says GPL first, but the long boilerplate code then talks about "GNU Lesser General Public License version 2.0". First, there is no such version of the "GNU Lesser GPL", it only started with version 2.1. In version 2.0, it was still called "GNU Library GPL" instead. Second, you can easily get the license of this file wrong if you only quickly glance at the long boilerplate code. Anyway, looking at the text of the LGPL (see COPYING.LIB in the top directory), the license clearly states in section "3." that one should rather replace the license information with the GPL information in such a case of a mixture instead. Thus let's clean up the confusing statements and use the proper GPL text only. Signed-off-by: Thomas Huth Reviewed-by: Daniel P. Berrang=C3=A9 Message-id: 1550731902-28842-1-git-send-email-thuth@redhat.com [ kraxel: s/v2/v2+/ as requested by Daniel ] Signed-off-by: Gerd Hoffmann --- ui/gtk.c | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/ui/gtk.c b/ui/gtk.c index 949b143e4e4e..e96e15435a2f 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -6,29 +6,25 @@ * Authors: * Anthony Liguori * - * This work is licensed under the terms of the GNU GPL, version 2 or late= r. - * See the COPYING file in the top-level directory. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. * - * Portions from gtk-vnc: + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + * + * Portions from gtk-vnc (originally licensed under the LGPL v2+): * * GTK VNC Widget * * Copyright (C) 2006 Anthony Liguori * Copyright (C) 2009-2010 Daniel P. Berrange - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.0 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-13= 01 USA */ =20 #define GETTEXT_PACKAGE "qemu" --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550822344110982.097551400281; Thu, 21 Feb 2019 23:59:04 -0800 (PST) Received: from localhost ([127.0.0.1]:45978 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5jT-0002BY-4f for importer@patchew.org; Fri, 22 Feb 2019 02:58:55 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60667) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eW-00072c-Cf for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:49 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eP-0001dP-Gt for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:44 -0500 Received: from mx1.redhat.com ([209.132.183.28]:44602) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eO-0001Sa-1c for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:41 -0500 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3511F8765E for ; Fri, 22 Feb 2019 07:53:33 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3A55A5D705; Fri, 22 Feb 2019 07:53:28 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 4F7E416E05; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:16 +0100 Message-Id: <20190222075326.9850-6-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Fri, 22 Feb 2019 07:53:33 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 05/15] char/spice: trigger HUP event X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Gerd Hoffmann , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Marc-Andr=C3=A9 Lureau Inform the front-end of disconnected state (spice client disconnected). This will wakeup the source handler immediately, so it can detect the disconnection asap. Signed-off-by: Marc-Andr=C3=A9 Lureau Tested-by: Victor Toso Message-id: 20190221110703.5775-2-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann --- chardev/spice.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/chardev/spice.c b/chardev/spice.c index 173c257949c0..c2baeb5461fa 100644 --- a/chardev/spice.c +++ b/chardev/spice.c @@ -148,15 +148,25 @@ static void vmc_unregister_interface(SpiceChardev *sc= d) static gboolean spice_char_source_prepare(GSource *source, gint *timeout) { SpiceCharSource *src =3D (SpiceCharSource *)source; + Chardev *chr =3D CHARDEV(src->scd); =20 *timeout =3D -1; =20 + if (!chr->be_open) { + return true; + } + return !src->scd->blocked; } =20 static gboolean spice_char_source_check(GSource *source) { SpiceCharSource *src =3D (SpiceCharSource *)source; + Chardev *chr =3D CHARDEV(src->scd); + + if (!chr->be_open) { + return true; + } =20 return !src->scd->blocked; } @@ -164,9 +174,12 @@ static gboolean spice_char_source_check(GSource *sourc= e) static gboolean spice_char_source_dispatch(GSource *source, GSourceFunc callback, gpointer user_data) { + SpiceCharSource *src =3D (SpiceCharSource *)source; + Chardev *chr =3D CHARDEV(src->scd); GIOFunc func =3D (GIOFunc)callback; + GIOCondition cond =3D chr->be_open ? G_IO_OUT : G_IO_HUP; =20 - return func(NULL, G_IO_OUT, user_data); + return func(NULL, cond, user_data); } =20 static GSourceFuncs SpiceCharSourceFuncs =3D { --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550822984534911.2653601839799; Fri, 22 Feb 2019 00:09:44 -0800 (PST) Received: from localhost ([127.0.0.1]:46127 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5to-0001XI-B2 for importer@patchew.org; Fri, 22 Feb 2019 03:09:36 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60679) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eZ-00076c-SG for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:52 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eO-0001b9-1n for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:44 -0500 Received: from mx1.redhat.com ([209.132.183.28]:54444) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eM-0001LS-JZ for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:39 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B3767A911 for ; Fri, 22 Feb 2019 07:53:28 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3C8D860BF2; Fri, 22 Feb 2019 07:53:28 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 5904216E07; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:17 +0100 Message-Id: <20190222075326.9850-7-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Fri, 22 Feb 2019 07:53:28 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 06/15] char/spice: discard write() if backend is disconnected X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Gerd Hoffmann , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Marc-Andr=C3=A9 Lureau Most chardev backend handle write() as discarded data if underlying system is disconnected. For unknown historical reasons, the Spice backend has "reliable" write: it will wait until the client end is reconnected to do further successful write(). To decide whether it make sense to wait until the client is reconnected (or queue the writes), let's review Spice chardev usage and handling of a disconnected client: * spice vdagent The agents reopen the virtio port on disconnect. In qemu side, virtio_serial_close() will also discard pending data. * usb redirection A disconnect creates a device disconnection. * smartcard emulation Data is discarded in passthru_apdu_from_guest(). (Spice doesn't explicitly open the smartcard char device until upcoming 0.14.2, commit 69a5cfc74131ec0459f2eb5a231139f5a69a8037) * spice webdavd The daemon will restart the service, and reopen the virtio port. * spice ports (serial console, qemu monitor..) Depends on the associated device or usage. - serial, may be throttled or discarded on write, depending on device - QMP/HMP monitor have some CLOSED event handling, but want to flush the write, which will finish when a new client connects. On disconnect/reconnect, the client starts with fresh sessions. If it is a seamless migration, the client disconnects after the source migrated. The handling of source disconnect in qemu is thus irrelevant for the Spice session migration. For all these use cases, it is better to discard writes when the client is disconnected, and require the vm-side device/agent to behave correctly on CHR_EVENT_CLOSED, to stop reading and writing from the spice chardev. Signed-off-by: Marc-Andr=C3=A9 Lureau Tested-by: Victor Toso Message-id: 20190221110703.5775-3-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann --- chardev/spice.c | 12 ++++++++++++ chardev/trace-events | 1 + 2 files changed, 13 insertions(+) diff --git a/chardev/spice.c b/chardev/spice.c index c2baeb5461fa..c68e60115bb1 100644 --- a/chardev/spice.c +++ b/chardev/spice.c @@ -208,6 +208,12 @@ static int spice_chr_write(Chardev *chr, const uint8_t= *buf, int len) int read_bytes; =20 assert(s->datalen =3D=3D 0); + + if (!chr->be_open) { + trace_spice_chr_discard_write(len); + return len; + } + s->datapos =3D buf; s->datalen =3D len; spice_server_char_device_wakeup(&s->sin); @@ -300,6 +306,12 @@ static void qemu_chr_open_spice_vmc(Chardev *chr, } =20 *be_opened =3D false; +#if SPICE_SERVER_VERSION < 0x000e02 + /* Spice < 0.14.2 doesn't explicitly open smartcard chardev */ + if (strcmp(type, "smartcard") =3D=3D 0) { + *be_opened =3D true; + } +#endif chr_open(chr, type); } =20 diff --git a/chardev/trace-events b/chardev/trace-events index d0e5f3bbc1a7..b8a759634420 100644 --- a/chardev/trace-events +++ b/chardev/trace-events @@ -10,6 +10,7 @@ wct_cmd_other(const char *cmd) "%s" wct_speed(int speed) "%d" =20 # chardev/spice.c +spice_chr_discard_write(int len) "spice chr write discarded %d" spice_vmc_write(ssize_t out, int len) "spice wrote %zd of requested %d" spice_vmc_read(int bytes, int len) "spice read %d of requested %d" spice_vmc_register_interface(void *scd) "spice vmc registered interface %p" --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550822160266108.6423535793765; Thu, 21 Feb 2019 23:56:00 -0800 (PST) Received: from localhost ([127.0.0.1]:45953 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5ga-0008EN-8A for importer@patchew.org; Fri, 22 Feb 2019 02:55:56 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60515) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eP-0006y9-FU for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eN-0001Zq-Bg for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:41 -0500 Received: from mx1.redhat.com ([209.132.183.28]:42146) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eM-0001R5-EJ for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:39 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CBF8430715CA for ; Fri, 22 Feb 2019 07:53:32 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 586D95C5E0; Fri, 22 Feb 2019 07:53:28 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 610CD16E08; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:18 +0100 Message-Id: <20190222075326.9850-8-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Fri, 22 Feb 2019 07:53:32 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 07/15] spice: avoid spice runtime assert X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Gerd Hoffmann , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Marc-Andr=C3=A9 Lureau The Spice server doesn't like to be started or stopped twice . It aborts with: (process:6191): Spice-ERROR **: 19:29:35.912: red-worker.c:623:handle_dev_s= tart: assertion `!worker->running' failed It's easy to avoid that situation since qemu spice_display_is_running tracks the server state. After the commit "spice: do not stop spice if VM is paused", it will be possible to pause and resume the VM, and this will call qemu_spice_display_start() twice. The easiest is to add a check for spice_display_is_running with this patch to avoid the assert. Signed-off-by: Marc-Andr=C3=A9 Lureau Tested-by: Victor Toso Message-id: 20190221110703.5775-4-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann --- ui/spice-core.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ui/spice-core.c b/ui/spice-core.c index 37fae3c42405..784fddff7d45 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -972,12 +972,20 @@ int qemu_spice_display_add_client(int csock, int skip= auth, int tls) =20 void qemu_spice_display_start(void) { + if (spice_display_is_running) { + return; + } + spice_display_is_running =3D true; spice_server_vm_start(spice_server); } =20 void qemu_spice_display_stop(void) { + if (!spice_display_is_running) { + return; + } + spice_server_vm_stop(spice_server); spice_display_is_running =3D false; } --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550822783596137.57520050738844; Fri, 22 Feb 2019 00:06:23 -0800 (PST) Received: from localhost ([127.0.0.1]:46101 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5qb-0007fI-Jg for importer@patchew.org; Fri, 22 Feb 2019 03:06:17 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60644) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eS-0006ys-Sm for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eQ-0001eL-8i for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:43 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57682) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eN-0001Qh-Pl for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:41 -0500 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B8A46300441D for ; Fri, 22 Feb 2019 07:53:32 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5B319600CD; Fri, 22 Feb 2019 07:53:28 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 693ED16E0A; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:19 +0100 Message-Id: <20190222075326.9850-9-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Fri, 22 Feb 2019 07:53:32 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 08/15] spice: merge options lists X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Gerd Hoffmann , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Marc-Andr=C3=A9 Lureau Passing several -spice options to qemu command line, or calling several time qemu_opts_set() will ignore all but the first option list. Since the spice server is a singleton, it makes sense to merge all the options, the last value being the one taken into account. This changes the behaviour from, for ex: $ qemu... -spice port=3D5900 -spice port=3D5901 -> port: 5900 to: $ qemu... -spice port=3D5900 -spice port=3D5901 -> port: 5901 (if necessary we could instead produce an error when an option is given twice, although this makes handling default values and such more complicated) Signed-off-by: Marc-Andr=C3=A9 Lureau Tested-by: Victor Toso Message-id: 20190221110703.5775-5-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann --- ui/spice-core.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/spice-core.c b/ui/spice-core.c index 784fddff7d45..1cc996027719 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -398,6 +398,7 @@ static SpiceChannelList *qmp_query_spice_channels(void) static QemuOptsList qemu_spice_opts =3D { .name =3D "spice", .head =3D QTAILQ_HEAD_INITIALIZER(qemu_spice_opts.head), + .merge_lists =3D true, .desc =3D { { .name =3D "port", --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 155082215834717.95270214382583; Thu, 21 Feb 2019 23:55:58 -0800 (PST) Received: from localhost ([127.0.0.1]:45948 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5gY-0008Cc-3W for importer@patchew.org; Fri, 22 Feb 2019 02:55:54 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60481) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eO-0006xw-J5 for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eN-0001Za-8z for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:40 -0500 Received: from mx1.redhat.com ([209.132.183.28]:54446) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eM-0001MV-D8 for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:39 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 7D7D9A7EF for ; Fri, 22 Feb 2019 07:53:29 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3853760BE6; Fri, 22 Feb 2019 07:53:29 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 715AE16E15; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:20 +0100 Message-Id: <20190222075326.9850-10-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Fri, 22 Feb 2019 07:53:29 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 09/15] spice: do not stop spice if VM is paused X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Gerd Hoffmann , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Marc-Andr=C3=A9 Lureau spice_server_vm_start/stop() was added to help migration state (commit f5bb039c6d97ef3e664094eab3c9a4dc1824ed73). However, a paused VM could keep running the spice server. This will allow a Spice client to keep sending commands to a spice chardev. This allows to stop/cont a VM from a Spice monitor port. Character devices (vdagent/usb/smartcard/..) should not read from Spice when the VM is paused. Signed-off-by: Marc-Andr=C3=A9 Lureau Tested-by: Victor Toso Message-id: 20190221110703.5775-6-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann --- ui/spice-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/spice-core.c b/ui/spice-core.c index 1cc996027719..4d384974ca34 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -628,7 +628,7 @@ static void vm_change_state_handler(void *opaque, int r= unning, { if (running) { qemu_spice_display_start(); - } else { + } else if (state !=3D RUN_STATE_PAUSED) { qemu_spice_display_stop(); } } --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550822648083502.5523381377885; Fri, 22 Feb 2019 00:04:08 -0800 (PST) Received: from localhost ([127.0.0.1]:46056 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5oO-0006HT-Pw for importer@patchew.org; Fri, 22 Feb 2019 03:04:00 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60573) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eS-0006yG-8Y for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eP-0001cs-4Z for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:42 -0500 Received: from mx1.redhat.com ([209.132.183.28]:39126) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eN-0001Me-Ly for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:41 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1BA0F307D985 for ; Fri, 22 Feb 2019 07:53:30 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 97ED760BE6; Fri, 22 Feb 2019 07:53:29 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 7AE2A16E16; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:21 +0100 Message-Id: <20190222075326.9850-11-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.48]); Fri, 22 Feb 2019 07:53:30 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 10/15] char: move SpiceChardev and open_spice_port() to spice.h header X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Gerd Hoffmann , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Marc-Andr=C3=A9 Lureau This will allow easier subclassing of SpiceChardev, in upcoming "display: add -display spice-app launching external application" patch. Signed-off-by: Marc-Andr=C3=A9 Lureau Tested-by: Victor Toso Message-id: 20190221110703.5775-7-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann --- include/chardev/spice.h | 27 +++++++++++++++++++++++++++ chardev/spice.c | 28 +++++----------------------- 2 files changed, 32 insertions(+), 23 deletions(-) create mode 100644 include/chardev/spice.h diff --git a/include/chardev/spice.h b/include/chardev/spice.h new file mode 100644 index 000000000000..6431da320599 --- /dev/null +++ b/include/chardev/spice.h @@ -0,0 +1,27 @@ +#ifndef CHARDEV_SPICE_H_ +#define CHARDEV_SPICE_H_ + +#include +#include "chardev/char-fe.h" + +typedef struct SpiceChardev { + Chardev parent; + + SpiceCharDeviceInstance sin; + bool active; + bool blocked; + const uint8_t *datapos; + int datalen; + QLIST_ENTRY(SpiceChardev) next; +} SpiceChardev; + +#define TYPE_CHARDEV_SPICE "chardev-spice" +#define TYPE_CHARDEV_SPICEVMC "chardev-spicevmc" +#define TYPE_CHARDEV_SPICEPORT "chardev-spiceport" + +#define SPICE_CHARDEV(obj) OBJECT_CHECK(SpiceChardev, (obj), TYPE_CHARDEV_= SPICE) + +void qemu_chr_open_spice_port(Chardev *chr, ChardevBackend *backend, + bool *be_opened, Error **errp); + +#endif diff --git a/chardev/spice.c b/chardev/spice.c index c68e60115bb1..2202d50eee1e 100644 --- a/chardev/spice.c +++ b/chardev/spice.c @@ -2,30 +2,12 @@ #include "trace.h" #include "ui/qemu-spice.h" #include "chardev/char.h" +#include "chardev/spice.h" #include "qapi/error.h" #include "qemu/error-report.h" #include "qemu/option.h" -#include #include =20 - -typedef struct SpiceChardev { - Chardev parent; - - SpiceCharDeviceInstance sin; - bool active; - bool blocked; - const uint8_t *datapos; - int datalen; - QLIST_ENTRY(SpiceChardev) next; -} SpiceChardev; - -#define TYPE_CHARDEV_SPICE "chardev-spice" -#define TYPE_CHARDEV_SPICEVMC "chardev-spicevmc" -#define TYPE_CHARDEV_SPICEPORT "chardev-spiceport" - -#define SPICE_CHARDEV(obj) OBJECT_CHECK(SpiceChardev, (obj), TYPE_CHARDEV_= SPICE) - typedef struct SpiceCharSource { GSource source; SpiceChardev *scd; @@ -315,10 +297,10 @@ static void qemu_chr_open_spice_vmc(Chardev *chr, chr_open(chr, type); } =20 -static void qemu_chr_open_spice_port(Chardev *chr, - ChardevBackend *backend, - bool *be_opened, - Error **errp) +void qemu_chr_open_spice_port(Chardev *chr, + ChardevBackend *backend, + bool *be_opened, + Error **errp) { ChardevSpicePort *spiceport =3D backend->u.spiceport.data; const char *name =3D spiceport->fqdn; --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 15508227846361012.2383080285184; Fri, 22 Feb 2019 00:06:24 -0800 (PST) Received: from localhost ([127.0.0.1]:46103 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5qd-0007gq-If for importer@patchew.org; Fri, 22 Feb 2019 03:06:19 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60530) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eQ-0006yA-41 for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eO-0001bf-Ce for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:41 -0500 Received: from mx1.redhat.com ([209.132.183.28]:59596) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eN-0001Rb-3c for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:40 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DFDEDE6A68 for ; Fri, 22 Feb 2019 07:53:32 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id F21105C28F; Fri, 22 Feb 2019 07:53:29 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 8311E16E17; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:22 +0100 Message-Id: <20190222075326.9850-12-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.38]); Fri, 22 Feb 2019 07:53:32 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 11/15] char: register spice ports after spice started X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Gerd Hoffmann , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Marc-Andr=C3=A9 Lureau Spice port registration is delayed until the server is started. But ports created after are not being registered. If the server is already started, do vmc_register_interface() to register it from qemu_chr_open_spice_port(). Signed-off-by: Marc-Andr=C3=A9 Lureau Tested-by: Victor Toso Message-id: 20190221110703.5775-8-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann --- chardev/spice.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/chardev/spice.c b/chardev/spice.c index 2202d50eee1e..22c30ae833dd 100644 --- a/chardev/spice.c +++ b/chardev/spice.c @@ -316,6 +316,11 @@ void qemu_chr_open_spice_port(Chardev *chr, *be_opened =3D false; s =3D SPICE_CHARDEV(chr); s->sin.portname =3D g_strdup(name); + + if (using_spice) { + /* spice server already created */ + vmc_register_interface(s); + } } =20 void qemu_spice_register_ports(void) --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550822344095923.555371085467; Thu, 21 Feb 2019 23:59:04 -0800 (PST) Received: from localhost ([127.0.0.1]:45980 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5jW-0002EK-EU for importer@patchew.org; Fri, 22 Feb 2019 02:58:58 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60542) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eQ-0006yC-8x for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eN-0001ar-S0 for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:41 -0500 Received: from mx1.redhat.com ([209.132.183.28]:51368) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eM-0001Mo-Up for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:39 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4FE7EC057F2F for ; Fri, 22 Feb 2019 07:53:30 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0257D5D9D5; Fri, 22 Feb 2019 07:53:30 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 8B54816E27; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:23 +0100 Message-Id: <20190222075326.9850-13-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Fri, 22 Feb 2019 07:53:30 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 12/15] build-sys: add gio-2.0 check X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Gerd Hoffmann , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Marc-Andr=C3=A9 Lureau GIO is required for the "-display spice-app" backend. Signed-off-by: Marc-Andr=C3=A9 Lureau Tested-by: Victor Toso Message-id: 20190221110703.5775-9-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann --- configure | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/configure b/configure index a61682c3c727..05d72f1c565b 100755 --- a/configure +++ b/configure @@ -3503,6 +3503,14 @@ for i in $glib_modules; do fi done =20 +if $pkg_config --atleast-version=3D$glib_req_ver gio-2.0; then + gio=3Dyes + gio_cflags=3D$($pkg_config --cflags gio-2.0) + gio_libs=3D$($pkg_config --libs gio-2.0) +else + gio=3Dno +fi + # Sanity check that the current size_t matches the # size that glib thinks it should be. This catches # problems on multi-arch where people try to build @@ -6520,6 +6528,11 @@ if test "$gtk" =3D "yes" ; then echo "CONFIG_GTK_GL=3Dy" >> $config_host_mak fi fi +if test "$gio" =3D "yes" ; then + echo "CONFIG_GIO=3Dy" >> $config_host_mak + echo "GIO_CFLAGS=3D$gio_cflags" >> $config_host_mak + echo "GIO_LIBS=3D$gio_libs" >> $config_host_mak +fi echo "CONFIG_TLS_PRIORITY=3D\"$tls_priority\"" >> $config_host_mak if test "$gnutls" =3D "yes" ; then echo "CONFIG_GNUTLS=3Dy" >> $config_host_mak --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550822155826533.7244507677526; Thu, 21 Feb 2019 23:55:55 -0800 (PST) Received: from localhost ([127.0.0.1]:45946 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5gR-00089Z-VJ for importer@patchew.org; Fri, 22 Feb 2019 02:55:48 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60391) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eM-0006xL-FA for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:39 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eL-0001Ws-Da for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:38 -0500 Received: from mx1.redhat.com ([209.132.183.28]:57662) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eL-0001Mi-37 for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:37 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 2BEAE3002EE2 for ; Fri, 22 Feb 2019 07:53:30 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id DE66760BF2; Fri, 22 Feb 2019 07:53:29 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 93A2716E28; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:24 +0100 Message-Id: <20190222075326.9850-14-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Fri, 22 Feb 2019 07:53:30 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 13/15] qapi: document DisplayType enum X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Gerd Hoffmann , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Marc-Andr=C3=A9 Lureau Signed-off-by: Marc-Andr=C3=A9 Lureau Tested-by: Victor Toso Message-id: 20190221110703.5775-10-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann --- qapi/ui.json | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/qapi/ui.json b/qapi/ui.json index 7d9c4bddaf12..7702ddf583a1 100644 --- a/qapi/ui.json +++ b/qapi/ui.json @@ -1085,6 +1085,31 @@ # # Display (user interface) type. # +# @default: The default user interface, selecting from the first available +# of gtk, sdl, cocoa, and vnc. +# +# @none: No user interface or video output display. The guest will +# still see an emulated graphics card, but its output will not +# be displayed to the QEMU user. +# +# @gtk: The GTK user interface. +# +# @sdl: The SDL user interface. +# +# @egl-headless: No user interface, offload GL operations to a local +# DRI device. Graphical display need to be paired with +# VNC or Spice. (Since 3.1) +# +# @curses: Display video output via curses. For graphics device +# models which support a text mode, QEMU can display this +# output using a curses/ncurses interface. Nothing is +# displayed when the graphics device is in graphical mode or +# if the graphics device does not support a text +# mode. Generally only the VGA device models support text +# mode. +# +# @cocoa: The Cocoa user interface. +# # Since: 2.12 # ## --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550822487523383.4758518028698; Fri, 22 Feb 2019 00:01:27 -0800 (PST) Received: from localhost ([127.0.0.1]:46033 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5lr-0004Ts-D0 for importer@patchew.org; Fri, 22 Feb 2019 03:01:23 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60429) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eN-0006xq-I4 for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eM-0001Y7-33 for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:39 -0500 Received: from mx1.redhat.com ([209.132.183.28]:47980) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eL-0001O0-L8 for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:37 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9E8AA70D61 for ; Fri, 22 Feb 2019 07:53:30 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 510341001E6D; Fri, 22 Feb 2019 07:53:30 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 9BB2A16E29; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:25 +0100 Message-Id: <20190222075326.9850-15-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Fri, 22 Feb 2019 07:53:30 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 14/15] spice: use a default name for the server X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Gerd Hoffmann , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Marc-Andr=C3=A9 Lureau If no -name is given, let's use a friendly "QEMU version" server name. This is sometime exposed on spice client side, for example on remote-viewer title. Signed-off-by: Marc-Andr=C3=A9 Lureau Tested-by: Victor Toso Message-id: 20190221110703.5775-11-marcandre.lureau@redhat.com Signed-off-by: Gerd Hoffmann --- ui/spice-core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ui/spice-core.c b/ui/spice-core.c index 4d384974ca34..0632c74e9fcb 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -785,7 +785,7 @@ void qemu_spice_init(void) =20 qemu_opt_foreach(opts, add_channel, &tls_port, &error_fatal); =20 - spice_server_set_name(spice_server, qemu_name); + spice_server_set_name(spice_server, qemu_name ?: "QEMU " QEMU_VERSION); spice_server_set_uuid(spice_server, (unsigned char *)&qemu_uuid); =20 seamless_migration =3D qemu_opt_get_bool(opts, "seamless-migration", 0= ); --=20 2.9.3 From nobody Sun Nov 9 11:39:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1550822981789685.4070603623227; Fri, 22 Feb 2019 00:09:41 -0800 (PST) Received: from localhost ([127.0.0.1]:46125 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5tm-0001V2-Hc for importer@patchew.org; Fri, 22 Feb 2019 03:09:34 -0500 Received: from eggs.gnu.org ([209.51.188.92]:60578) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gx5eS-0006yH-8a for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:45 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gx5eN-0001aG-IW for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:42 -0500 Received: from mx1.redhat.com ([209.132.183.28]:58270) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gx5eM-0001OW-Fk for qemu-devel@nongnu.org; Fri, 22 Feb 2019 02:53:39 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 102C230084BD for ; Fri, 22 Feb 2019 07:53:31 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-228.ams2.redhat.com [10.36.116.228]) by smtp.corp.redhat.com (Postfix) with ESMTP id 7BD5860BE6; Fri, 22 Feb 2019 07:53:30 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id A844A16E2B; Fri, 22 Feb 2019 08:53:26 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 08:53:26 +0100 Message-Id: <20190222075326.9850-16-kraxel@redhat.com> In-Reply-To: <20190222075326.9850-1-kraxel@redhat.com> References: <20190222075326.9850-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Fri, 22 Feb 2019 07:53:31 +0000 (UTC) Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 15/15] display: add -display spice-app launching a Spice client X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , Gerd Hoffmann , Markus Armbruster , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Marc-Andr=C3=A9 Lureau Add a new display backend that will configure Spice to allow a remote client to control QEMU in a similar fashion as other QEMU display backend/UI like GTK. For this to work, it will set up Spice server with a unix socket, and register a VC chardev that will be exposed as Spice ports. A QMP monitor is also exposed as a Spice port, this allows the remote client fuller qemu control and state handling. - doesn't handle VC set_echo() - this doesn't seem a strong requirement, very few front-end use it - spice options can be tweaked with other -spice arguments - Windows support shouldn't be hard to do, but will probably use a TCP port instead - we may want to watch the child process to quit automatically if it crashed Signed-off-by: Marc-Andr=C3=A9 Lureau Tested-by: Victor Toso Message-id: 20190221110703.5775-12-marcandre.lureau@redhat.com [ kraxel: squash incremental fix ] Signed-off-by: Gerd Hoffmann --- ui/spice-app.c | 202 +++++++++++++++++++++++++++++++++++++++++++++++++++= ++++ qapi/ui.json | 7 +- qemu-options.hx | 5 ++ ui/Makefile.objs | 5 ++ 4 files changed, 218 insertions(+), 1 deletion(-) create mode 100644 ui/spice-app.c diff --git a/ui/spice-app.c b/ui/spice-app.c new file mode 100644 index 000000000000..925b27b708bb --- /dev/null +++ b/ui/spice-app.c @@ -0,0 +1,202 @@ +/* + * QEMU external Spice client display driver + * + * Copyright (c) 2018 Marc-Andr=C3=A9 Lureau + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ +#include "qemu/osdep.h" + +#include + +#include "qemu-common.h" +#include "ui/console.h" +#include "qemu/config-file.h" +#include "qemu/option.h" +#include "qemu/cutils.h" +#include "qapi/error.h" +#include "io/channel-command.h" +#include "chardev/spice.h" +#include "sysemu/sysemu.h" + +static const char *tmp_dir; +static char *app_dir; +static char *sock_path; + +typedef struct VCChardev { + SpiceChardev parent; +} VCChardev; + +#define TYPE_CHARDEV_VC "chardev-vc" +#define VC_CHARDEV(obj) OBJECT_CHECK(VCChardev, (obj), TYPE_CHARDEV_VC) + +static ChardevBackend * +chr_spice_backend_new(void) +{ + ChardevBackend *be =3D g_new0(ChardevBackend, 1); + + be->type =3D CHARDEV_BACKEND_KIND_SPICEPORT; + be->u.spiceport.data =3D g_new0(ChardevSpicePort, 1); + + return be; +} + +static void vc_chr_open(Chardev *chr, + ChardevBackend *backend, + bool *be_opened, + Error **errp) +{ + ChardevBackend *be; + const char *fqdn =3D NULL; + + if (strstart(chr->label, "serial", NULL)) { + fqdn =3D "org.qemu.console.serial.0"; + } else if (strstart(chr->label, "parallel", NULL)) { + fqdn =3D "org.qemu.console.parallel.0"; + } else if (strstart(chr->label, "compat_monitor", NULL)) { + fqdn =3D "org.qemu.monitor.hmp.0"; + } + + be =3D chr_spice_backend_new(); + be->u.spiceport.data->fqdn =3D fqdn ? + g_strdup(fqdn) : g_strdup_printf("org.qemu.console.%s", chr->label= ); + qemu_chr_open_spice_port(chr, be, be_opened, errp); + qapi_free_ChardevBackend(be); +} + +static void vc_chr_set_echo(Chardev *chr, bool echo) +{ + /* TODO: set echo for frontends QMP and qtest */ +} + +static void char_vc_class_init(ObjectClass *oc, void *data) +{ + ChardevClass *cc =3D CHARDEV_CLASS(oc); + + cc->parse =3D qemu_chr_parse_vc; + cc->open =3D vc_chr_open; + cc->chr_set_echo =3D vc_chr_set_echo; +} + +static const TypeInfo char_vc_type_info =3D { + .name =3D TYPE_CHARDEV_VC, + .parent =3D TYPE_CHARDEV_SPICEPORT, + .instance_size =3D sizeof(VCChardev), + .class_init =3D char_vc_class_init, +}; + +static void spice_app_atexit(void) +{ + if (sock_path) { + unlink(sock_path); + } + if (tmp_dir) { + rmdir(tmp_dir); + } + g_free(sock_path); + g_free(app_dir); +} + +static void spice_app_display_early_init(DisplayOptions *opts) +{ + QemuOpts *qopts; + ChardevBackend *be =3D chr_spice_backend_new(); + GError *err =3D NULL; + + if (opts->has_full_screen) { + error_report("spice-app full-screen isn't supported yet."); + exit(1); + } + if (opts->has_window_close) { + error_report("spice-app window-close isn't supported yet."); + exit(1); + } + + atexit(spice_app_atexit); + + if (qemu_name) { + app_dir =3D g_build_filename(g_get_user_runtime_dir(), + "qemu", qemu_name, NULL); + if (g_mkdir_with_parents(app_dir, S_IRWXU) < -1) { + error_report("Failed to create directory %s: %s", + app_dir, strerror(errno)); + exit(1); + } + } else { + app_dir =3D g_dir_make_tmp(NULL, &err); + tmp_dir =3D app_dir; + if (err) { + error_report("Failed to create temporary directory: %s", + err->message); + exit(1); + } + } + + type_register(&char_vc_type_info); + + sock_path =3D g_strjoin("", app_dir, "/", "spice.sock", NULL); + qopts =3D qemu_opts_create(qemu_find_opts("spice"), NULL, 0, &error_ab= ort); + qemu_opt_set(qopts, "disable-ticketing", "on", &error_abort); + qemu_opt_set(qopts, "unix", "on", &error_abort); + qemu_opt_set(qopts, "addr", sock_path, &error_abort); + qemu_opt_set(qopts, "image-compression", "off", &error_abort); + qemu_opt_set(qopts, "streaming-video", "off", &error_abort); + qemu_opt_set(qopts, "gl", opts->has_gl ? "on" : "off", &error_abort); + display_opengl =3D opts->has_gl; + + be->u.spiceport.data->fqdn =3D g_strdup("org.qemu.monitor.qmp.0"); + qemu_chardev_new("org.qemu.monitor.qmp", TYPE_CHARDEV_SPICEPORT, + be, NULL, &error_abort); + qopts =3D qemu_opts_create(qemu_find_opts("mon"), + NULL, 0, &error_fatal); + qemu_opt_set(qopts, "chardev", "org.qemu.monitor.qmp", &error_abort); + qemu_opt_set(qopts, "mode", "control", &error_abort); + + qapi_free_ChardevBackend(be); +} + +static void spice_app_display_init(DisplayState *ds, DisplayOptions *opts) +{ + GError *err =3D NULL; + gchar *uri; + + uri =3D g_strjoin("", "spice+unix://", app_dir, "/", "spice.sock", NUL= L); + info_report("Launching display with URI: %s", uri); + g_app_info_launch_default_for_uri(uri, NULL, &err); + if (err) { + error_report("Failed to launch %s URI: %s", uri, err->message); + error_report("You need a capable Spice client, " + "such as virt-viewer 8.0"); + exit(1); + } + g_free(uri); +} + +static QemuDisplay qemu_display_spice_app =3D { + .type =3D DISPLAY_TYPE_SPICE_APP, + .early_init =3D spice_app_display_early_init, + .init =3D spice_app_display_init, +}; + +static void register_spice_app(void) +{ + qemu_display_register(&qemu_display_spice_app); +} + +type_init(register_spice_app); diff --git a/qapi/ui.json b/qapi/ui.json index 7702ddf583a1..c5d1d7f09966 100644 --- a/qapi/ui.json +++ b/qapi/ui.json @@ -1110,12 +1110,17 @@ # # @cocoa: The Cocoa user interface. # +# @spice-app: Set up a Spice server and run the default associated +# application to connect to it. The server will redirect +# the serial console and QEMU monitors. (Since 4.0) +# # Since: 2.12 # ## { 'enum' : 'DisplayType', 'data' : [ 'default', 'none', 'gtk', 'sdl', - 'egl-headless', 'curses', 'cocoa' ] } + 'egl-headless', 'curses', 'cocoa', + 'spice-app'] } =20 ## # @DisplayOptions: diff --git a/qemu-options.hx b/qemu-options.hx index 77bd98e20b14..c843126ebdeb 100644 --- a/qemu-options.hx +++ b/qemu-options.hx @@ -1211,6 +1211,7 @@ STEXI ETEXI =20 DEF("display", HAS_ARG, QEMU_OPTION_display, + "-display spice-app[,gl=3Don|off]\n" "-display sdl[,frame=3Don|off][,alt_grab=3Don|off][,ctrl_grab=3Don|off= ]\n" " [,window_close=3Don|off][,gl=3Don|core|es|off]\n" "-display gtk[,grab_on_hover=3Don|off][,gl=3Don|off]|\n" @@ -1262,6 +1263,10 @@ Start a VNC server on display @item egl-headless Offload all OpenGL operations to a local DRI device. For any graphical dis= play, this display needs to be paired with either VNC or SPICE displays. +@item spice-app +Start QEMU as a Spice server and launch the default Spice client +application. The Spice server will redirect the serial consoles and +QEMU monitors. (Since 4.0) @end table ETEXI =20 diff --git a/ui/Makefile.objs b/ui/Makefile.objs index 7f8b3da79134..fe1a7aed97c2 100644 --- a/ui/Makefile.objs +++ b/ui/Makefile.objs @@ -49,6 +49,11 @@ curses.mo-objs :=3D curses.o curses.mo-cflags :=3D $(CURSES_CFLAGS) curses.mo-libs :=3D $(CURSES_LIBS) =20 +common-obj-$(call land,$(CONFIG_SPICE),$(CONFIG_GIO)) +=3D spice-app.mo +spice-app.mo-objs :=3D spice-app.o +spice-app.mo-cflags :=3D $(GIO_CFLAGS) +spice-app.mo-libs :=3D $(GIO_LIBS) + common-obj-$(CONFIG_OPENGL) +=3D shader.o common-obj-$(CONFIG_OPENGL) +=3D console-gl.o common-obj-$(CONFIG_OPENGL) +=3D egl-helpers.o --=20 2.9.3