Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2230539/?format=api
{ "id": 2230539, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2230539/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260430-qemu-vnc-v3-3-be96757428d0@redhat.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/1.1/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20260430-qemu-vnc-v3-3-be96757428d0@redhat.com>", "date": "2026-04-29T21:02:36", "name": "[v3,03/26] ui/console: add vc encoding=utf8/cp437 option", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "535a3f663fa979a920631ecc6fa0a1875fda2c6e", "submitter": { "id": 66774, "url": "http://patchwork.ozlabs.org/api/1.1/people/66774/?format=api", "name": "Marc-André Lureau", "email": "marcandre.lureau@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260430-qemu-vnc-v3-3-be96757428d0@redhat.com/mbox/", "series": [ { "id": 502150, "url": "http://patchwork.ozlabs.org/api/1.1/series/502150/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=502150", "date": "2026-04-29T21:02:34", "name": "ui: add standalone VNC server over D-Bus", "version": 3, "mbox": "http://patchwork.ozlabs.org/series/502150/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2230539/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2230539/checks/", "tags": {}, "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=OyhTkVYd;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g5VDP54Qmz1yJr\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 07:04:36 +1000 (AEST)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wIC4K-0003VT-8R; Wed, 29 Apr 2026 17:03:40 -0400", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <marcandre.lureau@redhat.com>)\n id 1wIC4I-0003Uz-3P\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 17:03:38 -0400", "from us-smtp-delivery-124.mimecast.com ([170.10.133.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <marcandre.lureau@redhat.com>)\n id 1wIC4G-0003Dp-7p\n for qemu-devel@nongnu.org; Wed, 29 Apr 2026 17:03:37 -0400", "from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-74-_FgDjdECOwO9IYYMQNCqXQ-1; Wed,\n 29 Apr 2026 17:03:32 -0400", "from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 8DD8E19560B5\n for <qemu-devel@nongnu.org>; Wed, 29 Apr 2026 21:03:31 +0000 (UTC)", "from localhost (unknown [10.44.22.2])\n by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 5476619560AB; Wed, 29 Apr 2026 21:03:29 +0000 (UTC)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1777496615;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=Cno5h8iE+Ze095lareXK4yoKI0EkSMjjNdtAoCEZ2Xk=;\n b=OyhTkVYdua8x3jN8ykDQfsZZFFnIthWVLiDKCOijwPmnaZdZpDCNMScF170D172Xj6Dmgh\n VpIUzO4MaLaoYbjgKzduAatJ2Hf91w/wEo2/V01EbCC3KumaqZGkY5EGjufvJPaAwbbYzn\n gAqRN8cBj/fLhFNP/HsiLLF/4sy9J04=", "X-MC-Unique": "_FgDjdECOwO9IYYMQNCqXQ-1", "X-Mimecast-MFC-AGG-ID": "_FgDjdECOwO9IYYMQNCqXQ_1777496611", "From": "=?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>", "Date": "Thu, 30 Apr 2026 01:02:36 +0400", "Subject": "[PATCH v3 03/26] ui/console: add vc encoding=utf8/cp437 option", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=\"utf-8\"", "Content-Transfer-Encoding": "8bit", "Message-Id": "<20260430-qemu-vnc-v3-3-be96757428d0@redhat.com>", "References": "<20260430-qemu-vnc-v3-0-be96757428d0@redhat.com>", "In-Reply-To": "<20260430-qemu-vnc-v3-0-be96757428d0@redhat.com>", "To": "qemu-devel@nongnu.org", "Cc": "=?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>", "X-Developer-Signature": "v=1; a=openpgp-sha256; l=8065;\n i=marcandre.lureau@redhat.com; h=from:subject:message-id;\n bh=plQyXHsWEQ86pudBX8gWIrgkqQYgfrJswIQWOyKUTEg=;\n b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBp8nILCnWPdXZvxRFodwIiAEjcj560A237mj203\n +Rn6d3eGJuJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCafJyCwAKCRDa6OEJdZac\n 5W6hD/sFj10bw7CDXeBmjVTHNo26HWvtO23JSWXQGZQXam2FPfmBAM56ZwQmaQuy29iWroCml5n\n 7Eig9FrXdhYUVUCy9gk2rSHs3ggpzauAlrUHWvs11WAVD+Tw5VEHEHCOdxsL9hE/wKqYaQhxwV/\n MHtMAb6qSqurz3jliIh47pVsteGatdFeFSl2Z4ywZESlcdeXgIAwLpughd1GPMeAAkzmP7QcNBU\n xlTZ1hMCDBekQsKYXkC45LD0QhKDIWOffAxykjg8JwMlAPC+qDXiK9VuGY/0fBT7LbDS0DbGYBP\n yEMWPrhz/yrOWrF79CVV+zuukJjmORhvP34oGQ0wf4lE2y/HorTpmrWI8pMkTCw2FwmjmAW/W15\n nyesSW/OKDhsbIwR+zCLLd+pjwmE4cBjRgDusRYrMSjyWSTB4d1bqYgMp4Nni3jETtLF06ym/Oj\n z260OJGPQq9hXNuAEw5oidz5s1yE5JmI2acGwznKmPDpZZYyt8yaLt4pkdgovP2C+SfjyupnbAx\n DY/H+LVDSyd1jC6VmaNqxw+7VFV3OiTc5g8T/Fhn58iZ1PFkgVCg26Vq0/f4qN3lLpveKklaUHb\n rykXnEBeoqCoDgO5RFEjUBxYwWfoEXwi0cmk4G7G/pIinWCJlfuynO/ha3YYGgB4d7NR3ZOQImV\n ftUreP4q8QZZ9BQ==", "X-Developer-Key": "i=marcandre.lureau@redhat.com; a=openpgp;\n fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5", "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.12", "Received-SPF": "pass client-ip=170.10.133.124;\n envelope-from=marcandre.lureau@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com", "X-Spam_score_int": "12", "X-Spam_score": "1.2", "X-Spam_bar": "+", "X-Spam_report": "(1.2 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001,\n RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001,\n SPF_PASS=-0.001 autolearn=no autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "Expose a new \"encoding\" QemuOpt option.\n\nAdd the corresponding QAPI type and properties.\n\nThis is going to be wired in the following commits.\n\nSigned-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>\n---\n qapi/char.json | 30 ++++++++++++++++++++++++++++--\n include/chardev/char.h | 1 +\n chardev/char.c | 10 ++++++++++\n ui/console-vc.c | 12 ++++++++++++\n ui/dbus.c | 13 +++++++++++++\n qemu-options.hx | 7 +++++--\n 6 files changed, 69 insertions(+), 4 deletions(-)", "diff": "diff --git a/qapi/char.json b/qapi/char.json\nindex a4abafa6803..aa5ee9ffcd0 100644\n--- a/qapi/char.json\n+++ b/qapi/char.json\n@@ -377,6 +377,24 @@\n 'base': 'ChardevCommon',\n 'if': 'CONFIG_SPICE' }\n \n+##\n+# @ChardevVCEncoding:\n+#\n+# Character encoding expected from the guest on a virtual console.\n+#\n+# @cp437: CP437 (8-bit Extended ASCII / VGA). Every byte maps\n+# directly to a glyph; suitable for DOS or other guests that\n+# output raw CP437.\n+#\n+# @utf8: UTF-8. Multi-byte sequences are decoded and then mapped\n+# back to CP437 glyphs for display; unmappable codepoints are\n+# shown as '?'. Suitable for modern Linux guests.\n+#\n+# Since: 11.1\n+##\n+{ 'enum': 'ChardevVCEncoding',\n+ 'data': [ 'cp437', 'utf8' ] }\n+\n ##\n # @ChardevDBus:\n #\n@@ -384,10 +402,14 @@\n #\n # @name: name of the channel (following docs/spice-port-fqdn.txt)\n #\n+# @encoding: character encoding the guest is expected to use\n+# (since 11.1)\n+#\n # Since: 7.0\n ##\n { 'struct': 'ChardevDBus',\n- 'data': { 'name': 'str' },\n+ 'data': { 'name': 'str',\n+ '*encoding': 'ChardevVCEncoding' },\n 'base': 'ChardevCommon',\n 'if': 'CONFIG_DBUS_DISPLAY' }\n \n@@ -404,6 +426,9 @@\n #\n # @rows: console height, in chars\n #\n+# @encoding: character encoding the guest is expected to use\n+# (since 11.1)\n+#\n # .. note:: The options are only effective when the VNC or SDL\n # graphical display backend is active. They are ignored with the\n # GTK, Spice, VNC and D-Bus display backends.\n@@ -414,7 +439,8 @@\n 'data': { '*width': 'int',\n '*height': 'int',\n '*cols': 'int',\n- '*rows': 'int' },\n+ '*rows': 'int',\n+ '*encoding': 'ChardevVCEncoding' },\n 'base': 'ChardevCommon' }\n \n ##\ndiff --git a/include/chardev/char.h b/include/chardev/char.h\nindex 51995f06a82..f05e8dba0a9 100644\n--- a/include/chardev/char.h\n+++ b/include/chardev/char.h\n@@ -255,6 +255,7 @@ struct ChardevClass {\n bool internal; /* TODO: eventually use TYPE_USER_CREATABLE */\n bool supports_yank;\n bool supports_size_opts;\n+ bool supports_encoding_opts;\n \n /* parse command line options and populate QAPI @backend */\n void (*chr_parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp);\ndiff --git a/chardev/char.c b/chardev/char.c\nindex 55dce9725e8..ca8b37ed8d7 100644\n--- a/chardev/char.c\n+++ b/chardev/char.c\n@@ -650,6 +650,13 @@ ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, Error **errp)\n return NULL;\n }\n }\n+ if (!cc->supports_encoding_opts) {\n+ if (qemu_opt_get(opts, \"encoding\")) {\n+ error_setg(errp, \"chardev '%s' does not support encoding option\",\n+ qemu_opts_id(opts));\n+ return NULL;\n+ }\n+ }\n \n backend = g_new0(ChardevBackend, 1);\n backend->type = CHARDEV_BACKEND_KIND_NULL;\n@@ -972,6 +979,9 @@ QemuOptsList qemu_chardev_opts = {\n },{\n .name = \"rows\",\n .type = QEMU_OPT_NUMBER,\n+ },{\n+ .name = \"encoding\",\n+ .type = QEMU_OPT_STRING,\n },{\n .name = \"mux\",\n .type = QEMU_OPT_BOOL,\ndiff --git a/ui/console-vc.c b/ui/console-vc.c\nindex 62a5e3caf57..7bb6a483753 100644\n--- a/ui/console-vc.c\n+++ b/ui/console-vc.c\n@@ -1211,6 +1211,7 @@ static bool vc_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n static void vc_chr_parse(QemuOpts *opts, ChardevBackend *backend, Error **errp)\n {\n int val;\n+ const char *str;\n ChardevVC *vc;\n \n backend->type = CHARDEV_BACKEND_KIND_VC;\n@@ -1240,6 +1241,16 @@ static void vc_chr_parse(QemuOpts *opts, ChardevBackend *backend, Error **errp)\n vc->has_rows = true;\n vc->rows = val;\n }\n+\n+ str = qemu_opt_get(opts, \"encoding\");\n+ if (str) {\n+ int cs = qapi_enum_parse(&ChardevVCEncoding_lookup, str, -1, errp);\n+ if (cs < 0) {\n+ return;\n+ }\n+ vc->has_encoding = true;\n+ vc->encoding = cs;\n+ }\n }\n \n static void char_vc_class_init(ObjectClass *oc, const void *data)\n@@ -1252,6 +1263,7 @@ static void char_vc_class_init(ObjectClass *oc, const void *data)\n cc->chr_accept_input = vc_chr_accept_input;\n cc->chr_set_echo = vc_chr_set_echo;\n cc->supports_size_opts = true;\n+ cc->supports_encoding_opts = true;\n }\n \n static const TypeInfo char_vc_type_info = {\ndiff --git a/ui/dbus.c b/ui/dbus.c\nindex 794b65c4ada..721cc71d39b 100644\n--- a/ui/dbus.c\n+++ b/ui/dbus.c\n@@ -471,6 +471,8 @@ dbus_vc_parse(QemuOpts *opts, ChardevBackend *backend,\n DBusVCClass *klass = DBUS_VC_CLASS(object_class_by_name(TYPE_CHARDEV_VC));\n const char *name = qemu_opt_get(opts, \"name\");\n const char *id = qemu_opts_id(opts);\n+ const char *str;\n+ ChardevDBus *dbus;\n \n if (name == NULL) {\n if (g_str_has_prefix(id, \"compat_monitor\")) {\n@@ -486,6 +488,16 @@ dbus_vc_parse(QemuOpts *opts, ChardevBackend *backend,\n }\n \n klass->parent_parse(opts, backend, errp);\n+ dbus = backend->u.dbus.data;\n+ str = qemu_opt_get(opts, \"encoding\");\n+ if (str) {\n+ int cs = qapi_enum_parse(&ChardevVCEncoding_lookup, str, -1, errp);\n+ if (cs < 0) {\n+ return;\n+ }\n+ dbus->has_encoding = true;\n+ dbus->encoding = cs;\n+ }\n }\n \n static void\n@@ -496,6 +508,7 @@ dbus_vc_class_init(ObjectClass *oc, const void *data)\n \n klass->parent_parse = cc->chr_parse;\n cc->chr_parse = dbus_vc_parse;\n+ cc->supports_encoding_opts = true;\n }\n \n static const TypeInfo dbus_vc_type_info = {\ndiff --git a/qemu-options.hx b/qemu-options.hx\nindex efffeaaf55e..44aa3a4cd3b 100644\n--- a/qemu-options.hx\n+++ b/qemu-options.hx\n@@ -4044,7 +4044,7 @@ DEF(\"chardev\", HAS_ARG, QEMU_OPTION_chardev,\n \" [,logfile=PATH][,logappend=on|off]\\n\"\n \"-chardev msmouse,id=id[,mux=on|off][,logfile=PATH][,logappend=on|off]\\n\"\n \"-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]\\n\"\n- \" [,mux=on|off][,logfile=PATH][,logappend=on|off]\\n\"\n+ \" [,mux=on|off][,logfile=PATH][,logappend=on|off][,encoding=ENCODING]\\n\"\n \"-chardev ringbuf,id=id[,size=size][,logfile=PATH][,logappend=on|off]\\n\"\n \"-chardev file,id=id,path=path[,input-path=input-file][,mux=on|off][,logfile=PATH][,logappend=on|off]\\n\"\n \"-chardev pipe,id=id,path=path[,mux=on|off][,logfile=PATH][,logappend=on|off]\\n\"\n@@ -4276,7 +4276,7 @@ The available backends are:\n Several frontend devices is not supported. Stacking of multiplexers\n and hub devices is not supported as well.\n \n-``-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]]``\n+``-chardev vc,id=id[[,width=width][,height=height]][[,cols=cols][,rows=rows]][,encoding=ENCODING]``\n Connect to a QEMU text console. The implementation and supported feature\n set depend on the selected display backend.\n \n@@ -4295,6 +4295,9 @@ The available backends are:\n ``cols`` and ``rows`` specify that the console be sized to fit a\n text console with the given dimensions.\n \n+ ``encoding`` specifies the character set expected from the guest:\n+ ``utf8`` or ``cp437`` (8-bit Extended ASCII / VGA).\n+\n ``-chardev ringbuf,id=id[,size=size]``\n Create a ring buffer with fixed size ``size``. size must be a power\n of two and defaults to ``64K``.\n", "prefixes": [ "v3", "03/26" ] }