From nobody Mon Apr 29 00:20:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495198286955491.0260049644721; Fri, 19 May 2017 05:51:26 -0700 (PDT) Received: from localhost ([::1]:58640 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhNN-00030p-LN for importer@patchew.org; Fri, 19 May 2017 08:51:25 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46830) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhJy-0000Xz-9B for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:55 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dBhJw-0004FK-4B for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:54 -0400 Received: from mail-eopbgr00136.outbound.protection.outlook.com ([40.107.0.136]:31167 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dBhJv-0004AG-Ov for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:52 -0400 Received: from xantnef-ws.sw.ru (195.214.232.6) by DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Fri, 19 May 2017 12:47:45 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=UhvU1apdCfYfMNo5O6Zj2jij02xMqhWYjidx+HySIgA=; b=CJtKnZMwACGnj48Ox2njvL8PoJl5lcfprFU8MYT9TZh8bK6/tCf8DTHeBs6T9/fxl4npfy8xjgj8l5rpOQa7W2Ze16DAThrE4GDvF571emR+E4NYrdcHL6mczCOKKVJt6zRciwlTWsNXZgtq0f+AETmrpaOFu/mm7T6ShCWydL0= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Anton Nefedov To: Date: Fri, 19 May 2017 15:47:14 +0300 Message-ID: <1495198042-124203-2-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0002.EURPRD10.PROD.OUTLOOK.COM (10.171.79.12) To DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB6PR0801MB1989: X-MS-Office365-Filtering-Correlation-Id: 6335d026-3fce-4dc9-c0f3-08d49eb53f67 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 3:XNS8Srsao2BCZThDnSxmKyjkjqLzDpbHf1uVLUalLHVcvRPN6tj54rqA9ziZza6yO0EHnNldFvr67NEgTwSefjlyO1aPewj4waXKrsor4woz+bYBqBGREhNHeRACnnXjcb/0QGuS5FxZTQtoSii+eBcULXFs1X4Y0zVdA+f6MjTelLrBaGN204sdXkahitP8ZXX/U0P7u1wDPqTx/8rgsBGe3f6A6Hv3SfTmwCZwBkCIcAABTe8kfzPOo0FfEGQFfy4+3PZ4xUG00Jvm0lbb/sihoKaWECfS6uV2j+FNon4NvhQx3cDVSSZvBRdKupHVKOfOu9fmoyOlbe02z6+dnQ==; 25:D8ShdVXTx+JJfkRIUs/weIL3o+G3KHp8E8kJN+aAN8exizyna02CzaWVPmOLzmtwACMDlHbVxInhv2shSPrWhRPWrnqUrraRqVXoCMgGef24LjPu7AA1mTpro9lf3utUVTFel1bfFpK/4iN8FLwVVdbBlVsXS497WOCB5Zr7sdtVgY+zydEt7+/IigNmflMPCabktBWd9Oz9Drudvw6J61trJCsLK1leFq8BMtkFZiXj67jVZxGmkNqhBuYreYJ+ac7PiGyjlb/yAKR5JTiIV4m/mAFOdQW6w0HXEb/T7zOFBMJUJaqEngb0X7+MPpUuB03PFdFPOUHfAKScs6nm+tWN3adgce+4EwvS6JAJtKeWWHkA+ppO5DROf2HTUS4zOAluBUFvo5/DXHwPUtg748C8VU8pa1SfDEDmpA75bBrZ1KDvveZdTz8aozaB325hwYgbC/XlYTLOxy+ZKD0wqmAesfe/o7VrixaIQPHLP4g= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 31:EjLwNsCiW1yVC99vvvFhxcgrK/J9pF3UP/UeMNrqtwxxWa62Z29qYDXYD+KPxE/bWY+2x4VJBtGj2IWELcSWRVhpVjso7qS81ROyKDh9SkxQeFX1gF+uXLRHd2DGStB6x2Qxl2FGfdNvCQ0K5QYadleuw93ePQbpJK+RKRBedsL++0DIki3Qjh3O5tczUUfapkRbVVqkwKSfKjeFeUZ2sPMQXVnIczWuYn17XxcMpqc=; 20:+lp3BiuR0fJ+xdV/O6HTR727PUZ7xvSlnc+SoTkbcH47GNfclMjHVZnG2Ww0v2EKJrhfWugjO/wK31UCNh/UZ3PdM+K8NNms0Sn9XIBkQyjenNPwmiZwoJj8vNc34PXXVsTlm3yN9Gk1rTpEr5upCoQ/HA7RlNln2QM+zJGhjSkOQQfseBsWvn7yHfx018JtzLox+kw06tA/tV/PtT/89QV0LwSS/KatnRrbu+DnY34W23I4FU/a8XyFVYIfXmy5e7w5X3ATcoX7Unohffyos0/sFm6lYr8DcgRpc8hTCDoqsnk85m32byPKMsl9p/xjaT7k4er5SQWIiY0wn/odsKiA6peS8yM3rS+4xn/WieOyNpGD8NkJqJ6LFAlgYaHXOa3Zi1FmxTzCMSqJZo6ld8oaQ9L4bJdzbINNTlJFs0M= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123560025)(20161123555025)(20161123558100)(20161123562025)(20161123564025)(201703131423075)(201703061421075)(6072148); SRVR:DB6PR0801MB1989; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 4:arWOlsCLEj1X+UZLBfv0fgu0KoEXygCXH7KgFhdwGb/QL6BaUS32aCt8FsKio6GSVHLdW5uQ2BfU8kS98gUk63jY+lhmvJhTF6nxrbvyVTBMljuEQV1QHu9psw4Ydaz0piHZ3H3aCmH2W8SXZwaNm9UfmEy6t/3evBLCSdQAEPhNmgH2sLZz9bbS1AH/r2ZF+ChBUDK+kRGDviMqb2ScdlVgkK3CKdtAKtlaGXQP3YsdSU1jAewyGLN76eKMkmd3QKN56pqmiboDEKBCyl/ubDNEfIi29aeLYBYZq40oUPObrPSzFP0Wo4domVkIhNRcOpqnSrG3s9uy2kqN3YW9hwAXSshbAvUvJuvcp+qwefEklitUd/xcygfnnYl0lXvuDl9jGHuA5CXcaN0Qsrkqeta39WCnBHHMOn1LxKUog1isOIPnx4Tgp35gxSt1Fa7QhVe0jM9YQAiqXe0bBIsRJVE6DefPq5Po72vb1kBnYuBEk+oQ/2u+Y7YSSfDaJVzMdn9FhCAeQL/rBPTdTyLZmM3ocv4usSUOtEDsTBdB78xyAzEjdkISzWBC7oHWn881xsCHaebSo1c4414/l9ZOwFncgPItZ/t9xFH0zUyT7C63FQvwiZO7rHlq1vuxd8GSOEC7yQRGLZjh9GeZCwaDnKCx677kMGhAjEKJGhe1cFJizjCNOnWjJV4qsFiidfUnR7Hsni/yOzX+vmj7dpoaqA== X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39400400002)(39450400003)(33646002)(48376002)(5003940100001)(53936002)(38730400002)(25786009)(2351001)(6506006)(6486002)(107886003)(4326008)(110136004)(5660300001)(36756003)(7736002)(6916009)(2950100002)(305945005)(6666003)(66066001)(2906002)(189998001)(50226002)(50466002)(54906002)(508600001)(86362001)(6512007)(81166006)(8676002)(50986999)(53416004)(3846002)(76176999)(42186005); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1989; H:xantnef-ws.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1989; 23:X9fVBLwKXfMdjdsR/HHkDNuA/Oi3siL5vjOQHQS?= =?us-ascii?Q?9gd4vL4oyAiAy7uI2t/gYIQkfVzukCwEzhVracZK0CcjRrKrZEld/Hg1Vau2?= =?us-ascii?Q?8rg9lpQlQTSJlyFLr+Tei6gbxd7xt9jTNzbVl3UcgJQ21yo1TJ2SGzs8f59Q?= =?us-ascii?Q?jhbL3qaV3ZEm3SCKDmPhIodyxi679tk9FtSqOcBRM3RiQT9jLkLOS8UfueeC?= =?us-ascii?Q?Zj471YJAfHprwMasGHdm0HuZ5ejZEe+l2eWb8VxVE6kiCfuVWOSBen/XRJ3O?= =?us-ascii?Q?7/N9Zodo/w6trEceMTms1EOgZfNR+bVX5CYso2EwuDVJQf9okvxWHsIgXf6r?= =?us-ascii?Q?T0uM+fwha5Jnns/x9YvLzdcqmFq6xrO7Vk3j5XIctBjforSs5lfsOvK8lQ+h?= =?us-ascii?Q?7Lz9yJHXIt0p/OKLYgHYlbGcQ0/T6Ed5dMJAKAnYE+giu9uPmpDIarceOId5?= =?us-ascii?Q?4PaEnzoMojQgVDRQbWVsfuewoEmscxZoD8orsBnlohbuqwzQW9yAGtoexG6M?= =?us-ascii?Q?6XabMtsgPYVMAIhbYegTL8Hoq+zJCpul8N+BYw8ptoY/hX6RoJi0VHrIhMyE?= =?us-ascii?Q?QO4Ip4E+D71j45Pc/73yZ4U8czUjCQZw6aUvziEhUfkut541+AQGSykAvhj8?= =?us-ascii?Q?nb5ZaWN2fE0lDtHA+AZhjlxOw3Z3BnV2BiMAvG73yiofJH77e4/lDzZjFtCP?= =?us-ascii?Q?dK1NyvE72wUZYLZ9ZnycNKr+CNpV8sw8bGW6ChXg5+j3gudwdDayXXFn3N5A?= =?us-ascii?Q?yP+HpJXMyK1YGVVYhgCz4cCAfiYtzs9Lv1wLaJPz+DaspXByOIIN98T73RWM?= =?us-ascii?Q?jm2cipdrTst4W5WSxBbXWmkYEj++7mewT2tTQQf3qaky1v9ZeKwg5UoqK+S2?= =?us-ascii?Q?+G9sei0x7xGhgTpVe5nsTVcndwN0GjPh9i3W4tNSrYyL+eyuuesYj6q69bj+?= =?us-ascii?Q?mqkxcSYOfBr/08hhd6wlXKH68f855ilFaHKqROQzbv483MX2fo6VFk1zZp1C?= =?us-ascii?Q?/mco=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 6:i8WHNi30Ev6qxCAKKDS98vBbWYuHcNdN1R2vxFCgKpXrUdrgQ1sCdl4w2gAzsiM0qifSTbpQa8DVLqp3y5w6ZfW3qjR1U98KbuxKik0CQ+eptYOcLrfk02bvLBOIkY88HY6iKO4On2TPhsV/hUfYKcKJ/k43C1Y6+F24Iwvn7IAWrX5UcrcrKfUDfz8/LH4+1i6G40kOa/xyZ0F2qHMvh/Fc0XDrfFfmH6JoYOaXqEWS89SgIwenEiAQhTruRvAzlAJWFcJ9wBRkBEkr2AEc+CsE7AxaII3ij8qZYEcVAIHgyx8/CZGOXQlw0I9f3IrpwlfPV3HW2ecwq7izRoXGrzYYH1y3THRcz8BtGqXmjElU6QYxiCT9a9NKJu7UjWYts7C3vC6kWoti4FMARBq4xKdH7j5Py+nAqlN6lYjekFHX0XH6Iy7xv98BfN6IqFHZpECRTmOR0JCPE81ZeKpA0GI/wI767bB7jxvE/FI+H+tWjE+i2UARCm8WVt+KQnr/NBWVvw9pCRFdrj1qa46IgA==; 5:RAeJ9/lUoCpoTN6M5/ichrELIyRqYOX0AuLNYoiYGoHUPK5F0XX2OKgwI8a9qxXovWUpkz3CJPe95m8wER/mEJtf7Az+ohKcrQiFQxETQLdMexB5sYaeW2PRmPzMr3sllHRo7ShANfft3dKJeujCOg==; 24:dLqUIUKBFKN866Uv4r5KcrdQOEEQj9vj5UFSIq5YaNbm2dXgnXvR+RnOzgENOeYRBLgV5JTl1YwQzTaNN9otewpE0JxUm939WHuop6X92Oc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 7:8c4M/N52SgtzhxEmE5LETl6iiqLCXS4J4lcdmJvUm4W/TRt1ewIYDyT791G3OI1Ebt3Y2/YLu+vSIk4XxCC5BgadzDNe4fVUmiB/CBeBfULjuJDzdIsLZ5l6ijUjNj/ZE8YtxkymYNGtqhC8Od0DYuC6PIKbvyAabucihPGUOQb3NMYj4DOAXspRxZf7x+eN9Cj8fkO1Yx/zHoPMdlybZdiUK25pN6Rn9nwvK5NAi5gdh7WbaY2lUbkxGIMbhZ3pwMGqCWFMLAxbVnxt3G9A+hwH+a0tYSVO+jFFi9jj5AM87+er7GzU1gqju8FI2SAcrJHDZFAs0/sAU9d3DV86VA==; 20:laWZuzHtWHO7bpNno6GJNMCLa/41cKpnLb4PBy5Vso4qgj4WqdDmY/WWCpPjRA6MZkQdYFXWHgkcFnZKNUTOyp6Jp6f8CDbUD5I1USiaKKuXOYCOqGu6cjbPv3PzovNarzM0Ca8MojWThw6zd5i1fzFnt7rmqljFd48u+NRGTqA= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2017 12:47:45.1592 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1989 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.0.136 Subject: [Qemu-devel] [PATCH v2 1/9] char: move QemuOpts->ChardevBackend translation to a separate func 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: pbonzini@redhat.com, Anton Nefedov , den@virtuozzo.com, marcandre.lureau@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Anton Nefedov Reviewed-by: Vladimir Sementsov-Ogievskiy --- chardev/char.c | 72 +++++++++++++++++++++++++++++++++++++-----------------= ---- 1 file changed, 46 insertions(+), 26 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index 4e24dc3..684cccd 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -854,17 +854,14 @@ help_string_append(const char *name, void *opaque) g_string_append_printf(str, "\n%s", name); } =20 -Chardev *qemu_chr_new_from_opts(QemuOpts *opts, - Error **errp) +static ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, + Error **errp) { Error *local_err =3D NULL; const ChardevClass *cc; - Chardev *chr; int i; ChardevBackend *backend =3D NULL; const char *name =3D qemu_opt_get(opts, "backend"); - const char *id =3D qemu_opts_id(opts); - char *bid =3D NULL; =20 if (name =3D=3D NULL) { error_setg(errp, "chardev: \"%s\" missing backend", @@ -872,21 +869,6 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts, return NULL; } =20 - if (is_help_option(name)) { - GString *str =3D g_string_new(""); - - chardev_name_foreach(help_string_append, str); - - error_report("Available chardev backend types: %s", str->str); - g_string_free(str, true); - exit(0); - } - - if (id =3D=3D NULL) { - error_setg(errp, "chardev: no id specified"); - return NULL; - } - for (i =3D 0; i < ARRAY_SIZE(chardev_alias_table); i++) { if (g_strcmp0(chardev_alias_table[i].alias, name) =3D=3D 0) { name =3D chardev_alias_table[i].typename; @@ -902,16 +884,12 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts, backend =3D g_new0(ChardevBackend, 1); backend->type =3D CHARDEV_BACKEND_KIND_NULL; =20 - if (qemu_opt_get_bool(opts, "mux", 0)) { - bid =3D g_strdup_printf("%s-base", id); - } - - chr =3D NULL; if (cc->parse) { cc->parse(opts, backend, &local_err); if (local_err) { error_propagate(errp, local_err); - goto out; + qapi_free_ChardevBackend(backend); + return NULL; } } else { ChardevCommon *ccom =3D g_new0(ChardevCommon, 1); @@ -919,6 +897,48 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts, backend->u.null.data =3D ccom; /* Any ChardevCommon member would w= ork */ } =20 + return backend; +} + +Chardev *qemu_chr_new_from_opts(QemuOpts *opts, + Error **errp) +{ + const ChardevClass *cc; + Chardev *chr =3D NULL; + ChardevBackend *backend =3D NULL; + const char *name =3D qemu_opt_get(opts, "backend"); + const char *id =3D qemu_opts_id(opts); + char *bid =3D NULL; + + if (name && is_help_option(name)) { + GString *str =3D g_string_new(""); + + chardev_name_foreach(help_string_append, str); + + error_report("Available chardev backend types: %s", str->str); + g_string_free(str, true); + exit(0); + } + + if (id =3D=3D NULL) { + error_setg(errp, "chardev: no id specified"); + return NULL; + } + + backend =3D qemu_chr_parse_opts(opts, errp); + if (backend =3D=3D NULL) { + return NULL; + } + + cc =3D char_get_class(name, errp); + if (cc =3D=3D NULL) { + goto out; + } + + if (qemu_opt_get_bool(opts, "mux", 0)) { + bid =3D g_strdup_printf("%s-base", id); + } + chr =3D qemu_chardev_new(bid ? bid : id, object_class_get_name(OBJECT_CLASS(cc)), backend, errp); --=20 2.7.4 From nobody Mon Apr 29 00:20:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 14951983747551005.9597819670298; Fri, 19 May 2017 05:52:54 -0700 (PDT) Received: from localhost ([::1]:58645 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhOm-0004Aj-UF for importer@patchew.org; Fri, 19 May 2017 08:52:52 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46886) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhK1-0000cd-8H for qemu-devel@nongnu.org; Fri, 19 May 2017 08:48:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dBhJx-0004IS-RB for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:57 -0400 Received: from mail-eopbgr00136.outbound.protection.outlook.com ([40.107.0.136]:31167 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dBhJx-0004AG-Ek for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:53 -0400 Received: from xantnef-ws.sw.ru (195.214.232.6) by DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Fri, 19 May 2017 12:47:46 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=8X9ZfCu1PIT0ok8p56kxgS2Q6Te+4t9mMcuzp3Z6OTY=; b=ULOYZEjoNWOjEXQMlguw4w0O5HEiJjr3RqYyhFpWCYwo5UMstk4ErOIufYUY65yFMSN/sQMLx2oz3omMS7KDHOubg24jzSUHeR9TwMOvNcS75SXBaKuGyM62/HlEm8fWHaAN+EPGxBWcA0Cwc5CrlFNp7IBMBYMfknQR16FpfBs= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Anton Nefedov To: Date: Fri, 19 May 2017 15:47:15 +0300 Message-ID: <1495198042-124203-3-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0002.EURPRD10.PROD.OUTLOOK.COM (10.171.79.12) To DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB6PR0801MB1989: X-MS-Office365-Filtering-Correlation-Id: 6a35470d-4adc-431e-fbac-08d49eb54022 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 3:BBdK2n/rgTL5lh18t9k7/SJRXs/5lLX0Bs5eNqZ/MvMRSTbS9slZkEAfwPkSGosf9kwjmrfao5+cHyDVPLDO9xN0T/XIiEKG32qzvJtfZwgs4m3HCEFCo/3kFhcn8oVlaFB5/PbMrxvD2Gy216oWTl4O3vaFNqjMbdgfUdCkpXRxalxgXaFeUDgZzGEp2OE9TWXRk3ZJcbqeFjN3at4Yp9WkBhI04JOhxIwHuLhtPTYjAQ9iWPcPYRZh12MZrSVRJbAmKHyC3ksQPSPyUmM8BcVVNp9ZPa9rhOxp9WXhDTL+N2KuUpn6dwMurjqeJZ8hSYxObfggAl+voGouYNs2MA==; 25:982lDtX942+x+pG/qyEHpDN0A6ypLUbwKloN18Bz4ooUA8VbPFRlWc5xLpj+ofej/UH0Gi9Pg8tPT65Bnoq97FTbGgS2oPN4efaODajp+sCQE8UGQx90QxF4WdAw2mwbF1vFexHqxezdByXDPF/Nyoy0kAeWoGDPgGd0Ab2ZAq9S9MZLg/koGYFLK+ORt3sOLWz+89jCa6bkiUzSi5kL5bbezskwodCkuDH7gJCZXzpjywI4ADDtzWrp9+wcmUcCd2LVL6xZVBK6UUwUc7SkhTXyUJcGp9bwfKnPa1NIkp3lKtLkdpXbJBFmiRKXyzY/4jP8cLROfKMiMpZN3TQICelPJ1oVcHOu/JNAAmxZdJ+xkSiAxJ4Evbmq8iIMbZyaBvtXGYJAg5fOE5HH3pAn6v9hvNY5vth3206evm7vryqwq9DLnIRO41kGY0fgKP14IHIqYiIka+7WMIvlXevLEx345TysqSZ2f1Sinwn5lO0= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 31:LJUg83qCPVNvOiUIcY977R6oK1zSalUJJzDLTJT0pcpHEzpDDKzPBoeBbxJnlCr2rBK1GKd3nYgcYD6GYIjo3bHIgIOlvPoDSGBz/m0JXx94Sr4m0WCowwp9jUmr6sYzie4FJuGEb7KXlocs2z+0WIYop3eRcSw3jkbNlBe5zcM3NIHT2Zh588bd5BVTueQbDf9GsaRSpaP8H635zTMyr1e3WIin7ua44Teht+9hcxI=; 20:BUjBC4NzADYm9ubG/ItCbD3IxqZD2Sezjjh07kho4Dmq8hDyhannQuqY6/L2V1SuB3qzGVT9TPTPVYlCR8ejy/Gqlnc1ari6D5wwcBSkyy3kukZzAqo4SUZRmuKihtFz0CpvPKLfgKRMa52FBQanKG+vOVQ7BsskOG7AHB6b855EormpAoVaIlP4jxUybT3Pr094x9UgxwyR3yVcfzSd17c5SoSpvn6oqtcLwsmrIM/lNvA9EnXYU69lMsrmILjfE1stqLc4/FnBnm4XEJJuJJS3dkPT/NfxJWROny9FPeWxRk0Bqa9uI022tU/dppIiX/8nXui3cu/l5LfgAbbNYhviOr+Ux7TPNTGN0Jurl9aIpzzAEFXLIUeY/R3PREAGZQjnUuLmB3OnMV3ZXKlnA8a7nHtweXsL5dTN7YbZcY0= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(158342451672863); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123560025)(20161123555025)(20161123558100)(20161123562025)(20161123564025)(201703131423075)(201703061421075)(6072148); SRVR:DB6PR0801MB1989; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 4:lMGoPa3G+CbtpNeEZPLnPFGWaIf026nGhRPAxMHQ89p7df8TIX67swHeE8/cXmgiiA4ksX4hnztKBao9XOn/6me1ek5VfA4TFduPodX2+ZQF1S9wjPENsIk5/1nV/9QR9tQFtykZyp2cndktix94306vpZXIlfCmY7DtpTmmBolHbCIVmGysebhVC19+qMSXYGAghFUqH4WAtHFdaV+P2woFekSzW3kvYlYa4yF6XqK6JJmgpai8EQpiVWFFSyNMmqs6h8YJzkJWpl5nhIO0tYPPNvfuY6XCwJvY8q39q2viGJfZxpSFXJ6ahzkzm4XsDIp2lI9nRmHx4bYf7vR/oVIy/hbPI+/CPfTDhK+Rpx9dfpVUzi6f8AXP8bcK1AwcSaK5+gWzQxb+686+F4dba7gZOWTpyKOf6qoW29KHzStUoTLWy7BuwBbReJPrd3gyMtUn/Ug8GzoFGNh2e5zSTWs4HNGPhxJhcy7gkW5lPsKAikSIsZfpIJEMtdTMr8H4jjsr4d6wTj/Zxal8opqvI+zx4dxz4Y3mPB3+FaDWKh+OAbvkySHhpwlzGkDC8TF7tXeHnewJEWXRSPI2WUVo0FJCF09AqKVzZfIIpkWNkGAGkDIUHYtLVOEBArSjPUo3E38ee464SGN28WNvE7SxrSmxgNU6pZvBu4nHzGYY5h4g8Vw1uXjn6RMhqYKOaru+tfE9X8ZfoHd8OPcNil9cMdacNPluuqTgdteDhMvZsX8oFoBAEJNPQSaH8mdTfLYv0LGmozO9XAjpfMq2192z4w== X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39400400002)(39450400003)(33646002)(48376002)(5003940100001)(53936002)(38730400002)(25786009)(2351001)(6506006)(6486002)(107886003)(4326008)(110136004)(5660300001)(36756003)(7736002)(6916009)(2950100002)(305945005)(6666003)(5890100001)(66066001)(2906002)(189998001)(50226002)(50466002)(53946003)(54906002)(508600001)(86362001)(6512007)(81166006)(8676002)(50986999)(53416004)(3846002)(76176999)(575784001)(42186005); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1989; H:xantnef-ws.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1989; 23:TDywV6aIxfHYqt5Qn5v2qXxiDzzx6J+5WOCGlH5?= =?us-ascii?Q?wegZomSNY0t6bV7QKLFp/tgc//igWYlnt2WhO/BNXYodlM4/z0bv9/iPkB4S?= =?us-ascii?Q?81KQriuUrrB/95pWbGZ/HpmlYmW/ITF7UVFlzu6r8wkxv0O0NlHItr2ofrlH?= =?us-ascii?Q?PKJz/2Uy+cDGfdT6uRgxW3szUC/TIrdixUTbFaE0u4LP+qilZmvYmlEdiXYy?= =?us-ascii?Q?upJOaKIp7Jy7RqXl+pf2sf3TGqcwQKjs65L++5vUy0IrdkWdlwTNYoDv3GMK?= =?us-ascii?Q?TzssOWgZtwOuhBcebAfIo/CIGwmF2II/CSMhMk31ZUM1MEShS3vr4hhwnekS?= =?us-ascii?Q?KA/FnMYUjioVQWti79HAmXFl8Ei6EUbuGUI+XJOq+anl7457VmsG/9li8Wpa?= =?us-ascii?Q?pOF2XetaEwDr6DcqPlEvRqc4LDX4+R1KHs5A8sdtv52Hee6U/IZYvXV3BinP?= =?us-ascii?Q?35t/Sm7NmeKhPPKl9RAtR5I2dE9ccajlzgUdmbuyBuLy0E5LrHMpp1LDUbZK?= =?us-ascii?Q?ve94AL1BOPYA8QwGa0CJ980UxzbcCBJCjHzCa+zAQ7RJGKEsoEQgq9huurnJ?= =?us-ascii?Q?wKz4nfKEQDhtdvCfXSVnDR5noy/+SHAM2zRpnPSm7yPYprfJlxdYtpeimaYc?= =?us-ascii?Q?rsr3s6BdRvwvQrP/mAXBUPGTwmMpaRc2LVcGmS8D6O+dS7iFY/4N7/nSU+6j?= =?us-ascii?Q?XFhfhhTU4NczoqkpV6Jlxu5qYOs73rvvnvo7R5i/Q5ohhRXC+aOhJwtWjxBz?= =?us-ascii?Q?gJtkyLhYjMHniDR4ZXB2T38cNh3neOzSKuiR12X/eWstqT1mZJQZmqJlbAM4?= =?us-ascii?Q?QlEQcJLPNWxqJPGRDfpVS55g50n9BbiJvIB/y0WpARF19+I9un3BM1q+Vt09?= =?us-ascii?Q?ViRyvbEQMNf/gHN4Nb5yKCCaISI/H34JR+A61j92Ef02NwVVKxTFEd2YTIyY?= =?us-ascii?Q?3D91uh5K6iUX077Ntl1ygH8pwtlSsK4kspfHakwjE5WeFGeFNvt1pMAGNfhT?= =?us-ascii?Q?X7ePClDOJST9dBhCRMOyIYGqb5fUThqEDQip4sbkj+zV5xCpb31Rrf/nDXYD?= =?us-ascii?Q?Oz3pfGi8=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 6:ouO6m+FocH9suRm/DehczRbKWNTNK3G24e6XimL9CtERHfsi7Sp3yEbiNC9rtpYOITVgDDBExISk3CnJ2rdHBDeHRPSVcb/m/9u2PC6GOqEqqLemN2Zodbt5P2fO2KbH9Yn5EZtpWRM+joBB7l5xnsyXbMhkx9okXJ0OesluAwZ5MSj/NkFnEy8LHVphS4fRg6b/LEBmSfs8/krv8y1iBXVWOlqXXWcIXjBlJ5k/lZxxCjMFg1HEVRyO6cqm0R/51REDzqDP1vOVUGqND5hrM6LIF1/0UdGatHwD9BcUPlwE/nmY5XOrqVLKC9dOx7ob3VSxlQwvpfEIkAN5Kb2ZqGcv79RNaY8UkC+zfY/rVDWzL8w+cuRou9310Y0FUaXVgqayHpk3etPgCy5NeXP7+DiihgetaJus6HV6G1rjD5qztJDU2APJmwl3nD9iShfBVN2oys4nlB/SQ9fBbOjKfCZtc1EWxfIUCo8M+Qk6DT39Zonvf7hoRJPsPrqJAgBZg3h26rd/PHUB/vXXxeSqRA==; 5:GRWNYr3Fbzt9ZqoYw3U0+Ts9yomOIt1iWSLwxu2b75sKCL80r6cDT5se8yE/Al9Lo17UEjYiKOsSLZCddkM5wiF60zNWOaKY9uTRXVP6xOFEktcMMUgm/7xFIYGD9isHk2ZuBmfkEOnjuRhAcFQmLw==; 24:jRkMUSxxNk62mkaYarkiZhf/fYulxHQZOA300RkR24+0XmxBoQPI6IgyNsrzCQAXobrzpYMddHJ0xhVjgOafw9W3CfSoyuzdcA6ucbm7Pxc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 7:VDdYrEzsExyPDImdWTI+eJciC16dVD7SOiNkPIYWESuB+Q0o+4bXIL/35pAk3/moPs0kTLkniEe4uQUuiubLrIvMhhi8Ye+l5LC4d8PcZbiKZMtuC2tExeGbWPqz3qz6GzaHq4voumvLGRtEtqU2ywrxejNbHvJU/jcS2QPblmtimIYp9Foj9M1ggBqg6FTvrw0cAtNs3ODnF6ZyTz0gm+IfHzjrZxlWUa/pXxosCiWhDxFJ1kBbzyJTdHpdG+7V73CshD9PruX352WK6+pdSMtoKuuRvthGm2vo9kKhMSfyKXl/VhP5C92Ri0C77zbAgfKXznemrMy0p7zEquZnqg==; 20:C0VWMpUXBPQCA9a9kXLsTIziWEyNCWhetVZ0QtD/3BipfwSJO2yOwPPGo2M++FY9ruazEXNj4YtWslABj9jvDZpet7FFLTOzGWeo4XeScZ3/QH73z+f+RcYzOh/DcUWsT/ZTFqu4qrbZu5zHaAYOhd1dsYSqqFfmxf+Kap+EX6Y= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2017 12:47:46.3912 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1989 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.0.136 Subject: [Qemu-devel] [PATCH v2 2/9] char: add backend hotswap handler 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: pbonzini@redhat.com, Anton Nefedov , den@virtuozzo.com, marcandre.lureau@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Frontends should have an interface to setup the handler of a backend change. The interface will be used in the next commits Signed-off-by: Anton Nefedov Reviewed-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Marc-Andr=C3=A9 Lureau --- backends/rng-egd.c | 2 +- chardev/char-mux.c | 1 + chardev/char.c | 4 +++- gdbstub.c | 2 +- hw/arm/pxa2xx.c | 3 ++- hw/arm/strongarm.c | 2 +- hw/char/bcm2835_aux.c | 2 +- hw/char/cadence_uart.c | 2 +- hw/char/debugcon.c | 2 +- hw/char/digic-uart.c | 2 +- hw/char/escc.c | 2 +- hw/char/etraxfs_ser.c | 2 +- hw/char/exynos4210_uart.c | 2 +- hw/char/grlib_apbuart.c | 2 +- hw/char/imx_serial.c | 2 +- hw/char/ipoctal232.c | 2 +- hw/char/lm32_juart.c | 2 +- hw/char/lm32_uart.c | 2 +- hw/char/mcf_uart.c | 2 +- hw/char/milkymist-uart.c | 2 +- hw/char/pl011.c | 2 +- hw/char/sclpconsole-lm.c | 2 +- hw/char/sclpconsole.c | 2 +- hw/char/serial.c | 2 +- hw/char/sh_serial.c | 2 +- hw/char/spapr_vty.c | 2 +- hw/char/stm32f2xx_usart.c | 3 ++- hw/char/terminal3270.c | 2 +- hw/char/virtio-console.c | 4 ++-- hw/char/xen_console.c | 2 +- hw/char/xilinx_uartlite.c | 2 +- hw/ipmi/ipmi_bmc_extern.c | 2 +- hw/mips/boston.c | 2 +- hw/mips/mips_malta.c | 2 +- hw/misc/ivshmem.c | 2 +- hw/usb/ccid-card-passthru.c | 2 +- hw/usb/dev-serial.c | 2 +- hw/usb/redirect.c | 2 +- include/sysemu/char.h | 5 +++++ monitor.c | 4 ++-- net/colo-compare.c | 14 ++++++++------ net/filter-mirror.c | 6 +++--- net/slirp.c | 2 +- net/vhost-user.c | 7 ++++--- qtest.c | 2 +- tests/test-char.c | 14 ++++++++++---- tests/vhost-user-test.c | 2 +- 47 files changed, 78 insertions(+), 59 deletions(-) diff --git a/backends/rng-egd.c b/backends/rng-egd.c index 380b19a..0b0e945 100644 --- a/backends/rng-egd.c +++ b/backends/rng-egd.c @@ -106,7 +106,7 @@ static void rng_egd_opened(RngBackend *b, Error **errp) =20 /* FIXME we should resubmit pending requests when the CDS reconnects. = */ qemu_chr_fe_set_handlers(&s->chr, rng_egd_chr_can_read, - rng_egd_chr_read, NULL, s, NULL, true); + rng_egd_chr_read, NULL, NULL, s, NULL, true); } =20 static void rng_egd_set_chardev(Object *obj, const char *value, Error **er= rp) diff --git a/chardev/char-mux.c b/chardev/char-mux.c index 37d42c6..5849ea5 100644 --- a/chardev/char-mux.c +++ b/chardev/char-mux.c @@ -278,6 +278,7 @@ void mux_chr_set_handlers(Chardev *chr, GMainContext *c= ontext) mux_chr_can_read, mux_chr_read, mux_chr_event, + NULL, chr, context, true); } diff --git a/chardev/char.c b/chardev/char.c index 684cccd..ae60950 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -522,7 +522,7 @@ void qemu_chr_fe_deinit(CharBackend *b) assert(b); =20 if (b->chr) { - qemu_chr_fe_set_handlers(b, NULL, NULL, NULL, NULL, NULL, true); + qemu_chr_fe_set_handlers(b, NULL, NULL, NULL, NULL, NULL, NULL, tr= ue); if (b->chr->be =3D=3D b) { b->chr->be =3D NULL; } @@ -538,6 +538,7 @@ void qemu_chr_fe_set_handlers(CharBackend *b, IOCanReadHandler *fd_can_read, IOReadHandler *fd_read, IOEventHandler *fd_event, + BackendChangeHandler *be_change, void *opaque, GMainContext *context, bool set_open) @@ -561,6 +562,7 @@ void qemu_chr_fe_set_handlers(CharBackend *b, b->chr_can_read =3D fd_can_read; b->chr_read =3D fd_read; b->chr_event =3D fd_event; + b->chr_be_change =3D be_change; b->opaque =3D opaque; if (cc->chr_update_read_handler) { cc->chr_update_read_handler(s, context); diff --git a/gdbstub.c b/gdbstub.c index 86eed4f..1ac0489 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2013,7 +2013,7 @@ int gdbserver_start(const char *device) if (chr) { qemu_chr_fe_init(&s->chr, chr, &error_abort); qemu_chr_fe_set_handlers(&s->chr, gdb_chr_can_receive, gdb_chr_rec= eive, - gdb_chr_event, NULL, NULL, true); + gdb_chr_event, NULL, NULL, NULL, true); } s->state =3D chr ? RS_IDLE : RS_INACTIVE; s->mon_chr =3D mon_chr; diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c index eea551d..3e51882 100644 --- a/hw/arm/pxa2xx.c +++ b/hw/arm/pxa2xx.c @@ -1970,7 +1970,8 @@ static void pxa2xx_fir_realize(DeviceState *dev, Erro= r **errp) PXA2xxFIrState *s =3D PXA2XX_FIR(dev); =20 qemu_chr_fe_set_handlers(&s->chr, pxa2xx_fir_is_empty, - pxa2xx_fir_rx, pxa2xx_fir_event, s, NULL, tru= e); + pxa2xx_fir_rx, pxa2xx_fir_event, NULL, s, NUL= L, + true); } =20 static bool pxa2xx_fir_vmstate_validate(void *opaque, int version_id) diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c index 3311cc3..bec093d 100644 --- a/hw/arm/strongarm.c +++ b/hw/arm/strongarm.c @@ -1246,7 +1246,7 @@ static void strongarm_uart_realize(DeviceState *dev, = Error **errp) strongarm_uart_can_receive, strongarm_uart_receive, strongarm_uart_event, - s, NULL, true); + NULL, s, NULL, true); } =20 static void strongarm_uart_reset(DeviceState *dev) diff --git a/hw/char/bcm2835_aux.c b/hw/char/bcm2835_aux.c index 4d46ad6..370dc7e 100644 --- a/hw/char/bcm2835_aux.c +++ b/hw/char/bcm2835_aux.c @@ -279,7 +279,7 @@ static void bcm2835_aux_realize(DeviceState *dev, Error= **errp) BCM2835AuxState *s =3D BCM2835_AUX(dev); =20 qemu_chr_fe_set_handlers(&s->chr, bcm2835_aux_can_receive, - bcm2835_aux_receive, NULL, s, NULL, true); + bcm2835_aux_receive, NULL, NULL, s, NULL, tru= e); } =20 static Property bcm2835_aux_props[] =3D { diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c index 4dcee57..71867b3 100644 --- a/hw/char/cadence_uart.c +++ b/hw/char/cadence_uart.c @@ -484,7 +484,7 @@ static void cadence_uart_realize(DeviceState *dev, Erro= r **errp) fifo_trigger_update, s); =20 qemu_chr_fe_set_handlers(&s->chr, uart_can_receive, uart_receive, - uart_event, s, NULL, true); + uart_event, NULL, s, NULL, true); } =20 static void cadence_uart_init(Object *obj) diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c index 80dce07..6d95297 100644 --- a/hw/char/debugcon.c +++ b/hw/char/debugcon.c @@ -92,7 +92,7 @@ static void debugcon_realize_core(DebugconState *s, Error= **errp) return; } =20 - qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, NULL, s, NULL, true); + qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, NULL, NULL, s, NULL, tru= e); } =20 static void debugcon_isa_realizefn(DeviceState *dev, Error **errp) diff --git a/hw/char/digic-uart.c b/hw/char/digic-uart.c index 029f5bb..2d373dc 100644 --- a/hw/char/digic-uart.c +++ b/hw/char/digic-uart.c @@ -146,7 +146,7 @@ static void digic_uart_realize(DeviceState *dev, Error = **errp) DigicUartState *s =3D DIGIC_UART(dev); =20 qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx, - uart_event, s, NULL, true); + uart_event, NULL, s, NULL, true); } =20 static void digic_uart_init(Object *obj) diff --git a/hw/char/escc.c b/hw/char/escc.c index 9228091..aa882b6 100644 --- a/hw/char/escc.c +++ b/hw/char/escc.c @@ -1015,7 +1015,7 @@ static void escc_realize(DeviceState *dev, Error **er= rp) if (qemu_chr_fe_get_driver(&s->chn[i].chr)) { s->chn[i].clock =3D s->frequency / 2; qemu_chr_fe_set_handlers(&s->chn[i].chr, serial_can_receive, - serial_receive1, serial_event, + serial_receive1, serial_event, NULL, &s->chn[i], NULL, true); } } diff --git a/hw/char/etraxfs_ser.c b/hw/char/etraxfs_ser.c index 5438387..4abd382 100644 --- a/hw/char/etraxfs_ser.c +++ b/hw/char/etraxfs_ser.c @@ -233,7 +233,7 @@ static void etraxfs_ser_realize(DeviceState *dev, Error= **errp) =20 qemu_chr_fe_set_handlers(&s->chr, serial_can_receive, serial_receive, - serial_event, s, NULL, true); + serial_event, NULL, s, NULL, true); } =20 static void etraxfs_ser_class_init(ObjectClass *klass, void *data) diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c index bff706a..7ef4ea5 100644 --- a/hw/char/exynos4210_uart.c +++ b/hw/char/exynos4210_uart.c @@ -644,7 +644,7 @@ static void exynos4210_uart_realize(DeviceState *dev, E= rror **errp) =20 qemu_chr_fe_set_handlers(&s->chr, exynos4210_uart_can_receive, exynos4210_uart_receive, exynos4210_uart_even= t, - s, NULL, true); + NULL, s, NULL, true); } =20 static Property exynos4210_uart_properties[] =3D { diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c index db686e6..610a317 100644 --- a/hw/char/grlib_apbuart.c +++ b/hw/char/grlib_apbuart.c @@ -247,7 +247,7 @@ static int grlib_apbuart_init(SysBusDevice *dev) grlib_apbuart_can_receive, grlib_apbuart_receive, grlib_apbuart_event, - uart, NULL, true); + NULL, uart, NULL, true); =20 sysbus_init_irq(dev, &uart->irq); =20 diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c index 52e67f8..b66396f 100644 --- a/hw/char/imx_serial.c +++ b/hw/char/imx_serial.c @@ -316,7 +316,7 @@ static void imx_serial_realize(DeviceState *dev, Error = **errp) DPRINTF("char dev for uart: %p\n", qemu_chr_fe_get_driver(&s->chr)); =20 qemu_chr_fe_set_handlers(&s->chr, imx_can_receive, imx_receive, - imx_event, s, NULL, true); + imx_event, NULL, s, NULL, true); } =20 static void imx_serial_init(Object *obj) diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c index 93929c2..734e42c 100644 --- a/hw/char/ipoctal232.c +++ b/hw/char/ipoctal232.c @@ -545,7 +545,7 @@ static void ipoctal_realize(DeviceState *dev, Error **e= rrp) if (qemu_chr_fe_get_driver(&ch->dev)) { qemu_chr_fe_set_handlers(&ch->dev, hostdev_can_receive, hostdev_receive, hostdev_event, - ch, NULL, true); + NULL, ch, NULL, true); DPRINTF("Redirecting channel %u to %s\n", i, ch->dev->label); } else { DPRINTF("Could not redirect channel %u, no chardev set\n", i); diff --git a/hw/char/lm32_juart.c b/hw/char/lm32_juart.c index f8c1e0d..b3a5351 100644 --- a/hw/char/lm32_juart.c +++ b/hw/char/lm32_juart.c @@ -119,7 +119,7 @@ static void lm32_juart_realize(DeviceState *dev, Error = **errp) LM32JuartState *s =3D LM32_JUART(dev); =20 qemu_chr_fe_set_handlers(&s->chr, juart_can_rx, juart_rx, - juart_event, s, NULL, true); + juart_event, NULL, s, NULL, true); } =20 static const VMStateDescription vmstate_lm32_juart =3D { diff --git a/hw/char/lm32_uart.c b/hw/char/lm32_uart.c index 7f3597c..3a6dbf8 100644 --- a/hw/char/lm32_uart.c +++ b/hw/char/lm32_uart.c @@ -266,7 +266,7 @@ static void lm32_uart_realize(DeviceState *dev, Error *= *errp) LM32UartState *s =3D LM32_UART(dev); =20 qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx, - uart_event, s, NULL, true); + uart_event, NULL, s, NULL, true); } =20 static const VMStateDescription vmstate_lm32_uart =3D { diff --git a/hw/char/mcf_uart.c b/hw/char/mcf_uart.c index e69672f..7f3cd5a 100644 --- a/hw/char/mcf_uart.c +++ b/hw/char/mcf_uart.c @@ -305,7 +305,7 @@ static void mcf_uart_realize(DeviceState *dev, Error **= errp) mcf_uart_state *s =3D MCF_UART(dev); =20 qemu_chr_fe_set_handlers(&s->chr, mcf_uart_can_receive, mcf_uart_recei= ve, - mcf_uart_event, s, NULL, true); + mcf_uart_event, NULL, s, NULL, true); } =20 static Property mcf_uart_properties[] =3D { diff --git a/hw/char/milkymist-uart.c b/hw/char/milkymist-uart.c index ae8e2f3..523959a 100644 --- a/hw/char/milkymist-uart.c +++ b/hw/char/milkymist-uart.c @@ -199,7 +199,7 @@ static void milkymist_uart_realize(DeviceState *dev, Er= ror **errp) MilkymistUartState *s =3D MILKYMIST_UART(dev); =20 qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx, - uart_event, s, NULL, true); + uart_event, NULL, s, NULL, true); } =20 static void milkymist_uart_init(Object *obj) diff --git a/hw/char/pl011.c b/hw/char/pl011.c index 24ea973..c38f60a 100644 --- a/hw/char/pl011.c +++ b/hw/char/pl011.c @@ -329,7 +329,7 @@ static void pl011_realize(DeviceState *dev, Error **err= p) PL011State *s =3D PL011(dev); =20 qemu_chr_fe_set_handlers(&s->chr, pl011_can_receive, pl011_receive, - pl011_event, s, NULL, true); + pl011_event, NULL, s, NULL, true); } =20 static void pl011_class_init(ObjectClass *oc, void *data) diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c index 07d6ebd..ed1e2c5 100644 --- a/hw/char/sclpconsole-lm.c +++ b/hw/char/sclpconsole-lm.c @@ -313,7 +313,7 @@ static int console_init(SCLPEvent *event) console_available =3D true; =20 qemu_chr_fe_set_handlers(&scon->chr, chr_can_read, - chr_read, NULL, scon, NULL, true); + chr_read, NULL, NULL, scon, NULL, true); =20 return 0; } diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c index b78f240..9a65010 100644 --- a/hw/char/sclpconsole.c +++ b/hw/char/sclpconsole.c @@ -228,7 +228,7 @@ static int console_init(SCLPEvent *event) } console_available =3D true; qemu_chr_fe_set_handlers(&scon->chr, chr_can_read, - chr_read, NULL, scon, NULL, true); + chr_read, NULL, NULL, scon, NULL, true); =20 return 0; } diff --git a/hw/char/serial.c b/hw/char/serial.c index 03d890c..d8d34d0 100644 --- a/hw/char/serial.c +++ b/hw/char/serial.c @@ -897,7 +897,7 @@ void serial_realize_core(SerialState *s, Error **errp) qemu_register_reset(serial_reset, s); =20 qemu_chr_fe_set_handlers(&s->chr, serial_can_receive1, serial_receive1, - serial_event, s, NULL, true); + serial_event, NULL, s, NULL, true); fifo8_create(&s->recv_fifo, UART_FIFO_LENGTH); fifo8_create(&s->xmit_fifo, UART_FIFO_LENGTH); serial_reset(s); diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c index 303eb0a..c352337 100644 --- a/hw/char/sh_serial.c +++ b/hw/char/sh_serial.c @@ -400,7 +400,7 @@ void sh_serial_init(MemoryRegion *sysmem, qemu_chr_fe_init(&s->chr, chr, &error_abort); qemu_chr_fe_set_handlers(&s->chr, sh_serial_can_receive1, sh_serial_receive1, - sh_serial_event, s, NULL, true); + sh_serial_event, NULL, s, NULL, true); } =20 s->eri =3D eri_source; diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c index e30c8da..9cdc0e0 100644 --- a/hw/char/spapr_vty.c +++ b/hw/char/spapr_vty.c @@ -84,7 +84,7 @@ static void spapr_vty_realize(VIOsPAPRDevice *sdev, Error= **errp) } =20 qemu_chr_fe_set_handlers(&dev->chardev, vty_can_receive, - vty_receive, NULL, dev, NULL, true); + vty_receive, NULL, NULL, dev, NULL, true); } =20 /* Forward declaration */ diff --git a/hw/char/stm32f2xx_usart.c b/hw/char/stm32f2xx_usart.c index 59872e6..268e435 100644 --- a/hw/char/stm32f2xx_usart.c +++ b/hw/char/stm32f2xx_usart.c @@ -207,7 +207,8 @@ static void stm32f2xx_usart_realize(DeviceState *dev, E= rror **errp) STM32F2XXUsartState *s =3D STM32F2XX_USART(dev); =20 qemu_chr_fe_set_handlers(&s->chr, stm32f2xx_usart_can_receive, - stm32f2xx_usart_receive, NULL, s, NULL, true); + stm32f2xx_usart_receive, NULL, NULL, + s, NULL, true); } =20 static void stm32f2xx_usart_class_init(ObjectClass *klass, void *data) diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c index b2dda01..943a0f3 100644 --- a/hw/char/terminal3270.c +++ b/hw/char/terminal3270.c @@ -179,7 +179,7 @@ static void terminal_init(EmulatedCcw3270Device *dev, E= rror **errp) } terminal_available =3D true; qemu_chr_fe_set_handlers(&t->chr, terminal_can_read, - terminal_read, chr_event, t, NULL, true); + terminal_read, chr_event, NULL, t, NULL, true= ); } =20 static int read_payload_3270(EmulatedCcw3270Device *dev, uint32_t cda, diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c index 798d9b6..cf7331d 100644 --- a/hw/char/virtio-console.c +++ b/hw/char/virtio-console.c @@ -188,11 +188,11 @@ static void virtconsole_realize(DeviceState *dev, Err= or **errp) */ if (k->is_console) { qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, - NULL, vcon, NULL, true); + NULL, NULL, vcon, NULL, true); virtio_serial_open(port); } else { qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, - chr_event, vcon, NULL, false); + chr_event, NULL, vcon, NULL, false); } } } diff --git a/hw/char/xen_console.c b/hw/char/xen_console.c index c01f410..cb7975f 100644 --- a/hw/char/xen_console.c +++ b/hw/char/xen_console.c @@ -246,7 +246,7 @@ static int con_initialise(struct XenDevice *xendev) =20 xen_be_bind_evtchn(&con->xendev); qemu_chr_fe_set_handlers(&con->chr, xencons_can_receive, - xencons_receive, NULL, con, NULL, true); + xencons_receive, NULL, NULL, con, NULL, true); =20 xen_pv_printf(xendev, 1, "ring mfn %d, remote port %d, local port %d, limit %zd\n= ", diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c index 37d313b..2568302 100644 --- a/hw/char/xilinx_uartlite.c +++ b/hw/char/xilinx_uartlite.c @@ -212,7 +212,7 @@ static void xilinx_uartlite_realize(DeviceState *dev, E= rror **errp) XilinxUARTLite *s =3D XILINX_UARTLITE(dev); =20 qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx, - uart_event, s, NULL, true); + uart_event, NULL, s, NULL, true); } =20 static void xilinx_uartlite_init(Object *obj) diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c index e8e3d25..6f2339d 100644 --- a/hw/ipmi/ipmi_bmc_extern.c +++ b/hw/ipmi/ipmi_bmc_extern.c @@ -453,7 +453,7 @@ static void ipmi_bmc_extern_realize(DeviceState *dev, E= rror **errp) } =20 qemu_chr_fe_set_handlers(&ibe->chr, can_receive, receive, - chr_event, ibe, NULL, true); + chr_event, NULL, ibe, NULL, true); } =20 static int ipmi_bmc_extern_post_migrate(void *opaque, int version_id) diff --git a/hw/mips/boston.c b/hw/mips/boston.c index 83f7b82..a57c860 100644 --- a/hw/mips/boston.c +++ b/hw/mips/boston.c @@ -533,7 +533,7 @@ static void boston_mach_init(MachineState *machine) chr =3D qemu_chr_new("lcd", "vc:320x240"); qemu_chr_fe_init(&s->lcd_display, chr, NULL); qemu_chr_fe_set_handlers(&s->lcd_display, NULL, NULL, - boston_lcd_event, s, NULL, true); + boston_lcd_event, NULL, s, NULL, true); =20 ahci =3D pci_create_simple_multifunction(&PCI_BRIDGE(&pcie2->root)->se= c_bus, PCI_DEVFN(0, 0), diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c index 5dd177e..96dce76 100644 --- a/hw/mips/mips_malta.c +++ b/hw/mips/mips_malta.c @@ -571,7 +571,7 @@ static MaltaFPGAState *malta_fpga_init(MemoryRegion *ad= dress_space, chr =3D qemu_chr_new("fpga", "vc:320x200"); qemu_chr_fe_init(&s->display, chr, NULL); qemu_chr_fe_set_handlers(&s->display, NULL, NULL, - malta_fgpa_display_event, s, NULL, true); + malta_fgpa_display_event, NULL, s, NULL, true= ); =20 s->uart =3D serial_mm_init(address_space, base + 0x900, 3, uart_irq, 230400, uart_chr, DEVICE_NATIVE_ENDIAN); diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c index 475e36a..e2dece8 100644 --- a/hw/misc/ivshmem.c +++ b/hw/misc/ivshmem.c @@ -896,7 +896,7 @@ static void ivshmem_common_realize(PCIDevice *dev, Erro= r **errp) } =20 qemu_chr_fe_set_handlers(&s->server_chr, ivshmem_can_receive, - ivshmem_read, NULL, s, NULL, true); + ivshmem_read, NULL, NULL, s, NULL, true); =20 if (ivshmem_setup_interrupts(s, errp) < 0) { error_prepend(errp, "Failed to initialize interrupts: "); diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c index a41b0d6..9ace5ac 100644 --- a/hw/usb/ccid-card-passthru.c +++ b/hw/usb/ccid-card-passthru.c @@ -351,7 +351,7 @@ static int passthru_initfn(CCIDCardState *base) qemu_chr_fe_set_handlers(&card->cs, ccid_card_vscard_can_read, ccid_card_vscard_read, - ccid_card_vscard_event, card, NULL, true); + ccid_card_vscard_event, NULL, card, NULL, true); ccid_card_vscard_send_init(card); } else { error_report("missing chardev"); diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index 83a4f0e..e6b2c7c 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -501,7 +501,7 @@ static void usb_serial_realize(USBDevice *dev, Error **= errp) } =20 qemu_chr_fe_set_handlers(&s->cs, usb_serial_can_read, usb_serial_read, - usb_serial_event, s, NULL, true); + usb_serial_event, NULL, s, NULL, true); usb_serial_handle_reset(dev); =20 if (chr->be_open && !dev->attached) { diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c index ad5ef78..1e9bf69 100644 --- a/hw/usb/redirect.c +++ b/hw/usb/redirect.c @@ -1399,7 +1399,7 @@ static void usbredir_realize(USBDevice *udev, Error *= *errp) /* Let the backend know we are ready */ qemu_chr_fe_set_handlers(&dev->cs, usbredir_chardev_can_read, usbredir_chardev_read, usbredir_chardev_event, - dev, NULL, true); + NULL, dev, NULL, true); =20 dev->vmstate =3D qemu_add_vm_change_state_handler(usbredir_vm_state_change, dev); diff --git a/include/sysemu/char.h b/include/sysemu/char.h index fffc0f4..9f8df07 100644 --- a/include/sysemu/char.h +++ b/include/sysemu/char.h @@ -64,6 +64,7 @@ struct ParallelIOArg { #define CHR_TIOCM_RTS 0x004 =20 typedef void IOEventHandler(void *opaque, int event); +typedef int BackendChangeHandler(void *opaque); =20 typedef enum { /* Whether the chardev peer is able to close and @@ -87,6 +88,7 @@ typedef struct CharBackend { IOEventHandler *chr_event; IOCanReadHandler *chr_can_read; IOReadHandler *chr_read; + BackendChangeHandler *chr_be_change; void *opaque; int tag; int fe_open; @@ -399,6 +401,8 @@ void qemu_chr_fe_deinit(CharBackend *b); * receive * @fd_read: callback to receive data from char * @fd_event: event callback + * @be_change: backend change callback; passing NULL means hot backend cha= nge + * is not supported and will not be attempted * @opaque: an opaque pointer for the callbacks * @context: a main loop context or NULL for the default * @set_open: whether to call qemu_chr_fe_set_open() implicitely when @@ -413,6 +417,7 @@ void qemu_chr_fe_set_handlers(CharBackend *b, IOCanReadHandler *fd_can_read, IOReadHandler *fd_read, IOEventHandler *fd_event, + BackendChangeHandler *be_change, void *opaque, GMainContext *context, bool set_open); diff --git a/monitor.c b/monitor.c index afbacfe..9057ad3 100644 --- a/monitor.c +++ b/monitor.c @@ -4088,12 +4088,12 @@ void monitor_init(Chardev *chr, int flags) =20 if (monitor_is_qmp(mon)) { qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read, monitor_qmp_= read, - monitor_qmp_event, mon, NULL, true); + monitor_qmp_event, NULL, mon, NULL, true); qemu_chr_fe_set_echo(&mon->chr, true); json_message_parser_init(&mon->qmp.parser, handle_qmp_command); } else { qemu_chr_fe_set_handlers(&mon->chr, monitor_can_read, monitor_read, - monitor_event, mon, NULL, true); + monitor_event, NULL, mon, NULL, true); } =20 qemu_mutex_lock(&monitor_lock); diff --git a/net/colo-compare.c b/net/colo-compare.c index 4ab80b1..f672f4f 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -532,7 +532,7 @@ static void compare_pri_chr_in(void *opaque, const uint= 8_t *buf, int size) =20 ret =3D net_fill_rstate(&s->pri_rs, buf, size); if (ret =3D=3D -1) { - qemu_chr_fe_set_handlers(&s->chr_pri_in, NULL, NULL, NULL, + qemu_chr_fe_set_handlers(&s->chr_pri_in, NULL, NULL, NULL, NULL, NULL, NULL, true); error_report("colo-compare primary_in error"); } @@ -549,7 +549,7 @@ static void compare_sec_chr_in(void *opaque, const uint= 8_t *buf, int size) =20 ret =3D net_fill_rstate(&s->sec_rs, buf, size); if (ret =3D=3D -1) { - qemu_chr_fe_set_handlers(&s->chr_sec_in, NULL, NULL, NULL, + qemu_chr_fe_set_handlers(&s->chr_sec_in, NULL, NULL, NULL, NULL, NULL, NULL, true); error_report("colo-compare secondary_in error"); } @@ -577,9 +577,11 @@ static void *colo_compare_thread(void *opaque) s->worker_context =3D g_main_context_new(); =20 qemu_chr_fe_set_handlers(&s->chr_pri_in, compare_chr_can_read, - compare_pri_chr_in, NULL, s, s->worker_context, = true); + compare_pri_chr_in, NULL, NULL, + s, s->worker_context, true); qemu_chr_fe_set_handlers(&s->chr_sec_in, compare_chr_can_read, - compare_sec_chr_in, NULL, s, s->worker_context, = true); + compare_sec_chr_in, NULL, NULL, + s, s->worker_context, true); =20 s->compare_loop =3D g_main_loop_new(s->worker_context, FALSE); =20 @@ -790,9 +792,9 @@ static void colo_compare_finalize(Object *obj) { CompareState *s =3D COLO_COMPARE(obj); =20 - qemu_chr_fe_set_handlers(&s->chr_pri_in, NULL, NULL, NULL, NULL, + qemu_chr_fe_set_handlers(&s->chr_pri_in, NULL, NULL, NULL, NULL, NULL, s->worker_context, true); - qemu_chr_fe_set_handlers(&s->chr_sec_in, NULL, NULL, NULL, NULL, + qemu_chr_fe_set_handlers(&s->chr_sec_in, NULL, NULL, NULL, NULL, NULL, s->worker_context, true); qemu_chr_fe_deinit(&s->chr_out); =20 diff --git a/net/filter-mirror.c b/net/filter-mirror.c index 72fa7c2..06321d7 100644 --- a/net/filter-mirror.c +++ b/net/filter-mirror.c @@ -112,7 +112,7 @@ static void redirector_chr_read(void *opaque, const uin= t8_t *buf, int size) =20 if (ret =3D=3D -1) { qemu_chr_fe_set_handlers(&s->chr_in, NULL, NULL, NULL, - NULL, NULL, true); + NULL, NULL, NULL, true); } } =20 @@ -124,7 +124,7 @@ static void redirector_chr_event(void *opaque, int even= t) switch (event) { case CHR_EVENT_CLOSED: qemu_chr_fe_set_handlers(&s->chr_in, NULL, NULL, NULL, - NULL, NULL, true); + NULL, NULL, NULL, true); break; default: break; @@ -251,7 +251,7 @@ static void filter_redirector_setup(NetFilterState *nf,= Error **errp) =20 qemu_chr_fe_set_handlers(&s->chr_in, redirector_chr_can_read, redirector_chr_read, redirector_chr_event, - nf, NULL, true); + NULL, nf, NULL, true); } =20 if (s->outdev) { diff --git a/net/slirp.c b/net/slirp.c index c705a60..6cbae5a 100644 --- a/net/slirp.c +++ b/net/slirp.c @@ -778,7 +778,7 @@ static int slirp_guestfwd(SlirpState *s, const char *co= nfig_str, fwd->slirp =3D s->slirp; =20 qemu_chr_fe_set_handlers(&fwd->hd, guestfwd_can_read, guestfwd_rea= d, - NULL, fwd, NULL, true); + NULL, NULL, fwd, NULL, true); } return 0; =20 diff --git a/net/vhost-user.c b/net/vhost-user.c index 00a0c1c..d090311 100644 --- a/net/vhost-user.c +++ b/net/vhost-user.c @@ -214,7 +214,7 @@ static void chr_closed_bh(void *opaque) vhost_user_stop(queues, ncs); =20 qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, net_vhost_user_event, - opaque, NULL, true); + NULL, opaque, NULL, true); =20 if (err) { error_report_err(err); @@ -260,7 +260,7 @@ static void net_vhost_user_event(void *opaque, int even= t) =20 g_source_remove(s->watch); s->watch =3D 0; - qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, NULL, + qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, NULL, NULL, NULL, NULL, false); =20 aio_bh_schedule_oneshot(ctx, chr_closed_bh, opaque); @@ -308,7 +308,8 @@ static int net_vhost_user_init(NetClientState *peer, co= nst char *device, return -1; } qemu_chr_fe_set_handlers(&s->chr, NULL, NULL, - net_vhost_user_event, nc0->name, NULL, tr= ue); + net_vhost_user_event, NULL, nc0->name, NU= LL, + true); } while (!s->started); =20 assert(s->vhost_net); diff --git a/qtest.c b/qtest.c index 5aa6636..b6e9780 100644 --- a/qtest.c +++ b/qtest.c @@ -691,7 +691,7 @@ void qtest_init(const char *qtest_chrdev, const char *q= test_log, Error **errp) =20 qemu_chr_fe_init(&qtest_chr, chr, errp); qemu_chr_fe_set_handlers(&qtest_chr, qtest_can_read, qtest_read, - qtest_event, &qtest_chr, NULL, true); + qtest_event, NULL, &qtest_chr, NULL, true); qemu_chr_fe_set_echo(&qtest_chr, true); =20 inbuf =3D g_string_new(""); diff --git a/tests/test-char.c b/tests/test-char.c index 124d0c5..f3b377f 100644 --- a/tests/test-char.c +++ b/tests/test-char.c @@ -182,6 +182,7 @@ static void char_mux_test(void) fe_can_read, fe_read, fe_event, + NULL, &h1, NULL, true); =20 @@ -190,6 +191,7 @@ static void char_mux_test(void) fe_can_read, fe_read, fe_event, + NULL, &h2, NULL, true); qemu_chr_fe_take_focus(&chr_be2); @@ -213,7 +215,8 @@ static void char_mux_test(void) h1.read_count =3D 0; =20 /* remove first handler */ - qemu_chr_fe_set_handlers(&chr_be1, NULL, NULL, NULL, NULL, NULL, true); + qemu_chr_fe_set_handlers(&chr_be1, NULL, NULL, NULL, NULL, + NULL, NULL, true); qemu_chr_be_write(base, (void *)"hello", 6); g_assert_cmpint(h1.read_count, =3D=3D, 0); g_assert_cmpint(h2.read_count, =3D=3D, 0); @@ -312,13 +315,13 @@ static void char_socket_test(void) =20 qemu_chr_fe_init(&be, chr, &error_abort); qemu_chr_fe_set_handlers(&be, socket_can_read, socket_read, - NULL, &d, NULL, true); + NULL, NULL, &d, NULL, true); =20 chr_client =3D qemu_chr_new("client", tmp); qemu_chr_fe_init(&client_be, chr_client, &error_abort); qemu_chr_fe_set_handlers(&client_be, socket_can_read_hello, socket_read_hello, - NULL, &d, NULL, true); + NULL, NULL, &d, NULL, true); g_free(tmp); =20 d.conn_expected =3D true; @@ -388,6 +391,7 @@ static void char_pipe_test(void) fe_can_read, fe_read, fe_event, + NULL, &fe, NULL, true); =20 @@ -437,7 +441,7 @@ static void char_udp_test(void) d.chr =3D chr; qemu_chr_fe_init(&be, chr, &error_abort); qemu_chr_fe_set_handlers(&be, socket_can_read_hello, socket_read_hello, - NULL, &d, NULL, true); + NULL, NULL, &d, NULL, true); ret =3D qemu_chr_write_all(chr, (uint8_t *)"hello", 5); g_assert_cmpint(ret, =3D=3D, 5); =20 @@ -503,6 +507,7 @@ static void char_file_test(void) fe_can_read, fe_read, fe_event, + NULL, &fe, NULL, true); =20 main_loop(); @@ -558,6 +563,7 @@ static void char_null_test(void) fe_can_read, fe_read, fe_event, + NULL, NULL, NULL, true); =20 ret =3D qemu_chr_fe_write(&be, (void *)"buf", 4); diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c index 9095af2..718c08a 100644 --- a/tests/vhost-user-test.c +++ b/tests/vhost-user-test.c @@ -464,7 +464,7 @@ static void test_server_create_chr(TestServer *server, = const gchar *opt) =20 qemu_chr_fe_init(&server->chr, chr, &error_abort); qemu_chr_fe_set_handlers(&server->chr, chr_can_read, chr_read, - chr_event, server, NULL, true); + chr_event, NULL, server, NULL, true); } =20 static void test_server_listen(TestServer *server) --=20 2.7.4 From nobody Mon Apr 29 00:20:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495198361518790.137201944422; Fri, 19 May 2017 05:52:41 -0700 (PDT) Received: from localhost ([::1]:58641 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhOa-00041E-4Z for importer@patchew.org; Fri, 19 May 2017 08:52:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46858) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhK0-0000Zv-8X for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dBhJy-0004J5-Cc for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:56 -0400 Received: from mail-eopbgr00136.outbound.protection.outlook.com ([40.107.0.136]:31167 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dBhJy-0004AG-4t for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:54 -0400 Received: from xantnef-ws.sw.ru (195.214.232.6) by DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Fri, 19 May 2017 12:47:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=6Fe/ZYL0Whx+fDtDLEoVZqcUQx6yWdBosJT+0xxUHBA=; b=RzAkB4sJR7SlCasAmGbZxQORTY1fBWnXsKNIERN6Ok90AcnZC9Rhns362mxd46HZVi+jXs+61Fp6nYLnyyDUnv9oBAD3XQ3kO6Sz1s+0ulB1t2XOgGrUGFnG5Wxb3YZGfXeX0zy39y8YOu8LZEGndjGf/Il8+N/sa0VAr0KpoH8= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Anton Nefedov To: Date: Fri, 19 May 2017 15:47:16 +0300 Message-ID: <1495198042-124203-4-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0002.EURPRD10.PROD.OUTLOOK.COM (10.171.79.12) To DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB6PR0801MB1989: X-MS-Office365-Filtering-Correlation-Id: 0c5dbdda-5782-4660-4f6b-08d49eb54143 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 3:VPpPKh7w/8L5JRslw5XdnRkLoDZ92ZXoX/58izQlJ9USC8HzVaR65GJ3N9j02y4itxFS8DKjZgUHbfBnvFKod8tzXHiPu4sAeHFkzOlecaoWvqvEFIHf36WHw7HM1zyR09LyC/KXZXfPB7likT5gn9nVk4Uh4xCqRaXJwJzZ/IaGhyI01oYrRRrXQm5uK2hQZTEYIDL3j3tKJlBHDtpxOa7u+CPSaX95O8LeM0KettZcUxcd0wAfkpgxhsCkx0zadtJRmOhfwfBMIu6GRoV9ED1ouW3/d+g29v+Tr5VdqLINp1sdwi6iXKuIs0GTPp3qUyOI91cwjnLL9gV0OujFIw==; 25:+E6HT0HJOpnx2Xe4OpHKG+xRnc9uf7pFaijQ8VPxenL1vDLAcuvHReWobYmD1tmOkswPkPgHMaqiUILzJNl+Hdd0q0PPk1vTgpBiqWZZ3KEpyfUxFiM2tcEcNpBV+heE9UCNC4TV7xfE8UUbwXQQcypbd+BSjrOgIrRBH+JpsTi+TACQMvEO10ViFVL1DvvNrkC0ApJNC+EWG5tGdIhO7/1ExQuJIT1ReFH8BjejT7vT9ltSY1xacDXc/d5+nw4Ngo+BvPMlQh3h56GKHaZgrLcn3SXYt+TqW7027A6SXn6GzRjfRVA8SDGWI05bUNM6T+vl17EPYirhRsL0sR0N/cqTx8IyA2IODeUI/WBnERVxmkKHGzRPU6utFM9O46lDCXRyJ0xGeNB2GKenpQQE5vaTIbklex04MQgW7TWZytt10JzJNM6ySALOssCqlBaJH0cR0fYGcePx8NPcx0qymMpi/DMBeQwsh0zWFqXGtjk= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 31:NZolQEz2jWQC0fwIKBgz4QH44LK6oj2ZMLvOp+UqKYuighCqDYC0p9wBwzRMaEZ1hf1aCZbRB0DvJDme51gwWcNTqQABmz6xEj3GungLVmHAccNkJMlWfFYWhXLZ01Aw1mtxFCf+iqgDbDD6lTYKlcNXOiFOWVqB8TFNrR4GnANacfod5ADrIWKRRWklzzeLk/rkE6RvkguKmLoICgDFFJG7ganyt+00FWSjJRNCl+8=; 20:Byw83l7FmTdMx62gpg3gYjzK4Scg8Kpl5OzVdOskRIxiLuDvmNfvyxS/PdzEqw/DxDAQE2uxjZfwBeIB3INHZAhUhh6TsaoHGApaLHQz/PnX6qxNrTgeSPb+wFLswnmtiacH4+H1oHrwpMYxCk1eoCJcvctW1fCwZMizhc0QCfAqJ1rvejKkktFa48t1pVeP7/Qq4vDCwM92iME1Z3Bju8ICFfU4TTg5ShwXiEhw0nmEEprjX5hUKAo7L0Km31nAf6YvBi42XgcymFqAJRV3EbJA6tzZUmq0gIO+YToTPOLu0t0g0B+cFMTXhfEst9+WhiyAtWnRWiU19vhm5jfT0/J+NUnjLoshIMH4s6PBEFM8PzB7iOxnPk7lJrD+R4+Tce/x1ShmiUxS5d/vLhUaiyIXuhGVqkk8F4BWogAF7fY= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(158342451672863); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123560025)(20161123555025)(20161123558100)(20161123562025)(20161123564025)(201703131423075)(201703061421075)(6072148); SRVR:DB6PR0801MB1989; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 4:omL4vgfuYoD3LX0O6W1GcrJusOLMmhE/4nKY0o0lX9OkZLSy0D3VurDF+r8N2gw2oBIlUkH5dBHqOaVm+svI/dEWaHlEA+cOT3kKOAwEE+kntHmZP5ZOVuQSjkHfzfeMvw+LzPCWhR5He9xA4POSa8W6rswisYj2LtEHDhISgIS4zc6bYvJRBpxUWvcDPjnAPfva2htcwq5Q9EPZySZQEsbQQY0U425WVlWUa7D6zhE5bbH1x7TdWVY4w/UvqMuXqHHwAKRHHcizqHnm+BOdqji6yCcnKO83MQrZRAA3tfgiZ8OqEbbeA8A5n60l9rdXvMhpQ4fX3pCk5hRiknQAXCpqkOhepueJAeicfqto3gkObjB6Ji8JMaHGao65Jb/fdA7llGXhnTIBGeolMVcsx8a7PakNfkGpCcFdTotip2yVjiIGl/f9PHO4qZIf7zfEpaHosXlMZSnj+SfNX8o96KWayQ5A3527aOJhDF+U5D6FnIyi8dztUtE1kJ+OfnD7LXaFFh1wnUveJGvUgVhPaQoWnegAX29tPjz8/J+kuC+ZSlUvR/IDktdP1Hvx057+ndN+bJf1uwPx4T6wW3tPd/Wi51jMJhHC+soDUO8i7z7cPtc6cxFmetTwf8PPwHXPWAGYuTtuW0eoF3bJ5xBSTo6ErlL5vn8LNX8aQvV/dZ7N8Bm9Z8PpLiSmTFErsYNOEXZWO8kcQtAtyaudncLDTFt6jZ7lu3lhN1pNYkLGLYcAe4qmdd8ddR7aabB7/LlgKKl3gSD9vUTunNMb9vFSkA== X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39400400002)(39450400003)(33646002)(48376002)(5003940100001)(53936002)(38730400002)(25786009)(2351001)(6506006)(6486002)(107886003)(4326008)(110136004)(5660300001)(36756003)(7736002)(6916009)(2950100002)(305945005)(6666003)(66066001)(2906002)(189998001)(50226002)(50466002)(54906002)(508600001)(86362001)(6512007)(81166006)(8676002)(50986999)(53416004)(3846002)(76176999)(42186005); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1989; H:xantnef-ws.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1989; 23:JmcYiHsk/ADksldt0Myajx0sL7xumkzoOlmcBtL?= =?us-ascii?Q?yTcQmm8XfVShRWbeH4ZDjU+EQM2Y0PKJ4PCaKCYqI71vu9MYkbkXW3YcjgOG?= =?us-ascii?Q?wl5r5wHzuWbiPrO29DeMwABkZ2P0Glxt3MR3vksTua9fs7kzmZph06yQdc5i?= =?us-ascii?Q?VHMJ7C0Cag1luHEiNA9chokiWYHGAznsHM9SrimJsp4+qTAXq8BK4NAhtRTv?= =?us-ascii?Q?RZ13y+mWI/13mI1ykqiiaifolVt0yEBSXe0uIOnWlELCsmefsOVk0q0sj+sJ?= =?us-ascii?Q?sohgq/lGFHNVuZkwqq4S//hgR3FUOdwSFP4vu3cL1oJfTP763kIms2TA5Ivo?= =?us-ascii?Q?AhF/1zwYKNIFFbpV17X9AtAHjcV/7Vhf4VoIdGjbRqeLNM2u93hbKnwj2Qcg?= =?us-ascii?Q?hAaVjqMhfmU8rW2TUhRfPuPIg2DgTlYwu1nREvuJFqaMjKnr834xA9R5Encx?= =?us-ascii?Q?UTmZ2YAmqcSGI+19v3V4TsggT/tYz+jhorAb767GLrS0k8PrZhKgVz+MJvti?= =?us-ascii?Q?Twx6DjtIzsdGg5UnzQVekXGuYs/8SpGGxtCnFphbAz9iZp3fed7xmLtmWlcW?= =?us-ascii?Q?PVKxHnH63vDVemeXYYnF3kf1mEMPL8PvnpNzsNqNMEhJYy/uE6u0oNsTBL0m?= =?us-ascii?Q?YKEOC3LPNmU+D6bd4K6KHbdJuXRQawFwuE3Q0oLusdq4AImnlAxQVuVkzwPM?= =?us-ascii?Q?YTBWTCjNxqRlieVGvR6V0VE8vVyQ0+1UxxxF5AnRYmyZXzvN0hDpSsTqIwWH?= =?us-ascii?Q?q/kNlfKVhmI7hTj1QOXzymvd/kdem8Xo5zC/qBrpM30baI21AYmN2N03IwQU?= =?us-ascii?Q?0lyzb6mwhCtKX8VNArdgQVBnTUOJFVc7C37Y7186KCxZCoi+y7FckDIxp8DW?= =?us-ascii?Q?Kknf2JfbveV5iOjbIm+1GoWPXGhB6DrxHk/QVe9eFArlQKfjF9wwbAGTRNkc?= =?us-ascii?Q?uMomO1e8V7nm5m/L7yKRs/7PhA0refvUFknqLDTz/FZX8W6LUEC5wsSM8LZO?= =?us-ascii?Q?wM1s=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 6:H7iGVDZVtR+VB5DuscGv/BgPTB09yKbXJPFrZv0/O3sfeBQRrEc8ZxAWMsGu/eFDQjVEZIznyEDpK1za2Z974jlgkFWJuiXkUFYkEJCXgQTGUDZ1ZX3vRR2m0eaaQ/NWt7zObxCVKch/x5WbmOLuiRjiUlG7rTzdYAOUIOBwhupbOUMDPywbb4nsAs3DOuo02QUmEY7Xq06W9Cs1B3Hv2mHSAaKaZxR1UaTTdfXz7AaFlkA7U2HX6wHJ3A+daPY3sag7JAXsaDrgq/iukOq6GKm717GHOQi7evBWXD6EHKQNp2eZ7+CkIPFium09c6v7VGJVTDA3reqRrse/0wvbFMxRGO1oTtcWF0S6KYW7z6W1axhgpotDIu2NvTCRVUPI9jWEgzL8l7Z/+JPPbQy1lVsDiCwbyU1VBOTpewQ8qPfrMM0M8TkRSyHfLSNyPMe9HHtjp+5AHQfrIyKYUfUbeOGRTI2Ob2rzSonZQCcp350gCXNBkb1oaH1KwteD+2hBemH7fpcqeuWahnkk2wSslg==; 5:s0YYqG9HTMbJZfOVm8ihsD3hoZROGWll0RzVDOM79OHl5KDfGDCMG8lPRhH/qjyp6IGNzHKY4iLCULBoNC0bs29nS64Qo6Y0mI1iAnRIQXZtxhuQLO7mE2AHWSnfy7+PRWrYJBqvbolyV1b2WNrZrQ==; 24:IgYobwYFIJirXbjd+LnH7nJ1FA3fn7nj9omFUe8xJ9HYsVR0U2+oIiYdD32j2itWv7uc7qnjtEfTbEMdk87cBumOoEG3XD3E2D0Gt77BKv4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 7:SFemqQFmuXK/yg0huY+pGioj1gJFEwTfAzMHPOcxDPI2vmsQaj7CfqDmj23XeKsEjVO5mG77/rsNxMXTcmUIr/ErvMDUgvmlt3B1iaSOB2q8aIC4ktbOz7tNHMaGIdBj60PaJnJF2j10F9ma+MtjLAgU4VfKCB/fVg9b3AqzYnkGrYJ6SSeYFcZZ1oqxj4jLBKE5ZT3WtCSYcBTXkTrcTtCleCHr8ytGPPP8WTNuIz9mz9QC7+2PMEW7weqilTcFGZR8ZCfDEPH1ccd/kwJkvOc9ibUyFdQK74xMOm6PYcIfefqc/Bt+RHhuh4FevMFv5K8O8zhXMPv5ddPb0L/tzw==; 20:npcmjTRmfmUORfj3/HvBn08R6B2wFjESS9aAhjmRVvjKizbbcoi+FKm2XFnmXHpZkTriyz5cCdHDqIv+cIGeeLvE4AEOuLCca2OPm7OoZLLM7Jrqr8tnX6btlESj2vaqZ+r8NyfePrH8+FK/Av/tlPJo9EdMMoeAhpnhgsDat2M= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2017 12:47:48.2808 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1989 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.0.136 Subject: [Qemu-devel] [PATCH v2 3/9] char: chardevice hotswap 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: pbonzini@redhat.com, Anton Nefedov , den@virtuozzo.com, marcandre.lureau@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" This patch adds a possibility to change a char device without a frontend removal. 1. Ideally, it would have to happen transparently to a frontend, i.e. frontend would continue its regular operation. However, backends are not stateless and are set up by the frontends via qemu_chr_fe_<> functions, and it's not (generally) possible to replay that setup entirely in a backend code, as different chardevs respond to the setup calls differently, so do frontends work differently basing on those setup responses. Moreover, some frontend can generally get and save the backend pointer (qemu_chr_fe_get_driver()), and it will become invalid after backend change. So, a frontend which would like to support chardev hotswap has to register a "backend change" handler, and redo its backend setup there. 2. Write path can be used by multiple threads and thus protected with chr_write_lock. So hotswap also has to be protected so write functions won't access a backend being replaced. 3. Hotswap function can be called from e.g. a read handler of a monitor socket. This can cause troubles so it's safer to defer execution to a bottom-half (however, it means we cannot return some of the errors synchronously - but most of them we can) Signed-off-by: Anton Nefedov Reviewed-by: Vladimir Sementsov-Ogievskiy --- chardev/char.c | 147 ++++++++++++++++++++++++++++++++++++++++++++++= ---- include/sysemu/char.h | 10 ++++ qapi-schema.json | 40 ++++++++++++++ 3 files changed, 187 insertions(+), 10 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index ae60950..bac5e1c 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -132,12 +132,16 @@ static bool qemu_chr_replay(Chardev *chr) =20 int qemu_chr_fe_write(CharBackend *be, const uint8_t *buf, int len) { - Chardev *s =3D be->chr; + Chardev *s; ChardevClass *cc; int ret; =20 + qemu_mutex_lock(&be->chr_lock); + s =3D be->chr; + if (!s) { - return 0; + ret =3D 0; + goto end; } =20 if (qemu_chr_replay(s) && replay_mode =3D=3D REPLAY_MODE_PLAY) { @@ -145,7 +149,7 @@ int qemu_chr_fe_write(CharBackend *be, const uint8_t *b= uf, int len) replay_char_write_event_load(&ret, &offset); assert(offset <=3D len); qemu_chr_fe_write_buffer(s, buf, offset, &offset); - return ret; + goto end; } =20 cc =3D CHARDEV_GET_CLASS(s); @@ -161,7 +165,9 @@ int qemu_chr_fe_write(CharBackend *be, const uint8_t *b= uf, int len) if (qemu_chr_replay(s) && replay_mode =3D=3D REPLAY_MODE_RECORD) { replay_char_write_event_save(ret, ret < 0 ? 0 : ret); } - =20 + +end: + qemu_mutex_unlock(&be->chr_lock); return ret; } =20 @@ -191,13 +197,16 @@ int qemu_chr_write_all(Chardev *s, const uint8_t *buf= , int len) =20 int qemu_chr_fe_write_all(CharBackend *be, const uint8_t *buf, int len) { - Chardev *s =3D be->chr; + Chardev *s; + int ret; =20 - if (!s) { - return 0; - } + qemu_mutex_lock(&be->chr_lock); =20 - return qemu_chr_write_all(s, buf, len); + s =3D be->chr; + ret =3D s ? qemu_chr_write_all(s, buf, len) : 0; + + qemu_mutex_unlock(&be->chr_lock); + return ret; } =20 int qemu_chr_fe_read_all(CharBackend *be, uint8_t *buf, int len) @@ -478,7 +487,7 @@ Chardev *qemu_chr_fe_get_driver(CharBackend *be) return be->chr; } =20 -bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp) +static bool fe_connect(CharBackend *b, Chardev *s, Error **errp) { int tag =3D 0; =20 @@ -507,6 +516,17 @@ unavailable: return false; } =20 +bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp) +{ + if (!fe_connect(b, s, errp)) { + return false; + } + + qemu_mutex_init(&b->chr_lock); + b->hotswap_bh =3D NULL; + return true; +} + static bool qemu_chr_is_busy(Chardev *s) { if (CHARDEV_IS_MUX(s)) { @@ -531,6 +551,10 @@ void qemu_chr_fe_deinit(CharBackend *b) d->backends[b->tag] =3D NULL; } b->chr =3D NULL; + qemu_mutex_destroy(&b->chr_lock); + if (b->hotswap_bh) { + qemu_bh_delete(b->hotswap_bh); + } } } =20 @@ -1308,6 +1332,109 @@ ChardevReturn *qmp_chardev_add(const char *id, Char= devBackend *backend, return ret; } =20 +static void chardev_change_bh(void *opaque) +{ + Chardev *chr_new =3D opaque; + const char *id =3D chr_new->label; + Chardev *chr =3D qemu_chr_find(id); + CharBackend *be =3D chr->be; + bool closed_sent =3D false; + + if (!be) { + /* disconnected since we checked: ok, less work for us */ + goto end; + } + + if (chr->be_open && !chr_new->be_open) { + qemu_chr_be_event(chr, CHR_EVENT_CLOSED); + closed_sent =3D true; + } + + qemu_mutex_lock(&be->chr_lock); + chr->be =3D NULL; + fe_connect(be, chr_new, &error_abort); + + if (be->chr_be_change(be->opaque) < 0) { + error_report("Chardev '%s' change failed", id); + fe_connect(be, chr, &error_abort); + qemu_mutex_unlock(&be->chr_lock); + if (closed_sent) { + qemu_chr_be_event(chr, CHR_EVENT_OPENED); + } + object_unref(OBJECT(chr_new)); + return; + } + qemu_mutex_unlock(&be->chr_lock); + +end: + object_unparent(OBJECT(chr)); + object_property_add_child(get_chardevs_root(), id, OBJECT(chr_new), + &error_abort); + object_unref(OBJECT(chr_new)); +} + +ChardevReturn *qmp_chardev_change(const char *id, ChardevBackend *backend, + Error **errp) +{ + const ChardevClass *cc; + Chardev *chr, *chr_new; + ChardevReturn *ret; + + chr =3D qemu_chr_find(id); + if (!chr) { + error_setg(errp, "Chardev '%s' does not exist", id); + return NULL; + } + + if (CHARDEV_IS_MUX(chr)) { + error_setg(errp, "Mux device hotswap not supported yet"); + return NULL; + } + + if (qemu_chr_replay(chr)) { + error_setg(errp, + "Chardev '%s' cannot be changed in record/replay mode", id); + return NULL; + } + + if (!chr->be) { + /* easy case */ + object_unparent(OBJECT(chr)); + return qmp_chardev_add(id, backend, errp); + } + + if (!chr->be->chr_be_change) { + error_setg(errp, "Chardev user does not support chardev hotswap"); + return NULL; + } + + cc =3D char_get_class(ChardevBackendKind_lookup[backend->type], errp); + if (!cc) { + return NULL; + } + + chr_new =3D qemu_chardev_new(NULL, object_class_get_name(OBJECT_CLASS(= cc)), + backend, errp); + chr_new->label =3D g_strdup(id); + if (!chr_new) { + return NULL; + } + + if (chr->be->hotswap_bh) { + qemu_bh_delete(chr->be->hotswap_bh); + } + chr->be->hotswap_bh =3D qemu_bh_new(chardev_change_bh, chr_new); + qemu_bh_schedule(chr->be->hotswap_bh); + + ret =3D g_new0(ChardevReturn, 1); + if (CHARDEV_IS_PTY(chr_new)) { + ret->pty =3D g_strdup(chr_new->filename + 4); + ret->has_pty =3D true; + } + + return ret; +} + void qmp_chardev_remove(const char *id, Error **errp) { Chardev *chr; diff --git a/include/sysemu/char.h b/include/sysemu/char.h index 9f8df07..68c7876 100644 --- a/include/sysemu/char.h +++ b/include/sysemu/char.h @@ -92,6 +92,8 @@ typedef struct CharBackend { void *opaque; int tag; int fe_open; + QemuMutex chr_lock; + QEMUBH *hotswap_bh; } CharBackend; =20 struct Chardev { @@ -141,6 +143,14 @@ void qemu_chr_parse_common(QemuOpts *opts, ChardevComm= on *backend); */ Chardev *qemu_chr_new(const char *label, const char *filename); =20 +/** + * @qemu_chr_change: + * + * Change an existing character backend + * + * @opts the new backend options + */ +void qemu_chr_change(QemuOpts *opts, Error **errp); =20 /** * @qemu_chr_fe_disconnect: diff --git a/qapi-schema.json b/qapi-schema.json index 80603cf..bf72166 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -5075,6 +5075,46 @@ 'returns': 'ChardevReturn' } =20 ## +# @chardev-change: +# +# Change a character device backend +# +# @id: the chardev's ID, must exist +# @backend: new backend type and parameters +# +# Returns: ChardevReturn. +# +# Since: 2.10 +# +# Example: +# +# -> { "execute" : "chardev-change", +# "arguments" : { "id" : "baz", +# "backend" : { "type" : "pty", "data" : {} } } } +# <- { "return": { "pty" : "/dev/pty/42" } } +# +# -> {"execute" : "chardev-change", +# "arguments" : { +# "id" : "charchannel2", +# "backend" : { +# "type" : "socket", +# "data" : { +# "addr" : { +# "type" : "unix" , +# "data" : { +# "path" : "/tmp/charchannel2.socket" +# } +# }, +# "server" : true, +# "wait" : false }}}} +# <- {"return": {}} +# +## +{ 'command': 'chardev-change', 'data': {'id' : 'str', + 'backend' : 'ChardevBackend' }, + 'returns': 'ChardevReturn' } + +## # @chardev-remove: # # Remove a character device backend --=20 2.7.4 From nobody Mon Apr 29 00:20:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495198438178643.5650980126677; Fri, 19 May 2017 05:53:58 -0700 (PDT) Received: from localhost ([::1]:58647 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhPn-0005Gz-RY for importer@patchew.org; Fri, 19 May 2017 08:53:55 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46859) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhK0-0000Zz-95 for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dBhJz-0004JX-3b for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:56 -0400 Received: from mail-eopbgr00136.outbound.protection.outlook.com ([40.107.0.136]:31167 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dBhJy-0004AG-OE for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:55 -0400 Received: from xantnef-ws.sw.ru (195.214.232.6) by DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Fri, 19 May 2017 12:47:49 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=KPQpIkkXAoBF7fsyEh5l4i9xcK8aicuF7sPo/z5qiyU=; b=HB6RYrXcYDtXaDrQeOJCvlzRDFqEf9+3tgGNNK99Jup0c9ttQ+EPnrGLRvmm4yjgTKb5hUgyj7vQqUhvLfeRL0dSczD3mV+j/WXUifRziFOIkR5O7oeNA/ocUIocNNO2665dvreXZxpxY8+QaCWPPeLSrHi2mnpnlazxo5dYDJo= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Anton Nefedov To: Date: Fri, 19 May 2017 15:47:17 +0300 Message-ID: <1495198042-124203-5-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0002.EURPRD10.PROD.OUTLOOK.COM (10.171.79.12) To DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB6PR0801MB1989: X-MS-Office365-Filtering-Correlation-Id: 1088fc39-5d78-4f9d-0c82-08d49eb5422c X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 3:JOxOH6mxP+7yG3pxFgOHCrMJ45txqSlKiZRFwGNwuMyJ7ktvvYqWeQz152GgsgvgEertyLDZFQLbncBEGMHbxijhlQsbjBdEyDnJtcW74EXo7d3FRP7scBKfuaA4zl6Jsufoq8vs2w678XyL9Ssn8USvkIlQwl2ykJjFuKglPICg9OJ4W/Xq+DWZioeQJQcowwcPC3LQFLbG+uDEg+tKfypOdsB1etn1LsutlsP0Gjjp4aoCfxmOZUS0hWc4ez/CEt736B5amzs0Uy/Y1bx5jYtOP0y8yS3rrX2iT0J/3lSOXOeVZTbx3Bq1iSSE+3t40vaSdZAQxm51u/bs1XO5aw==; 25:DVaCDQv+43L2awDH8yhZhtBujIAmNwO/qQKWSAhHnUWWE6vM8zFJPAQEmO/lW1PoeSAQCky+PrOzvwxSsQQ0zF6MglSfo8MD0UHK/n2p9vqgPHilpltgMIxgNYpHf0lKjkmGnwo/s91JKdY7UK/reHKiKmXGqzAY19rUkdLtg0WyZNT8M5BcVS5DLk91hnAZ/HIYV5U2F0XiPSkIpFWPD2VKfQ1CFLEyVlqhy5NFtJrq/nexrF0ZCPt7Xpqgk88wjcWp5RPNHjmZAx1BnBxZWTRQqWC3ceWqppOviA8OdObgv0bopoBil8gQGu5kL8mWbqxej2FQKPUqDky5rTd9MEE7M/mNhc79bfbChBsaODPVA7XrAT/3Hkbusk3ayYbbEzSM/HQqAF2DjwVdaLh7gJjlNTohcv0Z+6LiPsFGSuxz8ScA3GQINE2Ls6zWXkzSRiJHOkSd4f6U4mBcnZgfucDSVt/EcMPOnaGlg4AA+Pg= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 31:X7qUfJQ0kQtR1tNrK+ohMtcASdgri4366IBIlTzFb+VWWa3NaQubIPLDXtnFfyunM/BMH5Zk6GHuC205q4aG25poliWWwUai/K9NLVxSML7ZIETS1S87QkAeQ0vK4Xpt72PIPeoUtKVeAPOUAa4bLKl+MWmTLh0hvrVvpM4tJ0wlpZdSsscR6jRAywnb1d2UPAu8FLlILh5lJJIMttSqgxF1tnlO52hj6lVk0Zx4KJU=; 20:Bto28HmcHCL7W0aCmdHjyRtSIVkDwwzpuracmCua5jFTSR4GjdXx/PnH63gMRRY0nAc9+0uN/Ak25gd2n0u8TQWyg44Y56NWwnsMT1RPwtH4Evmvji/stYOd7MxoFA+jZOapWGW/ZbHYKClgBWINvPQ/Y2sPzYLWuIHBOjlBehTV/vW3p0WWM17CcZsUqLiV/RlRbZqZt/EDVtPCFfXa/phxSvizwqdiNGD6GHzTbzlaVh2vVXCIJbqhIGh6xN7LNi4+tMAcFzdiG6KT2VdsLzStnuU9EfV0dlyLiye9PMJF7Dol9hg43hBWOQCvG3WhZI2iYny1SS7Chqv/rREMeL6Fn5ri2bJ+sq/KqdrDecOjTI3s0CTb17lDLa67r9LsN8pOtkMuMv5OIwDfYsocD0HNOrx0zjzrx9JmpBzeyek= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123560025)(20161123555025)(20161123558100)(20161123562025)(20161123564025)(201703131423075)(201703061421075)(6072148); SRVR:DB6PR0801MB1989; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 4:Uo0GbTY/f5JEr2MshmxsLjEvtXKKlfh/rt311VJgzzgMp1eC6ShUKVNQ0kZAG16hi+9YzAHbgHtc743o3npv4H4/cyqQPiN09GqKvfJ/NLPtJPw0rf+DC/xB7o8xRBAt0fuoWqQjLGYtS5ILLufiLlYeGYbCx14emKkoKu8NEX1HHfBepaLH1Ukq+vZu08F6bwU+DgimSZiYekABBxCXgDk+FW0IDvjXTW9yWXa+3hM4cJSEriQ9TgtiReKyR+JR0x6YjiRmLmaVR6wUiVMGRh8NMBfVWB7WB0y6hdyhL0ofjylcJ+uGM4KmnkwaLF1y9REdYX0OQYRrkjPmn/OLQTolEq04zzRYEa+qYiR25OV7ypvrQgcvp0AXaJ4/dals83v7AxFnAaJhOjpsmPBN1pghwyPMbXeaUhvg41nalbzDlyCvDcg18B5DU+uyKPZ0DnLU8mctMcOvhSh/84FTM53mb6IRXJLd5jtKnB+4WfG+pgIteqXDdud3fYqLy6e4vwXEKra/im7V3xGm0dNZS5EunveVPsLJygsKzHD1qTNqYyHQC/QmFYwWUS5kbc/pdvD5AsSMd3tEKDLe0F0jpSJayilXa+SiplG3N/Xp5gzoX4ar//TzA12VeMrcyr3rj76AGppz47krwkvYek+FUpEK+RqslnULrZ8Zbzcs1lufRPofTIrRNSfd87ZqCZDLjZHojqrCCerOfe8I2M75Pg== X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39400400002)(39450400003)(33646002)(48376002)(230783001)(5003940100001)(53936002)(38730400002)(25786009)(2351001)(6506006)(6486002)(4326008)(110136004)(5660300001)(36756003)(7736002)(6916009)(2950100002)(305945005)(6666003)(66066001)(2906002)(189998001)(50226002)(50466002)(54906002)(508600001)(86362001)(6512007)(81166006)(8676002)(50986999)(53416004)(3846002)(76176999)(575784001)(42186005); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1989; H:xantnef-ws.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1989; 23:gi+hzzefPXmmoV7RTjKNVFSQAEetYgbd4QIX+ut?= =?us-ascii?Q?JK9BQMvMcgBTYapw5My8+J5wWhzDold1McQNoMMVimMmGgzykDKULe0RJg8D?= =?us-ascii?Q?+R2Pt69EEBSNDygD0OAlRQiH8DiMsXNxew9pNfM1SE+A40KK6UMZzQS1tsAe?= =?us-ascii?Q?5i18irAiH8+imzZONpntZOMBaHMPEc4gHUjDutWB++eVx6YCHNRxkgUMQOaD?= =?us-ascii?Q?mW+UK4gPv75j5/akEUlioQ/RbjUI0aqzPphrIPT1tGSc427IOft0Nqe9eSrL?= =?us-ascii?Q?IzAeI3BB0+v+/hjBgckIdveYJFqhuFw1OPNKN+quS/bZ3Pk1fNwkRLyvFXAh?= =?us-ascii?Q?SjgDkJILZaMBXabGtnmo4X2jpJOXqKLdgCj73xOH/UU+PGA1gBMaZq/WHiUZ?= =?us-ascii?Q?UDhNXXM+cW4xcoatunr8SDu2YHYQ70Tgb51yAz5btQEtRqJGuPRIfaLu6dq1?= =?us-ascii?Q?cjhsV4QPOQBz2WQrE9+DMt/SrVlWPqqkwafGoGSHT29Fs/gqC6qA/3v0hPAh?= =?us-ascii?Q?B20djiE3ybk7EwGfwhh8/dAfX8Wn5+o6f+oGtz77TJkc/wvGlnLfEwBe0Vxx?= =?us-ascii?Q?d4+aTWqU31H8iSefsogHNQgJmTeWq5ks4HrOaQ80Lssd7TCL+ctFxX4xdVJ4?= =?us-ascii?Q?LKue54hsfG6z3w1aGRobh58ueCuOoMiVn7rmna0TxDyGxL3wycQNdqYkx4cz?= =?us-ascii?Q?IXjHuKp1VpNsjbGOk22KQEOII9K9sZD3EtRQ20PouKyNLB0fPmiDis9SEo1S?= =?us-ascii?Q?afM6anKWSyNMB34fMsN0e5pBLMiSYIcnA+0G2o3ER6toh5jC9BSbNtTqqoGK?= =?us-ascii?Q?YWy4bz49ngw4TGGeXRMPgRNJ4+S7LdM37ldudcZnvqej/mVW8eY7ot4Nxc6e?= =?us-ascii?Q?6MOqqvTDzpPiD95g75DtKVH3oauQf9e6JG7vIHOCVvHN0SgHVbVdZtycNaS1?= =?us-ascii?Q?/plhptfkXxgptFWZPaPtKKZiBfUBYuVTqFUpbJnmnvKyGSA0/YnfdLmxlWeo?= =?us-ascii?Q?WXp/hix48mRiX5B8L2wjhTMWW?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 6:mbHKTBPoHDYiMEtMqfHEgK99LjrK5WL84hhHmjlcL50QTTzwalrUJ7yitkIFMOIUMuL5zjmQp+eUT7dbi81i84YT9yZYwf+j9Sp4Kdo0FfqPB4gZQWt+GogZ0ofDTNl95sZGu4mQcRJMnGRzEWQ9w5sXiwO7wn36f2tP+HH4ZL6r3thUlBUoFFRYm0KnKM7mpKbuBoaxkqSLN9ODdH/8mgFxFFcZLZ46SRVIP3WtLmOOtnmdnNgYQC0ki4U0jWCn/pSVauC9On24UVAJhLnwkSPj5jV1IHpR0tJpjFHaHakXY5CaGUWw2wrm4jZ8pzUWvCfIM9nsV3IvMnEBCi4uy4allEhDXdWE6+MpvCOISHovulsH6bAaZv/jiKqrSxEk/5V1ri5FOdu1Cv/ZzMq720y10Fa93B8+Unro78tPvEI9pk0XQv/sIZibx5uy8foTuUsfEPtI0tfzx/msFsi6ZMWM10kFOrgNWwq766DFEP3W8SUZGgQaBLJfzrifjUN4onpTD0b4CuUR11yf+OTxBA==; 5:/znlZk9BsBljQ/WNkqEvflvrOlLW1T6+tMY3HV6Eg90xn8Ca14Of/XnOrXI8ri/HT8hP//CFvhsUJ6SQQByJSLMdh7ya/GwTFtFfhRDToW0gjEJwYrgWFo+XPqNp9P5pySOQoCNZqq7mD3nlO4uN/g==; 24:Zg9t3bmWW0e3a01wsOQH5gpuyD37oB50JhKKrCvcl7+2hySgvyI6dMY1hBDbgbM1/TP2e5CeA8YlyacrzKVlLHe5smOPHqnB1CCs4yaj8OI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 7:e4q8lC5jvA1us4gwsqk4JPs0BHnPFA0CdgauihWO6HJskYDfvUwhkkstC07Q06RSkgyoo0dZhU0+M2VNGDWUQ52BRVTY4DgeBmhDD2styK13qzofaBVxvo1/7mLvz12XUrxKVss/cPvU1ZfTOt06uSJgaYe3BE9I8NDjdEs+OpfKIw2sa3pH1rEoF71OE08UFpCxFd0I4WDN8PUWsbafwv+piVWsYRUmX3ZgnuIGwOjxsyuCBfOQJsqtSIwLWsFAmAQIsxWfv2oW2X61wC/P41bwPP6VWUiCyA6VHKPq4xwGu4Lb5RMDvsx2w9VL1RuBr4XkiUrMOFcBPMSK0AGYEQ==; 20:i2ODsxA9gl+GPJnGO0Wui/jrbZaIpKPe2qJ8TUUGv23hYC0YyaN27s8AzExsTlaXG4TjS2C5/wziX79HQ535jjP3z33B7RWBW3zfvn4Fv2wXMDtyWOQsjpoXN/MFTN/d5j+6lkfGy1hvWCYRGwWLp+BhdT8CER4rNKQXct43Ylo= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2017 12:47:49.7440 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1989 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.0.136 Subject: [Qemu-devel] [PATCH v2 4/9] hmp: add hmp analogue for qmp-chardev-change 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: pbonzini@redhat.com, Anton Nefedov , den@virtuozzo.com, "Dr . David Alan Gilbert" , marcandre.lureau@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Anton Nefedov Reviewed-by: Vladimir Sementsov-Ogievskiy CC: Dr. David Alan Gilbert --- chardev/char.c | 4 ++-- hmp-commands.hx | 16 ++++++++++++++++ hmp.c | 34 ++++++++++++++++++++++++++++++++++ hmp.h | 1 + include/sysemu/char.h | 12 ++++++++++++ 5 files changed, 65 insertions(+), 2 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index bac5e1c..0483f19 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -880,8 +880,8 @@ help_string_append(const char *name, void *opaque) g_string_append_printf(str, "\n%s", name); } =20 -static ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, - Error **errp) +ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, + Error **errp) { Error *local_err =3D NULL; const ChardevClass *cc; diff --git a/hmp-commands.hx b/hmp-commands.hx index 0aca984..0f2a059 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -1727,6 +1727,22 @@ chardev_add accepts the same parameters as the -char= dev command line switch. ETEXI =20 { + .name =3D "chardev-change", + .args_type =3D "id:s,args:s", + .params =3D "id args", + .help =3D "change chardev", + .cmd =3D hmp_chardev_change, + }, + +STEXI +@item chardev-change args +@findex chardev-change +chardev_change accepts existing chardev @var{id} and then the same argumen= ts +as the -chardev command line switch (except for "id"). + +ETEXI + + { .name =3D "chardev-remove", .args_type =3D "id:s", .params =3D "id", diff --git a/hmp.c b/hmp.c index 3dceaf8..f7d0b38 100644 --- a/hmp.c +++ b/hmp.c @@ -2209,6 +2209,40 @@ void hmp_chardev_add(Monitor *mon, const QDict *qdic= t) hmp_handle_error(mon, &err); } =20 +void hmp_chardev_change(Monitor *mon, const QDict *qdict) +{ + const char *args =3D qdict_get_str(qdict, "args"); + const char *id; + Error *err =3D NULL; + ChardevBackend *backend =3D NULL; + ChardevReturn *ret =3D NULL; + QemuOpts *opts =3D qemu_opts_parse_noisily(qemu_find_opts("chardev"), = args, + true); + if (!opts) { + error_setg(&err, "Parsing chardev args failed"); + goto end; + } + + id =3D qdict_get_str(qdict, "id"); + if (qemu_opts_id(opts)) { + error_setg(&err, "Unexpected 'id' parameter"); + goto end; + } + + backend =3D qemu_chr_parse_opts(opts, &err); + if (!backend) { + goto end; + } + + ret =3D qmp_chardev_change(id, backend, &err); + +end: + qapi_free_ChardevReturn(ret); + qapi_free_ChardevBackend(backend); + qemu_opts_del(opts); + hmp_handle_error(mon, &err); +} + void hmp_chardev_remove(Monitor *mon, const QDict *qdict) { Error *local_err =3D NULL; diff --git a/hmp.h b/hmp.h index d8b94ce..23e035c 100644 --- a/hmp.h +++ b/hmp.h @@ -102,6 +102,7 @@ void hmp_nbd_server_start(Monitor *mon, const QDict *qd= ict); void hmp_nbd_server_add(Monitor *mon, const QDict *qdict); void hmp_nbd_server_stop(Monitor *mon, const QDict *qdict); void hmp_chardev_add(Monitor *mon, const QDict *qdict); +void hmp_chardev_change(Monitor *mon, const QDict *qdict); void hmp_chardev_remove(Monitor *mon, const QDict *qdict); void hmp_qemu_io(Monitor *mon, const QDict *qdict); void hmp_cpu_add(Monitor *mon, const QDict *qdict); diff --git a/include/sysemu/char.h b/include/sysemu/char.h index 68c7876..92ae57e 100644 --- a/include/sysemu/char.h +++ b/include/sysemu/char.h @@ -132,6 +132,18 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts, void qemu_chr_parse_common(QemuOpts *opts, ChardevCommon *backend); =20 /** + * @qemu_chr_parse_opts: + * + * Parse the options to the ChardevBackend struct. + * + * @opts + * + * Returns: a new backend + */ +ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, + Error **errp); + +/** * @qemu_chr_new: * * Create a new character backend from a URI. --=20 2.7.4 From nobody Mon Apr 29 00:20:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495198204629769.1513514587459; Fri, 19 May 2017 05:50:04 -0700 (PDT) Received: from localhost ([::1]:58630 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhM2-0001qY-QL for importer@patchew.org; Fri, 19 May 2017 08:50:02 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46862) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhK0-0000aD-Cb for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dBhJz-0004Jy-JH for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:56 -0400 Received: from mail-eopbgr00136.outbound.protection.outlook.com ([40.107.0.136]:31167 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dBhJz-0004AG-BQ for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:55 -0400 Received: from xantnef-ws.sw.ru (195.214.232.6) by DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Fri, 19 May 2017 12:47:51 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=dCkinYUMHQJtOxHbRDFwbovkS+KtXIYn4PW9yLFBFr8=; b=VdeWqcLMPCySI9pgGzCI9WlWFOdor2qaxI68Jh5G72haR9/me4qQvKkgUk37p/qm6zO2pmQOsFNU3prVeiLleDam7qQNk2FsgxpGZbg6L17Er90OIe3zNxOtkuR0AK98omPa2LndpWo/IwUG30Cm8FlODeVBFshUVCqIhbB+xk8= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Anton Nefedov To: Date: Fri, 19 May 2017 15:47:18 +0300 Message-ID: <1495198042-124203-6-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0002.EURPRD10.PROD.OUTLOOK.COM (10.171.79.12) To DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB6PR0801MB1989: X-MS-Office365-Filtering-Correlation-Id: 753eb5c9-6343-4496-74b4-08d49eb542ee X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 3:eBnIKsjNc+qv6EWw+dx4tdVHnzrRHdBbdlef8opKaI04e6RYBfWyjdMQ8ON9N8MN+msqgpF3w+bNKQ4e2R/xCIyvdRBDXrjYid7HEnjs+cZtCd5yhzeGxWrEAUaaObkgn1KzFq+TL24U9YcrCCJWjy1H0Vhl5YjxQBlW8j2Ng8srf6kogQrxv3fP3PknwHB62Bxdf/dqTfKeUBJHRu6x7arljrHDxWE+bhhcPT8TAt0iuDeJr1ll+7DfBedU9+Lk30YKLkwXb8o4ozOWqkHhcEQkMp/Bu8KzBjKxbUjiIoqc/eAjHB5qv/5T7FyWO2ePyrTZtnN8GsaSRkXRHBJ6Kg==; 25:Dz80T9GiNNNf7Dawq18zOSA8vjGj+93ZXAR/uz1QzQzHZcs8UOHCuvPrZttX+AwEX0KQLWKPQfLaSehZVgcl4TV45XAWi7kOyXBXBjKhg9kLrV3FxU8RgcKVqlwR1MMg1yXDsvyWRbkxGzAJOk2KqnFCSuz5BzlFjIV0uUHLOsp/sDlQMy0XALdOMWW4Y+wmtmnRXnk6Iq1sGmVK8ZNL5ZjccAsS4RmD8FnQEUccrxEFwRVCBPT3Qb51ooiBhQiyZJaTlzeeefE3bfMOj54/J3Gx57njvPmWo7Uf/Dnjg776jisgrkPz7OZP2t4ocldF8WgmrgIwGImhGj/zgtUvucrFLub/+gcqHACckszYmfXCQRewiVgXwRV8VZPY84sKC64pPE7Eqpw0magYA9vm65ZDfSELagAkZhDMOMU4fhAMav9X8OJFfjww7+E8vPnA7gunhfi9oZpjr/o6aKYEtKJnx0x5Kr7sqk5uf08CAcw= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 31:ZunRnNhbAXUu2VMqZpwFWtskqdjAeWIjqiAWh85IT5uWfcdJWRNAqmGkCWTCaJAtT9gxsIEZXDoF1hF+w54ViyD27lmUFfkUMeLcyzILY1m9hiXaL2kzgP+xL5t8LuzWsuHmzd5mTsMBSsUXzZfvQ7p2GA0KIzXjVaR15pVZf46xVwODIakW54u+GLnT6juoNB9y3rgqWAISINua+vEYnN9XVsk8bN7C72u6/WQ5zQQ=; 20:8DBJpE81LR7Ah1bqHSYqY9fZjsCvCU682Vo4Vfvetl4sm+QawqL8ni2FlKHNiecDoAxmQqcj+tGuN+l7dGU1pP6bXFZaOzQ1YgCnks7eZGiwOBKQXt4SJmIdIbgnWEPCUYOh19OjBoWYMv4kqUfBXpdQ4klxZrNEoZJRD2VvIqbnKSQOMohZh3eshjwp0HDSOUMCnOJcUZ9w8hkQSxyX2br6EW5WPS15TqXPWJiJJuNuQHpMENCSS2XE/7D+n8iuV0I27RITJR6tg34lY7Ev9lWreAcHc4vsyj7JvG9yAcMmcgvfXl73DBtmLTTpOZCQfzuticC6DCSZfb+ABjxMl6JAr0C2gLCRpdCGazmR0WeH+Hu+ZniDIua8SWQ5Np71zmElhyD1IO2p8iQgMuH8o+BXushcOj8MbCGkWTbIyB0= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123560025)(20161123555025)(20161123558100)(20161123562025)(20161123564025)(201703131423075)(201703061421075)(6072148); SRVR:DB6PR0801MB1989; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 4:1f9loUMZVOXbQfx01293XATtrRRhCa5NYpO4KqZgPZwFff+waas/5aYEKkVKvbF+Ip2p9gTI+i53QB5ykn9ZxDWcJ0+1ARO7huaz9qeuiXDC7XPz3sZ/+gEEVIWiIwMI9KHJFXMMXLvs2D4h2r4+VeWNpOdJA16KCV75ldJ9Uy0il1nCh1CqIuJYIDbDrRQVeEfOxdH966AEF+ok4fABdOm/ap9It+Vy9bo+gOCaG/rFJ1fbMxngND9LgIvND0cmIpQqy2HcQUPib/amT1ouNeN5hZsxBvw9MQ5ci+7BJUumD3vrWLHQmiWO3Y1JSCKDr1VXqhah69u3NcsCxJNDdHIbR8Hd0h5GK9eS9Xo4ZyCFzzKqNijJsBPs605XHuEcS5gYtpjGxlSLu/1/Oi4ataJQjPgCQObG23/uTQwco+9vSB3GSp6AoDlIvwATEohBamg2cmm/eKXU+fBEzxB8wMyWvLAOJY1rVwKjIQ6Rc+R78h9xjHUBk/FdzdLJE/WLW41hr9WHvE9le3+VEi8o354hh0KEjy53rPSy769MDHAI+II8U2ryQaQAma0dHQT8qh8NhneCxHTejtIJkVLjlU3u6Xvml3ntFn4oOzmF5yiP8dGyrFlYVQMkfxarzUm9YJGdyaHMopJCQULn0to1al6EFSTUSyhwBU4FZFTyRe5JMLv0+oNarz8Geo3FCfejhjCqfx4wfozQD+AhsclTSg== X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39400400002)(39450400003)(33646002)(48376002)(5003940100001)(53936002)(38730400002)(25786009)(2351001)(6506006)(6486002)(107886003)(4326008)(110136004)(5660300001)(36756003)(7736002)(6916009)(2950100002)(305945005)(6666003)(66066001)(2906002)(189998001)(50226002)(50466002)(54906002)(508600001)(86362001)(6512007)(81166006)(8676002)(50986999)(53416004)(3846002)(76176999)(42186005); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1989; H:xantnef-ws.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1989; 23:gzfOkVaZb+FSMmREfaptDm8rkozs+7/WUyeJ3aR?= =?us-ascii?Q?XKnJ1b/lPOx5hseg7IJhSXYwYYfJY7g6+macEaDbd89z4KHXS41X8S3tDW3X?= =?us-ascii?Q?5gDEZjmyDFI82+iDVjYldyNp9XG1Hm85fTiPC8JnpekGtzH1V0DMpCJwpi5w?= =?us-ascii?Q?QPBPDvOX2UjzHZzr2oG2/+osL2sUza0bl6LTggOBKla0QWScdPWfnmP2vRSg?= =?us-ascii?Q?Dk7Advp6EJzHIRj5blg2QDyVWoL8WZoeOL7BTFLUJqgUTw137r07qY2y6zUb?= =?us-ascii?Q?nEfEygULcLW0eLppFK4Sn89jxAuIiihTkWY1f/MC5aw1kppsAbGnP8p17fXQ?= =?us-ascii?Q?69yGe/YlRoptnvZW2eKbm3nPQNtGZMy1Sz078B21JaC5FwhGVnT+kdHS1ymn?= =?us-ascii?Q?YnLyuNosQLX+gHsTvWCjI5TFOPEruXuxq0mj+DYPPtloZZGhL2k3dQ7GDMCW?= =?us-ascii?Q?DUynLYGd5An1+YMfFywow+Q/pHe6/GRwJ4vWhhqDV+4hVSyEJiEmWqZe+OTi?= =?us-ascii?Q?wv13gr7flj4vuP2kFZUo2Szzfj8R5PPydBW6VtLKRMX7j5lVTAnydOxi67z4?= =?us-ascii?Q?WwgaKrJ3sQeP8tn9+oBRtVQbl3dWlj5OHw6X+WbPCI+5w+XNdFhYYF6Yz0tg?= =?us-ascii?Q?K+l2a6BrcYyreNjaAzgp7cR/YGjx2JkEfMQaqDOmHLC7BDfS9WdFluT2N+md?= =?us-ascii?Q?U1hQsB/KFxml+wmSMnPNTRGdIdNAyDDr8R98hEUXAxRbNwZzJl1XDWfBlXdl?= =?us-ascii?Q?G0Q3lklAe4Zz8H0oRGtz11ihH+eciADZhF4XRtnCK7c5PA/e77WnUDNHfpP+?= =?us-ascii?Q?sDf57xSCYsGpRdT3qedkSwVm6ip8NbVW/6YkKNmEowa7DS8N7c9U0xD9vNNH?= =?us-ascii?Q?NtcGxg0Sm1u/m/EmwoYNET9PJoBkajAnHlhSzMro+mfoj83CyZVziuNTPPt6?= =?us-ascii?Q?LzD09A011ao7O79PG/qqITGu1I/mUzOYEphr3iEeiWYCHxOfcZrBH3i1FcUa?= =?us-ascii?Q?o/Tw=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 6:SFP45ZTZe7PX8jixk7ewmXlVzKBSfW0rFS3k5Vt+iD7CctFyXBqSlESRJZfhzefeUye9ljTtdKmD6mkNHFWxQMC5HoNUX6Uj3tElKC3zbNQNTCHjYKuFCo574+VaZWOmZDyIKbyM/DUgerHeaGtRlXxVAr01TPvLAxfyB2Sb7Zg+fOc4bA28Of4HDOs1n/fZBtGFkGBABIsGaHss9wClz7HmE0FkXrlT9onF7Y2IrbmwvDSH9YTvV++tM1ufeJZpZ9qf3EQ8AbnETIgmgK3LbQn1EpwyUx770PCB4qbShewCKS2yHscI3uPuRfbJFi/eP7R/OjEYm+LIXd0urlf2boe9t2Cxo9KHS1Z0sHPNjc8Jez13dyIQ92icgiMoMUmvclTkKnx4mmELWatW8gX6EF/RqCGR2mdNsd/F6v23Mun+ZCT9FUOnc2+RE3K7KuBPWLTEWhtf69hCX/KLKo2ZrI55g2k9w0ZtDSIVnW7xLkvDNgrnyx3TjuTTP/BQbadddqwQZyYbwG+Eq/mTmZNMtA==; 5:xRWdmi9pC0+83H8igeBAvAKHzra9fbXB81jRHeFAG56q0ikzB9GJDRzS2pGYGczksABNtL+khYdCdIcYXsJWhMUy0LY4wiw5Y6CQA4HJxgloJFTow2j3iKSEmkzdK4M9UTqKO7Q81C6YRJQv4DFInw==; 24:+7ptGnhrnu3VelfaIU4T7H3m7hIsgBQQoso0iSZ85lRcNP/QeXvifY+oLse+0izsv9ngMfm1ZA3+o1JSQoHdv6E3LbazfI42EAV1W0PgIcs= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 7:e7RcpHXU6Z2sHmJzLbwlMYuw0UWTnCgrswd17ASbnhRyxzQbl+qU4mydJNCbU3BV+pvgvexDJZWZMpkV54TJ5Tbw2shVHArmaC6Vxor5UiyEeCqAcpUODFPIgdaD2JvnTXwUD6OtR8WLznlgOoUwfU9WE2un6Roolr3zPVWwuTDbdTYs3L+bGhCDf+UsZNmmOHfQ7oA8/2mtW8becZw56Jdyai50MjI+X2bxE6pK9j6YWIA9zLihAMdTdfPSufjTFIDoe2mlTEBRja8FPYxJaDHRJlJPXVDaGDdFuYSrATC8vl0H9q0G28GJShm3W034EQ9HIsZgV2bf9a1eoWRMcg==; 20:Inp7sLCjUk6+8n9on7OhmCGFIvr8BrrVO9A9YKGURpuFrFNNfkx8lJxOL1Y0mHodMJZbGt9dT4Hd6e71hwQUKtmK30z2wRXVp+NkNLSW9nlKq/v7LNkBq4QzZ2KIyskhnxl+3+yifjBGbLiao+mW1rlM7A1cuZgN7ikgR2GMZbE= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2017 12:47:51.0801 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1989 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.0.136 Subject: [Qemu-devel] [PATCH v2 5/9] char: forbid direct chardevice access for hotswap devices 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: pbonzini@redhat.com, Anton Nefedov , den@virtuozzo.com, marcandre.lureau@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" qemu_chr_fe_get_driver() is unsafe, frontends with hotswap support should not access CharDriver ptr directly as CharDriver might change. Signed-off-by: Anton Nefedov Reviewed-by: Vladimir Sementsov-Ogievskiy --- chardev/char.c | 7 +++++++ include/sysemu/char.h | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/chardev/char.c b/chardev/char.c index 0483f19..36d6f36 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -484,9 +484,16 @@ static Notifier muxes_realize_notify =3D { =20 Chardev *qemu_chr_fe_get_driver(CharBackend *be) { + /* this is unsafe for the users that support chardev hotswap */ + assert(be->chr_be_change =3D=3D NULL); return be->chr; } =20 +bool qemu_chr_fe_backend_connected(CharBackend *be) +{ + return !!be->chr; +} + static bool fe_connect(CharBackend *b, Chardev *s, Error **errp) { int tag =3D 0; diff --git a/include/sysemu/char.h b/include/sysemu/char.h index 92ae57e..fa21535 100644 --- a/include/sysemu/char.h +++ b/include/sysemu/char.h @@ -404,10 +404,20 @@ bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Err= or **errp); * * Returns the driver associated with a CharBackend or NULL if no * associated Chardev. + * Note: avoid this function as the driver should never be accessed direct= ly, + * especially by the frontends that support chardevice hotswap. + * Consider qemu_chr_fe_backend_connected() to check for driver exis= tence */ Chardev *qemu_chr_fe_get_driver(CharBackend *be); =20 /** + * @qemu_chr_fe_backend_connected: + * + * Returns true if there is a chardevice associated with @be. + */ +bool qemu_chr_fe_backend_connected(CharBackend *be); + +/** * @qemu_chr_fe_deinit: * * Dissociate the CharBackend from the Chardev. --=20 2.7.4 From nobody Mon Apr 29 00:20:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495198361506944.483313404916; Fri, 19 May 2017 05:52:41 -0700 (PDT) Received: from localhost ([::1]:58644 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhOa-00042E-5d for importer@patchew.org; Fri, 19 May 2017 08:52:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46882) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhK1-0000cZ-4x for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:58 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dBhK0-0004KE-4h for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:57 -0400 Received: from mail-eopbgr00136.outbound.protection.outlook.com ([40.107.0.136]:31167 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dBhJz-0004AG-Ss for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:56 -0400 Received: from xantnef-ws.sw.ru (195.214.232.6) by DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Fri, 19 May 2017 12:47:52 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Sl4C1hZQAn/zQ9rVhK9K6y4XaDW7T2AAfzjR5s1CP08=; b=CdZj6BfT43HG+Nxj4nJY+nJ3sSmZMgKMjRYYvJlluFh8H4lWnHt790T1s7Tplj92wSWOuNXSAniP+NgFq2bW2T9AaNWLlShYLEmUmrtgqB9S6JzaHBY3zY9f/Q7BVlnnwSkq9jm4BvBgV5xXuADMayYS9/605c3Pg2Do6MAKGIw= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Anton Nefedov To: Date: Fri, 19 May 2017 15:47:19 +0300 Message-ID: <1495198042-124203-7-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0002.EURPRD10.PROD.OUTLOOK.COM (10.171.79.12) To DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB6PR0801MB1989: X-MS-Office365-Filtering-Correlation-Id: 922d8cf3-5395-41aa-e0ae-08d49eb543ae X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 3:iNsilysDZs8A10i0WKjIS8EUhO+LJSuiRVN6p24BttMIHpBgW/ia5xMdVK9JqoS+DGR2X2QqJZmXq9lJ3OpbSx1l3Ouapyj/SrdRzo/jL8X9YtNmpYnNz4SbOHVk31gIficfmH/aXqIH2Iy+JtnAhMY94+ETR9PGaD6zbnUcDaIbo8J9e43tjsqPmb7LAY2M+SUdpvExCzWDEepFA1US93jHpPDnCv7H7Nan2T60Sb6H04SQt3veMTol2ZKyUi8hHIHSzcAVS3x4mMjR/qOGJX734lJDqzXRYhpoJSfW3t7MscuerLc8sZKuo6hsLGAgEQGJrQnhBcVGZDjAhD8gJQ==; 25:UkPTt0Hf+/BuN1JoVUoV7sRc/1ByTkY1pEZr8AsaDv59suAOW+66ttH3EAMBVEOc77BzjukbQlUptgZLA172W5FCWwx7VuSTlvwfqA8BiR8R0X2e5JN4iNV9ZKeOcR2bGzE41wfOW6y+s29aGgIO/3Rt3NmhoQ3Xq2EOQHATVah6GYs/aP5zS5FrNZF243S53mNyTSrBrUFe+QV9dyOgveoIS6Jsi3SBxjiO0p53Zs25MFvXXo7oYqdqkjOb6P0krBFU7dd6kibjdX2yYm4mD6gIQHMiVzsKR8fYQdGghMKSuiHRezZjQeaOoQTwh7wBMnlD9KIvQYksgUR8Uhmy7xHSXPW10uQ/55sK1oRbwFWIefyS5dtxTyQbNYOsiergETm/FcNmAaq7RaNLT9DyvyPSLYVAylX3kLT5SvFL6W4YukIK+Du3YC7h8nI6jlMo+DlUvmCncvBLoBYqbjly9erW7IuoPdRox3TEYQ2PKNQ= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 31:4tiHhp24sN+ektGZW/LdlcuzoxWGy6Me/F7dA9Ym4z1Iw+CsaVRoc2F+OxFSRhEWMLjIDgMGIvbbaXayYgwzf7fMGBxNJcDdxvyrZpc8ux+J0RHAuymmjRqZIN+jc+MjWAeg+ey8YhahBvLYyNIsTp6qyhbIzwU6/BHzw0hGT0XeoZjM5wj+1zmSFFgM3TSaYese5GA4/fwHby2Fhigd52SpWrMc5qYG7ZcDob+3LgOxNImJ16xsWMb5UfQXlh5wkYRTJkVv9LJaDJCagFYAjQ==; 20:UMdDgfgJnn/Ou0Au3CZZNHOCflapj2Q+ub5QORaWI2DsKTYpM8i90ZMj6xv6+RPTippva9gGBcfrO/KBxtCSeLdtsOVFST5R/yyhjBQUIvvvHMYyMUCkl59b7wkH+njaw86p5FhmCSythULczjOPe285e468EMFWJuKgSjZ48VGDxLIIL4Q8tuN6aCP113ofsgfst/QE6XIlIf12Ezm7TpucDvSu/hrykcE2UapiXcfMopMrJvWQH9/0xbw7AF1nrMDollLhNy9fpdLF4C/PtAnQCGLVemvL8X40kP56Epjk3f/Nj+IP2CjyEtvxoZSub2DPlzW7dLsds2HVh8Yz9TZZEtVLQsvhMDLl34Bh2YoKH+16rL/VI5k2d2tGvgowLA6Xg52lnsne0P04qBNl8yh0h1TKv36CydcXkOmZORk= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123560025)(20161123555025)(20161123558100)(20161123562025)(20161123564025)(201703131423075)(201703061421075)(6072148); SRVR:DB6PR0801MB1989; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 4:ku/YHSRSKIVQbRXi78LfIhDS2ju8OJYO/LSkaRmqvuWANEaaWCVh8V4+jKVuuDTM795rq+oYWkr/on0jAFw8vxZk1Ww/7B5yBGlNQZukShJ1n4h4LByZyLNHJEQpNvS+4cdlTYXYZmRLgkAzCgMuyLm+tL7ugKmceAUGP27iIPHZIQCnay2NbLFUDbrfwbBg+dYKBgMJP9p3USquqp8NlMdQ6A4ngiM3M8C+kRbAkwCK3DjNuQuV/VjZgtM+X9vnymFXVAiriWKy2a3lNly4vYNz21tqV4k8qBVB/y8J66FFWy0wNBIbR8A9csXFWXQhsy8216HPDfyGw6MpKfinBC/cZ8Lf9rYLHG0fAQ/MANFSH+wOB4H7ibd7anamatjrKnmm2iEICGA9dkbs5MpZxRYtuTtQV4pG3u+TeTtcaIx9facBOqAckP6lAFl2IYsvneKjYWzuISTsV8UwxmXzoyatlqxlR/CAH/PZECHYbrXxWmx3ULOFEellmCIcUOr+STL9/BCBcBGa8Sskjc99goz+oVzDKySpEmjYAeL/+fd97m4nxzPpRGFgDPTDo87HcxJaWuUTVX8YMRRyALND1cL9VlLI5XMBJjhnPxfPsvNwgXDDMdkPhxkEIP3+8HAdG/ZH8NFR1FP00YRslK6uA9c3rSsUiRla/ssv8j2iHI9xGpnRMDyyN+tn9EyfojSpNQ1caXg97EgAXIYv2Z77PA== X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39400400002)(39450400003)(33646002)(48376002)(5003940100001)(53936002)(38730400002)(25786009)(2351001)(6506006)(6486002)(4326008)(110136004)(5660300001)(36756003)(7736002)(6916009)(2950100002)(305945005)(6666003)(66066001)(2906002)(189998001)(50226002)(50466002)(54906002)(508600001)(86362001)(6512007)(81166006)(8676002)(50986999)(53416004)(3846002)(76176999)(42186005); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1989; H:xantnef-ws.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1989; 23:uvDw2FGmc5r71+UgyVX0FvrcZisLmKLTFGa2oHt?= =?us-ascii?Q?3gE/B24xN16biLercjzecEgbYJ340loZYFahAuvNb2Y/XCSSKwePSZ7jpv8h?= =?us-ascii?Q?AAoah470p5ncP674Qu9VMuwifjzX2ncX4mZGyW6HWzV4TchqQ1ima/bk7MEB?= =?us-ascii?Q?SNM8gR8+IkK+MEw+TeRhV3Vfn3y7MW6S58xS1W5Qph/eJyEY/JV9Br01OiPj?= =?us-ascii?Q?Ps4wyZyG93kEisB4bJ45uGQSWt4WmWnE4JQk6GCTh7Le+TGDhNiCS+SI53nx?= =?us-ascii?Q?AUTkqeUK7hp7u72n1cOQ41P3DT0ac4YIAxTMdFyN0lqt8+IW0LIZCsNWlzK5?= =?us-ascii?Q?TwmLF95cCg5syUYQzlEKlYCdz/xP+11TmYcpvE9p1/YKDx7NDRB6EyGNuPxO?= =?us-ascii?Q?TqzoTvPJoAY2G5G97VHxUqXu6vysuvaQRGBij7K5KL4TivbruIzny9K0loxJ?= =?us-ascii?Q?rMOhpmH2rO1OQRhI8xNHjm1PiAFkAapE6j5oBtL1PkTW3nqZQOnRh5+QGhXe?= =?us-ascii?Q?6IzL3dAP8FKaP0eIr6RWO28/exx4u6S5kRVqlurYzivWo9xbvkPaGe0lc/8h?= =?us-ascii?Q?5ynOG4+yWBIMFqwNl9JMyWEu3zqyZZAbRyv58dmEJm70bia4mt+1s93qTuuk?= =?us-ascii?Q?2+mVSakPpyyCG97MBd64oZy7nAl1XIUiIm0hyKfVqgZwJyKO5DpiS8kiKYV2?= =?us-ascii?Q?XzhdSG3/hoIAk/bh1J8J8haOxdlyhr91FoJGN7139kb7WDdmNADAhskev0uL?= =?us-ascii?Q?vFKBxaQlCbsz6I3C9uEpBVatuZDg2G+w/1j36Mn44v3mVPjsD+eudV0AB+qb?= =?us-ascii?Q?Fnji4C7BNElkN/B4W1iOrDeJQimwoPlbaLrCFmfR4A+x/dEXVRtzJ+tOTRXN?= =?us-ascii?Q?0dVybQagi8dRNGdoV/1ASjEyqM5D+J01erayKT48tyP4yyPCM506x8J5QDNY?= =?us-ascii?Q?oJCc852TaZnb6PMPBZ5JFPRKznzuQn/awEhnV1onj0A=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 6:jT/cHaUMWYUMUxwG6lSvreIJuDL69uKH2C9VHJh+u6g/ltddyXApzmKIbxqFwG40Tb877co8Lnue/rDqtawJiM/no1tzn7AFW1by5AWra6v7x/Wz0flbrdqhUlf0yQi98UkxrDPLyQXWMIGyhTYb0yT8i6QkdgDDoxq33eC9VyjWnGsQk+/71XPEbezPF4Q+6agcF9ybdGimKI2Y3y6cWZpSOHtsLt+C//vyuSn0OHIxOlqWrO5DpDAUek1KCif1n5xAUh3jjE2fjatyUgkpWrVNDEYbJv59KiIbjK5zt9gEzgK80s886KSNjkdga/FcnHO9Zw2zJjeUp6ppWQLZHobWiM11weutibOgN2aZBigmNHGuRF4/X6mQvnvIAMB8YCrRkzCkFOOOOCVQ0dpgytgTigeGDTMGO8EgB4Qd3RwkdQU79bLzJ2j9Dd+cAqEs2dqw539OnEYWpZsSLong+gJmIsmqjgR6EpRl9VH7dqaQyYOhd0LprPbQMXORlOYUQRVk/nMVxt6ciE7gCAL2mA==; 5:4P9oxCzoh+ZDJBh+JzF5nTREM+jaAWAdulIwjCk1H7w7gotqCMFIo6B8P2uQznzJ8Xg20TS1AbbeXCDOLW7rP9lpsUyN4uGbZJtUOK3of59TUw1aw4uIukCs5b/jlhstdo3JFsqSSFCJRiyTMtHtTw==; 24:2g3lGENU1w+6pOJC3Ud71uBZeY5+HkSaX5Phm+geBXVX0AR6RLv6R1HiJCyewBcCi18GyJUdgl/WBBBeF5um/RpkrX8su7rIFvkt5qXjmik= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 7:V2pSM3kZEyCRGs9OyAAHm54hiaTx8ToNk71jKw7OIdLb63B6zwZG8zrMH2cPufFWeelUpFW/Y/chylm0pxijlYs5nPwEd0CvEft7jUOcdb+ULF13NbDUunBz8kNyehVv6UdKlEI76nEz0/EY0OddBRlFAAbrq8W9UFhS2FJYmQ0sxXUiNlEiYa+xMG9QkqXtBCrTFDKvZpynVlvlivxBTsh10qrVItyQhDbRU5+kP/73m1ByZ8xCGu6PC+qwDDuIXTjNN8cviiWbw0LEvQZznSsFpHncBW42mqC6qTtPHUwKsy6OY15+UXPdKL7Cx3mkryGPKyW4WegUzJQZgmynZQ==; 20:IRjE0G8hEy2bRpZZDGwz6vOwILBokNepE6AwR5IJjiziOw60gmw8q+2eXrIFALQ6obweD4ZCZgMDhC+hocrjpI64WeHGxEPE2pu8E2j+v+gKmO3TJBJVl8MwSdg1dYl8YGnbv9xdYUgRLfJDmN9lJCGr6F1lQG6YMOtYS6GUuwY= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2017 12:47:52.2731 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1989 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.0.136 Subject: [Qemu-devel] [PATCH v2 6/9] virtio-console: chardev hotswap support 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: pbonzini@redhat.com, Anton Nefedov , den@virtuozzo.com, Amit Shah , marcandre.lureau@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Anton Nefedov Reviewed-by: Vladimir Sementsov-Ogievskiy CC: Amit Shah --- hw/char/virtio-console.c | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/hw/char/virtio-console.c b/hw/char/virtio-console.c index cf7331d..bd74669 100644 --- a/hw/char/virtio-console.c +++ b/hw/char/virtio-console.c @@ -49,7 +49,7 @@ static ssize_t flush_buf(VirtIOSerialPort *port, VirtConsole *vcon =3D VIRTIO_CONSOLE(port); ssize_t ret; =20 - if (!qemu_chr_fe_get_driver(&vcon->chr)) { + if (!qemu_chr_fe_backend_connected(&vcon->chr)) { /* If there's no backend, we can just say we consumed all data. */ return len; } @@ -163,12 +163,35 @@ static void chr_event(void *opaque, int event) } } =20 +static int chr_be_change(void *opaque) +{ + VirtConsole *vcon =3D opaque; + VirtIOSerialPort *port =3D VIRTIO_SERIAL_PORT(vcon); + VirtIOSerialPortClass *k =3D VIRTIO_SERIAL_PORT_GET_CLASS(port); + + if (k->is_console) { + qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, + NULL, chr_be_change, vcon, NULL, true); + } else { + qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, + chr_event, chr_be_change, vcon, NULL, fal= se); + } + + if (vcon->watch) { + g_source_remove(vcon->watch); + vcon->watch =3D qemu_chr_fe_add_watch(&vcon->chr, + G_IO_OUT | G_IO_HUP, + chr_write_unblocked, vcon); + } + + return 0; +} + static void virtconsole_realize(DeviceState *dev, Error **errp) { VirtIOSerialPort *port =3D VIRTIO_SERIAL_PORT(dev); VirtConsole *vcon =3D VIRTIO_CONSOLE(dev); VirtIOSerialPortClass *k =3D VIRTIO_SERIAL_PORT_GET_CLASS(dev); - Chardev *chr =3D qemu_chr_fe_get_driver(&vcon->chr); =20 if (port->id =3D=3D 0 && !k->is_console) { error_setg(errp, "Port number 0 on virtio-serial devices reserved " @@ -176,7 +199,7 @@ static void virtconsole_realize(DeviceState *dev, Error= **errp) return; } =20 - if (chr) { + if (qemu_chr_fe_backend_connected(&vcon->chr)) { /* * For consoles we don't block guest data transfer just * because nothing is connected - we'll just let it go @@ -188,11 +211,13 @@ static void virtconsole_realize(DeviceState *dev, Err= or **errp) */ if (k->is_console) { qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, - NULL, NULL, vcon, NULL, true); + NULL, chr_be_change, + vcon, NULL, true); virtio_serial_open(port); } else { qemu_chr_fe_set_handlers(&vcon->chr, chr_can_read, chr_read, - chr_event, NULL, vcon, NULL, false); + chr_event, chr_be_change, + vcon, NULL, false); } } } --=20 2.7.4 From nobody Mon Apr 29 00:20:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495198538628555.1680683797676; Fri, 19 May 2017 05:55:38 -0700 (PDT) Received: from localhost ([::1]:58662 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhRR-0006cO-9U for importer@patchew.org; Fri, 19 May 2017 08:55:37 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46903) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhK1-0000ds-QU for qemu-devel@nongnu.org; Fri, 19 May 2017 08:48:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dBhK0-0004LL-LA for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:57 -0400 Received: from mail-eopbgr00136.outbound.protection.outlook.com ([40.107.0.136]:31167 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dBhK0-0004AG-Dp for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:56 -0400 Received: from xantnef-ws.sw.ru (195.214.232.6) by DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Fri, 19 May 2017 12:47:53 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=DrXMR7Sdipw4haMa2nMBJbNvyduAUzAb3KYUHLOmSwk=; b=Mrg0X/32a34JTftupBlOtjGlMArMJG00b2OXALqs7W87nVAJ0Y6+p+IGQpbI+4PP/JJub+kc8P/KSwCmGPExEHUJhP72/D0OEr3jUbQk4oUafqZJp5gzPtdRjfcItGxjZKiZ+muU9+i3Vxjed8h4iIrBFALjBknpcYspj48q3d4= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Anton Nefedov To: Date: Fri, 19 May 2017 15:47:20 +0300 Message-ID: <1495198042-124203-8-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0002.EURPRD10.PROD.OUTLOOK.COM (10.171.79.12) To DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB6PR0801MB1989: X-MS-Office365-Filtering-Correlation-Id: 5238bb09-7b7f-4bc8-f324-08d49eb54474 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 3:do24fnXYwaa2Ko3COIaBx8Oq9PnQ0udalOcM4vcRYa+0aUY/qdBamWZUiquFK8aORtGXl76gjfixZMQ8cNhua9sWvYrzYB5PrJ7y/I5kAPzZanI9sfzRAxNfTQxHFBwBBJB1f9DF/OlMiuned6mRDxP/YDIjuOqQqSZw/kmGwOCknPraFMtM7IldnFh04GFcAFfKXITWNrMJxtG285Yf4MPz/3ntuvhtPhodH7o24YzPUcY8rIecjaa1mH2nKSz6pk22iodV3ZWsdosTibpSbefG+eVRT5n+bjJJWyusWoUpRvMjK9p0daoDB+DLgDXQYOlXESqxh2jw79IEydBsNg==; 25:HUsfj/klPkTTa9lm5Lpx14B+WIwtf9ejIxG3FkZRlyhxt3R9A2nZ+SBtS+A/jHduYICwZpaMrk2u6Xi6u3owkAuw97TWTlLAFBrcOLtAkldQtknwx7Hs3p4tx+4riDjiw9ZgKcbHeJdCyOC+80ycPKPiXwghCgieKihbrmLtHmdKRSKnyNJnCAUfCSdyYek1YZb/rx9lyNu700Dn7NwRjJz00HojhkT2aiMpb9sY07kRfxct04vesJK6ZwcR1ScTEE6PA31zV3GHcwQIkcDoQ/qTndXv+NOrf8EEwkYef9TM8NeIazBslcvSsdLnegllj++xTMv0sc3ngQut+VZQ0Tbavqi8kk8aZgQu3ulDhck0bVi9CusWRAeASJ3sp32KKoJgrxz/YkU6206N5wQGh3DS0733KSAx/c9iQTaFtSfRCRczDxCdUd1yinPug00rp3vjJ0aowQ//IJ5Suatx5T+Ua0wzkfc5Q2NMe0TWosg= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 31:ekmpWW4kHaSaZ7bT3noryU6hlRRlX88f94/9097YEBH/mHj2OS3PCi288TirrKDkUYzDTsG7vgKQGCaOS8KimBb7Uyy9qLRnBWC9hWCZAmHjSz/JjrZyNnXM8mIHfRiwm+m2WMiMABxwiOM3gTLRe5ho1ltDrpepbXuv6d1AEC9krp+QtwoUmgEZuIsnZhlufeovu6xKNXi+5NVgikUI7XclULPXMmGgPQ6A4CGf4C4=; 20:6OdiLNKcf/8K3VUmCOxII5uXLTu6McBLyaOsBEtgJh92SEtDlWvMY9JaLJmIFjnsF3aW9SyMziAEPwiyjMi8apBCSUx8NtaGpefR6c++poobAsnzkxjApTu2fttJRNFTeCltgGxJgxqMXnnHEpRRc3oKO6RN2dx1peGP79dqZZgPL51ajY0gz9TrVjMebFEJM+mdwvqVDmpZT1qKUDx++L8S0nX/rPsJ16/ZyQVa6LPseHpL5quw2g4b1jmAQ/C/YvbzCV9QK/b7NslI3LBCmTA+4JZgKhZx3ASd54Ob+Uhdlab5dsSR39FoSB3S9BfJ/6DYjTHJDKgwP+mtxodGiQoDgJ80YcnkgxQkHu4NrHvn2XD487Jm2ozT8UeQzpcoGavOfQGRzABh/EJjVBDD6OGE3UN29SHO34XBpGkFmWw= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123560025)(20161123555025)(20161123558100)(20161123562025)(20161123564025)(201703131423075)(201703061421075)(6072148); SRVR:DB6PR0801MB1989; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 4:e5lDhUWPExOwX1l9VsUG1r8/SOHvKeCb7nWwbWEKE1fVK4gnbO7jAxmSUOuI2QpY8jG0uG69xzeMIRz6vTuJIn4Wt7Tft+Ub7XHm6f5E+5TT2Xnk5HUxycTLtWIZY87zjP0ZwsxRywB4vART6VRH8gKIlhzRCQcAzC+/EgvmMvQQSBqKVi7NRDM2Q5wlsaZsTqvLg7Zns1S3xrc5ciaD2LN26KQ/tEKu3rT5TZ3STyDj2RI0ZyC6Z4hQGGmDi1iXK2my5O8svfzyXOhpfgYwJBzEnEZl/JZexCbpUngGMXMGCFuTBVm9OpTBpZH8Inzucp205BvY2+qRyLvyeHLZUujoPHwDlGrOGOh1FhpxqWMXpvVKQYPs0Ub0auPcT5yFyvNoqm+iBZ8Mx5ftPoOSUuMFz10kgYo2Z3xF9KElD//Y+3M1gvM9REYjRjITSNhjWlXjYIE2LCOIoKYShfJRo0duw4T52N+tBvOtpXf6T9QRscO1CId3u3HchI/dcoXls3VNDDVAPpSmnouduesziORWt1RWijNQFfSorT19CChYirqImHco53ufDRlydXHTZTK7qEM+cGqnZ2qJbm54Hl7sbjwmAZdy3asEa9bEfevx6wRlrc9NpRVvfEWGp2Jrbi2e5t4y+Dkw5daZcnEBCyXbCAuAEqAAra14gLeU2c73z6RCZCZgGeohtRFcZBuxN2gTeHG+l3yGaJmLotKcPw== X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39400400002)(39450400003)(33646002)(48376002)(15650500001)(5003940100001)(53936002)(38730400002)(25786009)(2351001)(6506006)(6486002)(4326008)(110136004)(5660300001)(36756003)(7736002)(6916009)(2950100002)(305945005)(6666003)(66066001)(2906002)(189998001)(50226002)(50466002)(54906002)(508600001)(86362001)(6512007)(81166006)(8676002)(50986999)(53416004)(3846002)(76176999)(42186005); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1989; H:xantnef-ws.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1989; 23:6xKwZ1fzfSAyOk/PlDGfNaXxk8u1Amft11V9+X5?= =?us-ascii?Q?qG3NNpa3Zf/C7xVZocYnJhSS3sm9a5VbxsYTLP+aceFNeHtPNbz9iTEh+XIt?= =?us-ascii?Q?8ah+OgmjSDwOASrwe//rI5sOoYanu2BiarU0SE5YqsTksy3VvZN0Z0YebSHJ?= =?us-ascii?Q?Rk/XbcHRzcCbOgxnnq58Gylf0+I+hz6yKo+1YRh2KlsYtqiyzTjYXl6dsTsX?= =?us-ascii?Q?XEG7nPbu/qf9uQdX9DWY+CELhK/wkeJ9kTs5WUIL6SYjhEajVHf8A47+dKyG?= =?us-ascii?Q?OWWT+89GFSGSpKvcKLgQBq9qEByYNpPuV63O8qfIDDxl/7UAePHZqKLGHi+R?= =?us-ascii?Q?5NT37vwAVfGuvTi4sktCjW6RWQr77zy5dw0t4IuXejCEKwlbHdLaX57Xczdk?= =?us-ascii?Q?H34n2kbu3O3ieXQo631XTQPW5sB9DsTCBfsV1pQukCYCX0HFGCXcY6ZScWih?= =?us-ascii?Q?esqZfDr2xmcxw4rM0Pw32txlemVcB/vEI6e6Bdx2W6ZbZqN2MHa3EMxIi/n+?= =?us-ascii?Q?O9tZzHhbFnNW2DOibiObtA9d9HB9n2IZFZPfHaL0wnE6eN7N2qdSR7k2A+tx?= =?us-ascii?Q?4RwlmV8pIeiupNyGvgXx7DRFzRlReHAAs97KcRr0R4fSXGaaUM0DOmNREbQk?= =?us-ascii?Q?19IzMT2xN2LXc1vdIMWqDK5MOXcdenGHq0xuKFG2TSF7ric6XN/0duildvC7?= =?us-ascii?Q?Sfr2I9RQgrVobq/qMNvqHuWTcMQJlPMQ4qrXKVv+sT1428p60nIUZPJwS9YC?= =?us-ascii?Q?n0GlEivH/ozXp2w+kS/IMXyPnCuVpmGuR3ejRpkXCQytOMOkPjJ9y4JGvBfw?= =?us-ascii?Q?zTebqJ/LLaEbmRZeobRGhzmMOB2/c1hYcN8LsWhtnSdsPVMmpJwmpWAdMAeI?= =?us-ascii?Q?U0Wj0hgj/7W9gU3b0gr0L0QhmQOtp+8LZqfnHS1WPxnu2WMBkhvhBArurC93?= =?us-ascii?Q?YJabGMpbJMRcAbWpCiTtbm9JTyTKS/zgujqT/rGE6b/HjR0fTeTwyBkzRDL2?= =?us-ascii?Q?/Noo=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 6:lSmHb96hs8WXrZhPiFyfMMp4+avuEwGRQ28jAxuFiBRdpSEKFMIqKd/JuPBTmj9U+nWa18iMDPPaCbNNkj0MPo/gPV9r8bP5zddEKIlIzuFldJT9I0pW9pe1RNZYj6ZmwecqklEBXEyCJ2KMWJZTjcHpZCdMdrQv1NhuwwAYge8w2Hn3lmuYR1adFAc7mz1fRW5fLz83D+adH/NB13bwfgnJksDWAWdcABOsLh8FJQQFH3cQJep/rsc0rHe3GSnGstV6gJtTaAfY7imqLic5Ru3wgEgk779wlbJeuo/h9fn9tklVWK67m1httCz12aW++9cJyA5pIbsyOEh/HZ0cByL0pCF+lV8Ny9cb8WO08QhqWetQNgO7tbt9ad3bSNbj9YJ5MRPczdUwdaSOiFBOZLLLll+7gLyYcxF6vKK6ooCRzAqXbrqe8z/kqOy3cJKIsBB9x+ZtY2MzNUxfYsmmax6X8Z4yJ8gTl0AhviKTL53b7YW5CkBzYLamWsIILBGN8zikw3KDzm3R7DpF7IbHbg==; 5:D7IathfNpPL3nWcvw4vrX7P1kON08utNA1Xj66gD+aBaQvDxCGu/tJVpacFw/U8Ivs4dFemoEWJUPUY5aqE61cAKNLwYygoQdXPK7krpAOrs1VRDCVFxhf+mAv/YGwUmdihiE+xT5MEY2AhpUefbig==; 24:te/vnwUS9UKhg0LAMNgDBluaBapeyU432VYHRv9vE9LmAnX50om1ORLRBqQYYfsN7S+iOKOj5w7kf/NnJVXUi/44aj0FF/DafHrhR8uhkDM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 7:OCbsZxjC6bswd+4sHHVyUHaGFiUg8kkQ8E9usbqbH+qb/Bvevwpn8A+cmz8/eNAkn9aVSLOGGH+Ee9YFLm60zzcEwEBoLH566J6c/kjYkUR7UjEGe0HvLfRTGHiCpxg9xj4IRzm9M9OxSyKm4bgEnYLvXq4WNUy+8F2LCM3CLu3nB+DyWm6NSXYJVSDmww6iorrTkX5tgoG+bS2Uuw3yaARLpUIZ3VjeA588H4g9gIbIcK0wi2lw1Xtuv5n5mkApQNRswcfFvzVk4khLRLdgB0JPsvsvhwbCaoE6Pi7Z5tE7TSBtt0NcoDkU8Wl3hHYLi38Ac/b2JkSuxn4hpXwFsQ==; 20:kLyjeuCZ3sQYUHYlGChwlzh2+DTDwAxOhjV2zOJwtav4DYoTntKP7eIjBeGA2H27NdrVboRTgO7y0OveaTSH1DncMRulBDL0o90iZYLORIctHuR+tQvxoGXqMvRj6DhKv4vC099USAnqfH93S+8gMbpTS2EIYiEnJom6ZIxye0o= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2017 12:47:53.5752 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1989 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.0.136 Subject: [Qemu-devel] [PATCH v2 7/9] serial: move TIOCM update to a separate function 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: pbonzini@redhat.com, Anton Nefedov , "Michael S . Tsirkin" , den@virtuozzo.com, marcandre.lureau@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" will be used by the following patch Signed-off-by: Anton Nefedov Reviewed-by: Vladimir Sementsov-Ogievskiy CC: Michael S. Tsirkin CC: Paolo Bonzini Reviewed-by: Marc-Andr=C3=A9 Lureau --- hw/char/serial.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/hw/char/serial.c b/hw/char/serial.c index d8d34d0..1e6bdeb 100644 --- a/hw/char/serial.c +++ b/hw/char/serial.c @@ -312,6 +312,24 @@ static void serial_write_fcr(SerialState *s, uint8_t v= al) } } =20 +static void serial_update_tiocm(SerialState *s) +{ + int flags; + + qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_GET_TIOCM, &flags); + + flags &=3D ~(CHR_TIOCM_RTS | CHR_TIOCM_DTR); + + if (s->mcr & UART_MCR_RTS) { + flags |=3D CHR_TIOCM_RTS; + } + if (s->mcr & UART_MCR_DTR) { + flags |=3D CHR_TIOCM_DTR; + } + + qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_SET_TIOCM, &flags); +} + static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, unsigned size) { @@ -426,24 +444,13 @@ static void serial_ioport_write(void *opaque, hwaddr = addr, uint64_t val, break; case 4: { - int flags; int old_mcr =3D s->mcr; s->mcr =3D val & 0x1f; if (val & UART_MCR_LOOP) break; =20 if (s->poll_msl >=3D 0 && old_mcr !=3D s->mcr) { - - qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_GET_TIOCM, &fl= ags); - - flags &=3D ~(CHR_TIOCM_RTS | CHR_TIOCM_DTR); - - if (val & UART_MCR_RTS) - flags |=3D CHR_TIOCM_RTS; - if (val & UART_MCR_DTR) - flags |=3D CHR_TIOCM_DTR; - - qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_SET_TIOCM, &fl= ags); + serial_update_tiocm(s); /* Update the modem status after a one-character-send wait= -time, since there may be a response from the device/computer at the other end of the serial= line */ timer_mod(s->modem_status_poll, qemu_clock_get_ns(QEMU_CLO= CK_VIRTUAL) + s->char_transmit_time); --=20 2.7.4 From nobody Mon Apr 29 00:20:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495198209343490.72137891242073; Fri, 19 May 2017 05:50:09 -0700 (PDT) Received: from localhost ([::1]:58631 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhM7-0001ve-OW for importer@patchew.org; Fri, 19 May 2017 08:50:07 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46909) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhK2-0000e9-4I for qemu-devel@nongnu.org; Fri, 19 May 2017 08:48:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dBhK1-0004MK-8V for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:58 -0400 Received: from mail-eopbgr00136.outbound.protection.outlook.com ([40.107.0.136]:31167 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dBhK0-0004AG-Tk for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:57 -0400 Received: from xantnef-ws.sw.ru (195.214.232.6) by DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Fri, 19 May 2017 12:47:54 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=qk4+N56zFOaQl8tTAT9xQowW3cvZ2Vo57CBCXApoVo8=; b=hjlwozk12bDqv2DiPlHwP8L2s6nBHDz6RiYw3L96T+9/jlXIzbQyvAyPePlGR8lpBCzTOAA6nzUbR9uQIhB8++KRwHsOtySUOyEwBNQ3VTnOIGAZEL+EqrSSz7YWhyymynoqTzykZkXyQC9Q7bjH6oA91kru9/lOr1OwUDQrCV8= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Anton Nefedov To: Date: Fri, 19 May 2017 15:47:21 +0300 Message-ID: <1495198042-124203-9-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0002.EURPRD10.PROD.OUTLOOK.COM (10.171.79.12) To DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB6PR0801MB1989: X-MS-Office365-Filtering-Correlation-Id: 8075a02f-d8d5-4160-f7bc-08d49eb54537 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 3:4cpJRIS3VUz+TP9n1ek65sGYTwhZF07JOisIE3Me7ijVKPF+0cZluAQ8yk6KKq3FW3XvP0lPC/rxFEXZnqMWWJKfYzZE7wETHy6e1ei3gg5vpFX7pHkVQIim0ST+QDc1/8P+ZptHXuFbZr92Kr6hcCLV+JBuo/dA9PExGMQLv8d1Ig7ZsOqJ+W5xn4/ZwVv+fWhrIeoQ9XulyBZNVFo7k79DkVECPmIH2BfuORz4bWjs2J47CJn4RCEvmCLiomhiG16zZr9pXPKKycRKKTVNEdKVxw2NLeVq54XT76/rsCIfyAcOtVUuAl5Nigdsql3/3QU6UPzKZg5NH3uJMyLOZg==; 25:S6Er06bVdFC1S+maUqAnRVcPDcqzxECHja0wP2va5z4Sa9TSdH+GIvFF1JbzwwTIfdvpDpSX/+X/O92IikfD8yiPVTYjQUihNvwTT5oNa/DE/XGTUU6OIOkDtBClaX0Vyo7MtvMrX+rXiQKAv9VXe6sQYuoOx1R1MXJ4mxSCqy+aTLpTiJ2sbdDwetLgqmVCM41Bv+gY7GawhmEGV5055AsP6in6E9I/aJBPGuN32eD5osyr5/UBbd4ATlGHtAhsXBL3Xu07GXZ90+EV31ran83ECo35+ZwgZURmdUVBZetCprpn8onl1RUquRdfgaRCqcMOWq8JEwMFtdvccO51vR8XA+SldlJhpgtN4TJgu/TBhUmAGidyZ2A13jAg1tDXddw8Cck+1H9exj+JffwlxVhgg1XjGd0iwBrlzhmdsgH5V3bZbsTtbMHXTIhCxWbB+5MyaDj2MghlRuG9SlXTugn1vGI01j8XavsTTBhcOZg= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 31:KuAe63vd5wSUSJ21qgu1ZzdBMKeCfW568q+KhHLHfGM5nfaX0rxZZmecFmacDzwqrmCw3NF8D3tYSUz7vM8maFRtKbnQCGZ7ajzgJRndxBgHqWy3/DdKOexGGE6ToOaKWRs3au79acj6f4+ySFXI88YE1meETb7vHzin63VNNwgYHMm6bwIkwhbIQmQSPHtReyE5TZOObB7lNRXGW6VB59SxPEXjtojEY7S5d35zJhs=; 20:r1B10601LpP7IyF2qgVjGKNcwn80LqKmsReTYPW4X/nW+6f0/q8PDCXc2ue7n4WHicPHVeX9OXDqF/FHcfaqDTy9Tdl+W5LRkMhEx7RkYRHqBmcdVFxrmIpp0IGQrhMtSDOW1+WVYHlZ66JIx6gQ5vbYOEObzhWrw0kyaSrETSxr/RTGeJBkqQqF5wL4OU+WqXbL/FpQgkRFT9Dds0SgD+ihRHktwimwr2jn0x5gMw8AqfVQcB4u4Ukfk4jE+FmJIvmUXFiWyXs6pfpFj9cPqEQdnxW8INuSugF10/NooDhUFUoi8YgHk5lHYEpDW74jsIQQzEAn9cOAkUDEGUpz1yXCmXQzwn0jRH8E3jySrhE1jZy2oKovvPJ/uGEyr11GmQr7cJc6WPBZ3784lKei2XxZr4QyX0qtg1n8V+iRUh8= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123560025)(20161123555025)(20161123558100)(20161123562025)(20161123564025)(201703131423075)(201703061421075)(6072148); SRVR:DB6PR0801MB1989; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 4:BX2bih+s2tQnyxsYJ6bbHq8Up8pQ4TeudGKuBQLIFiSV8JI3iOfgpynLfiaLXyzr7r2LaNe4MWtwA5+mkJ/CD/9o/gTLZtq3ETJo3FGTojg+BrPiF7YNl2VlTW+RYkRuCuK46aho6LjDrDUW16HLFW0Py7ibbff1ZezvL3WA5FMX2N0DNaysj3I2JzsgkjIaWKWF311zj8rzG7LgQQLD5E0lvIy5ry2tbgEvJ3kkphpwYy7b+CiWonIrxlou1sFWXLIjBLR7/HN/MZ+K9Wo66Bkx8c6f34hLVuv+LY3yzOTdVWaFTL73yTDkNRDudhH+Illvrp7a+Ee3ZRthnuOTikO+LWSi279cKdudauxzfksd8p0cxWJsx39Ms9KqtiBOY479onevZCBUatQKxSiR8P3C8gL0WHnRqPm6PQ9+O20AH/+ZplMq2CtLngfM/eVnDEzgEnUpyYKftILdzLYmenn77sK5cfRFS+wemAbfIXTBmQOFaMTPAxwMBN551mGHFAxcsme6Zu3SaL+FOOyZ3CZ6BOnpr1Mb0zXzUsOYF383K56V4LIhzEV5yDgAucK5dTRZ7pntVdE8QrNu0ehcn5k4lcuTI6CRP226jdIyqwGHuH77HcTAu4XBhPcatURtWILLYw2pBs5pBc7gZazezz/i5geko6GhW5bYegPBmHZEGVKvDJQQXO1K6M9TtoPFIXZYMukoAsJ70+6r4pFU0Q== X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39400400002)(39450400003)(33646002)(48376002)(5003940100001)(53936002)(38730400002)(25786009)(2351001)(6506006)(6486002)(4326008)(110136004)(5660300001)(36756003)(7736002)(6916009)(2950100002)(305945005)(6666003)(66066001)(2906002)(189998001)(50226002)(50466002)(54906002)(508600001)(86362001)(6512007)(81166006)(8676002)(50986999)(53416004)(3846002)(76176999)(42186005); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1989; H:xantnef-ws.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1989; 23:mMMwen1s+gtbOg1m61LK70ToDD/QN9qYTZUMogP?= =?us-ascii?Q?WZhwuneeOsNbu4dX6l+qdnzmtbVP2Mrpj3uFSNFtBhbtjSkkKHXLW50ghp5K?= =?us-ascii?Q?rnHz/L29CHn6ahoclKBkIqbB4nAVjZuVCGEy88IEP3vif+FPXcSwHAwnSfd0?= =?us-ascii?Q?S5P8+wz94XwXOt09UfpVfwq/MAZ1+/4kD08FUd7Y5Ffi/RpkK0R0WKZQ0ZSB?= =?us-ascii?Q?yxxcaRH8DB0BGbVeEadeiGVaTWEacw4k92t6r/EZo4nzahnW4Qbn4+POYG61?= =?us-ascii?Q?0mIuVyDbW9YQ+274aUIsraehauHuhlHvIXLRsnX8gznBG3WunDKiuG8hz7Pu?= =?us-ascii?Q?vKQ8j+xhqG5u3T4ra2ln5cRRUqDPTXtq+9691p7Qx/dxzRdVg1JAD2P+pryQ?= =?us-ascii?Q?PrHZf285476umumH1wpfvW/8+I7wfKqAtqWMDIQviRPUZ8g0TPrLLg49yIyL?= =?us-ascii?Q?Ge5DYpN5+0rivUku6JOERRFRdeCemtVAw05IV40nJ4q9ykg6MKSuDu5u/dlC?= =?us-ascii?Q?Gb3p7a/o4s3RFT/rzhq/ChEiyPPFCJjw2ockLF1RNqfCZEYoChRgA5m0buFc?= =?us-ascii?Q?oVCWG/5WfwnQY7gpMBzlqCPcWdokfWW6O7tAgPznapvgr4RG/JvgYgtTnFCf?= =?us-ascii?Q?7rQ3B38XLiZLXA3HTCq7gzmiCr+Iu+rKdYq6SwEFP2TOf1K4FCvYmtH02bC2?= =?us-ascii?Q?rFM40dOraPWrnOXUQSdJFzKQBmUhDuvP78xXOzcVZu2AqBGfXWNAYSiAO6jL?= =?us-ascii?Q?/eAcXt/vzGdJs22lfTtuiaUmOtrr5WjebVcvpbdRlg+Ajo/FUEm3ZUOmInEp?= =?us-ascii?Q?8Cc99ZzMH5C6iqNGAVhJtJZIWzXUq6wNKPW00ol8Jng8mEnwHwAqZCLs4u5n?= =?us-ascii?Q?MJ8Zt83UEksi6WA2gh06Q7pN7yoUuPdOzLKYdn0I42201tX0jQuB+iMy/H5D?= =?us-ascii?Q?mMi15Fxw+t68wFGH7iByI2kzSEsAQ1b0K/7iDCCRFiQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 6:xGdT0S4K6HcCnFhYuiKEsc+osNgtfey90dTkHs4F0ffFAM/kczayFHu6mxUqncJPAamsoofaLwxmIxi/j1S/v0gPZXdw4RayGmCBqlj1NfBEN4cnzAJnZxd9EeOklMUHxIiHQlpiQsqh0JKZO6SbKqyINJ+zg7TblPhVYyomvfrGB4V6g7NVfOBa1buxoo51dnwa3WY5bIdEfkHdXBNcMBZcECRa40ZfzFhrUkB6128b7ML8ykQBNDtyev+3f8VE8XYbSc661VTmPiJ9gpZmL8a/6bnkxSP945BXfgROEKo1qK/gy3rhlsG61K+djs3Htsei/wVELE6pm+GOmzHgxl2i4MYWXO3ctYgtfeT0TehnyO9g32PFsO+t+C4mPXHqTElITo5JUfcaSUSE6LXVyb5TVJUNavliGJVibExRp83gLF+dTYw9Q1VsptyX1A+fWdYTu/c+96s9mSaFhSrR9yvVQwB8vha4+QYqXk/xoZLVTOJF+62DwW0eacoiyoJ9/EnJSOPj7yeXVOiWKPGfcw==; 5:qz0ut8sAJGYW/YZ9MEAGRXkBMqBNgCH9St66OGrnbonsspTCx4TStX0dmvj4pqY4tQ9uwqvIKoX3dXUMz42yO57stEITsRW3budWz00zqBZiNijpKXniVNvEOac3Y3MgZna6E/oyB2+IYyyRIvf5lg==; 24:8EN/+WNH3TgEYZmoiJJO/EwfEaYRZviGF2C2HzKcf8VlfipJyWboOmXzxbSTMqILduZY8xlVbOKeL8EepCER7aGMkiugIo9gAvYgoU11ah0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 7:AWQQFTVA/LrEXf1i9eGCx3hvdsWjQi71+PPr2WLv2Mmz0euLGCUZrEepNLYyv455HhQeqHMN8oJKGdDInSo/LeOTtkFePEoKgMielTOCII0xizHO+xmuWM6pKYB+5H1UVoAPKagjAC5TmqBbIjvCeqOsX19gXf4zlAfQMlR8zfimQEz45AF95yhtCOcPDrUeB+EUI/2PgOriBYo7iUxwgoGlbxsTc+cwcPkkockJYO4x4x5PetvTlTez5w7Ox5Me2dWvccndDkvZKc7laiEa5W4b1ZFpFGNJesxg/cA8K2X8bjR9jLcDlTZ9Ma1+H8nDwoVFScuZCJlCxGYdYFommg==; 20:XauWpLEG9lLRmk6PS2V3avmtZVNIbxlEmQ5NFWQLmiZNNic8DtU8hzGIbJmtOcCLrhYg2tDjQ40F6SnT0DJJUHAnJpooviQGvfqMR8RHx9j5fXhDTgXioXu5DDl+4yLNA/cT/paBW41lid18Jq1VJ8kNJy/oix7Z4YOFhJBd9Ic= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2017 12:47:54.8483 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1989 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.0.136 Subject: [Qemu-devel] [PATCH v2 8/9] serial: chardev hotswap support 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: pbonzini@redhat.com, Anton Nefedov , "Michael S . Tsirkin" , den@virtuozzo.com, marcandre.lureau@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" for a backend change, a number of ioctls has to be replayed to sync the current setup of a frontend to a backend tty. This is hopefully enough so we don't have to track, store and replay the whole original control byte sequence. Signed-off-by: Anton Nefedov Reviewed-by: Vladimir Sementsov-Ogievskiy CC: Michael S. Tsirkin CC: Paolo Bonzini --- hw/char/serial.c | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/hw/char/serial.c b/hw/char/serial.c index 1e6bdeb..ed01637 100644 --- a/hw/char/serial.c +++ b/hw/char/serial.c @@ -891,9 +891,37 @@ static void serial_reset(void *opaque) s->msr &=3D ~UART_MSR_ANY_DELTA; } =20 +static int serial_be_change(void *opaque) +{ + SerialState *s =3D opaque; + + qemu_chr_fe_set_handlers(&s->chr, serial_can_receive1, serial_receive1, + serial_event, serial_be_change, s, NULL, true= ); + + serial_update_parameters(s); + + qemu_chr_fe_ioctl(&s->chr, CHR_IOCTL_SERIAL_SET_BREAK, + &s->last_break_enable); + + s->poll_msl =3D (s->ier & UART_IER_MSI) ? 1 : 0; + serial_update_msl(s); + + if (s->poll_msl >=3D 0 && !(s->mcr & UART_MCR_LOOP)) { + serial_update_tiocm(s); + } + + if (s->watch_tag > 0) { + g_source_remove(s->watch_tag); + s->watch_tag =3D qemu_chr_fe_add_watch(&s->chr, G_IO_OUT | G_IO_HU= P, + serial_watch_cb, s); + } + + return 0; +} + void serial_realize_core(SerialState *s, Error **errp) { - if (!qemu_chr_fe_get_driver(&s->chr)) { + if (!qemu_chr_fe_backend_connected(&s->chr)) { error_setg(errp, "Can't create serial device, empty char device"); return; } @@ -904,7 +932,7 @@ void serial_realize_core(SerialState *s, Error **errp) qemu_register_reset(serial_reset, s); =20 qemu_chr_fe_set_handlers(&s->chr, serial_can_receive1, serial_receive1, - serial_event, NULL, s, NULL, true); + serial_event, serial_be_change, s, NULL, true= ); fifo8_create(&s->recv_fifo, UART_FIFO_LENGTH); fifo8_create(&s->xmit_fifo, UART_FIFO_LENGTH); serial_reset(s); --=20 2.7.4 From nobody Mon Apr 29 00:20:28 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; dkim=fail spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1495198488735465.9240580300602; Fri, 19 May 2017 05:54:48 -0700 (PDT) Received: from localhost ([::1]:58651 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhQd-0005xk-AR for importer@patchew.org; Fri, 19 May 2017 08:54:47 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46935) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dBhK3-0000eU-TO for qemu-devel@nongnu.org; Fri, 19 May 2017 08:48:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dBhK1-0004Mk-P6 for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:59 -0400 Received: from mail-eopbgr00136.outbound.protection.outlook.com ([40.107.0.136]:31167 helo=EUR02-AM5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dBhK1-0004AG-HJ for qemu-devel@nongnu.org; Fri, 19 May 2017 08:47:57 -0400 Received: from xantnef-ws.sw.ru (195.214.232.6) by DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Fri, 19 May 2017 12:47:56 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=34wDlga/NuUnlvEX9jKUNHa9MMj9ZUX4MMg3zUyNmZo=; b=eRf+xhZk+SZi4QBuSafBF2PIWd7rGqPAnUgV4pVF00P0NawDN+M7MG8+GUm55mGYOSa9RWMD+IDpQG5pN2OUpweJ5Ewk9CPW8ipAMDOemVLF4VtvdptBSSVrqO+BewbyNOH8fbFI07Y0rahs/XEDWUza8rzkFhgea47w+OP+7Ms= Authentication-Results: nongnu.org; dkim=none (message not signed) header.d=none; nongnu.org; dmarc=none action=none header.from=virtuozzo.com; From: Anton Nefedov To: Date: Fri, 19 May 2017 15:47:22 +0300 Message-ID: <1495198042-124203-10-git-send-email-anton.nefedov@virtuozzo.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> References: <1495198042-124203-1-git-send-email-anton.nefedov@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: DB6PR1001CA0002.EURPRD10.PROD.OUTLOOK.COM (10.171.79.12) To DB6PR0801MB1989.eurprd08.prod.outlook.com (10.168.85.150) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB6PR0801MB1989: X-MS-Office365-Filtering-Correlation-Id: fba0a6a4-7859-436a-c871-08d49eb545ec X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131423075)(201703031133081); SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 3:L6DzhIw23ug1y8p7gNxLEZLo3V0sp5UPB+NCpFt6lOUpISRbCBaAVv2p1/5YMiPX8eumtvc2GQ6AesnkYFe/9CTXizkE+OIYrYcuWjng1wTo+yNx5ybc7kH2MqCW8jrcGHgpXRwqIePD40yMX8A5eyoPWwLwqYnNykLgjQTgf3MOjKvqspQK7YliNxKicL1DY5u+Si7L0rg5rVS8zY2QZYWfF+VRr9743X2ftWFSnhSXSPHdF3NoUzUwkiJntbSs6SvjOhnyDTUCcat2F52YkYlB5vErXLBMnxlJ/bE5MRX3yjhTub3fgmW72xmhbGpZ4T4U4ZgezpUSczwnt/rV0A==; 25:Xwqcb656aX8XloC/U0n/vhSDR30O8e6KBIJXERLZ8T+34EKFkTvaruUfdtE1mlgZgyXKxmkt03EpP3CT5gRqnVILCmqYDLSC9iMBSvP2xt3RJ30kIqB94ziuhtAPQcbbn4XSQSfu9eMR+J6GOuHqcyJmHRLUFIvi+3XAGTfrVzf40UaK6vX45twmvzHH2RQ8l4iSsinOvfUNVl0gwLEk2sa8PHxNGCybPjjgvjKzFjWDUa7K+TPsk/j3qO1sLjhiRflgsc80DcHnJI31BAU6F+2630AR2Jih7GQIS4xmqnoFErsXQ1Kpdoghg1iGSRTkI2BKVuJqbZhEmQIrsbkhJKbhhbZq+OReI2UfOW0tYN8AiQu4OorJTBIXLae7zQS+mdD9NYzjxvRPk+ScSpx8ecPKYiMLCRC14lGO3AE1FXMInSwN1dyOzX27NwJwNuJXuADoMG08na6NDRP5rbfUl2SEVB4ya3r3IHykSN6pX20= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 31:4XWdO2BKD/QXqthNttEsglOC03Nu1N2YL883iE2rmiJipZlsb1BqZIfL3UOIhgF5yaaR6kPKB5MKEqYi0R4GqS7uXdj0h12Tp7i7pYtWgkVQCgbDCyHUO3JSZIxpqBUqevJT9ZduHiJTd6xaGPZ6TOpVe9kB8QbkHj1RckEC3464CSgVtD6KQIjXqOQDkIIM0vIMV3MKPdAKn7Jw1SJi+uN0awMwWGFtllBFm1haYfE=; 20:801e/IlkwOk9gG4a9MdNi8Nzfok9f5LAgiOWZonMR+0A970419tYTZwMWnf/DeyE5SGDtWBOs/UW/1Pc2ZYw5qR13HIYU4fk4L5PYcGKg6urhxGS/+xQOrn8IP+y8KY5lNgei+orn/WQtgaWWwSaMppSUasgz7gev01P8HqPCUGysrJH+utmtE9ILLbhQ9InZ39vK8K0QzQ+mEf5an4Qp9/+FLzKJ6gfsVF9dblvkRRx6rYPiHnFyJhc1J9Cw20htd7Nh92wQCpzLyE5BhjXr3IsmjTztty1Ztav1In4Y4f1ApmizFUPqnMCUAtwty8HpiytuLciO82biWySY2qFoVFU6iajNNceJwe9nn0ogW6czFEJzfISQJfWEMYSNWE2K/l2XGqKmo246mvXhGbPIltcs/SPU1ZM1fHn8Gq1w8E= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(158342451672863); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(10201501046)(93006095)(93001095)(3002001)(6041248)(20161123560025)(20161123555025)(20161123558100)(20161123562025)(20161123564025)(201703131423075)(201703061421075)(6072148); SRVR:DB6PR0801MB1989; BCL:0; PCL:0; RULEID:; SRVR:DB6PR0801MB1989; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 4:OC1ZDjjo3aUP1B13gsSSFKDy0KenOwtRofkicTT+AtpAJVBAidjmLkNObPGlzlh1SRnQx1f8Kg0yyEWhiL8JrRqoCYF9i0d6YrK3vHq6fGqUx46z3gzYMDfsI7z/tkIhm0YNlV4mcvp/WoqK0/RQCJ2PtkWtK/k/foqevc34HfTYTSJjtMRHOHSMxsxIQ0cOJFVQ1BD2jpPigElIkdLHupyfc4/1Ri4XNp2sOfB9z7yrnBlz+CO/i2E+Li6wJPJFk62K61jMDaStMkjN9vDV8ILE4DFWpayrXiCXXlST1VBeCBlfOW2+Y1wtuMXiYLWi32DLKS5tL32zdlU4/PlgWUndGjvE9UyZkLudWQz2ZpKjMimW6yCCQOsVNKSJhgtGYiWFdNJFO9I3VQAi+eoFIcFQxxmgDU1KQ4yvncmn8eFXM6zlITzxAyeVu2o8L+ucQFGIoLy/VSlTtExRVMfWfiFfdtLeqvOU6ONrPOZIWJcbZg3GQbscYU1zglsxFa+9Tt3n8qOJNrpGffdnd1tQ+Cc3oL/MN4o2QZnQIOCDagxs78z3nzZMloQCrvq6vSDF9+P3RmlA9sj6WE6f0rpsJ/L1E6LZPp3YRSpN/EPir3B8u+IdOcEbL48yXbKo5PjmwwN50+26VrkAdA0koY6OzYNOl8eAMqMVgCLG5ghorDZMUfA11U5zKgjzn7BUunMIIwiVt0fitmDFJCZsbEtwcBYvz3WXb7beBX4YqjVMdYs87gYMpauUWeql5AjoBlbGCCSv95oo49pwd/lRTF8uIA== X-Forefront-PRVS: 031257FE13 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(4630300001)(6009001)(39400400002)(39450400003)(33646002)(48376002)(5003940100001)(53936002)(38730400002)(25786009)(2351001)(6506006)(6486002)(107886003)(4326008)(110136004)(5660300001)(36756003)(7736002)(6916009)(2950100002)(305945005)(6666003)(5890100001)(66066001)(2906002)(189998001)(50226002)(50466002)(54906002)(508600001)(86362001)(6512007)(81166006)(8676002)(50986999)(53416004)(3846002)(76176999)(575784001)(42186005)(21314002); DIR:OUT; SFP:1102; SCL:1; SRVR:DB6PR0801MB1989; H:xantnef-ws.sw.ru; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DB6PR0801MB1989; 23:2GJ+OwvCIzWcEPSV7gH5OM65ZaTKwODzLaMlajD?= =?us-ascii?Q?76Unmuguj+l4pm1FCS4Sqjd4GbD3T+/zTcq+pc9TeytMu35UGEC0BfzJscLK?= =?us-ascii?Q?W8IqbBZofBalQ4aiQbwC9BNpSPsHwKS+8Xw7hxwrrUVJNdnPvAg7tDl91tk6?= =?us-ascii?Q?hmsE9NzQsgaE7RsWjet9P+SOwbwZQwEAKd80OPis5EUMvR0VzUvAeJXZYnIE?= =?us-ascii?Q?tp98absaFWq9LyWsurf9Jq3iRTgPojp05hlTgn1SMo8tqlh592yArS1UFXsE?= =?us-ascii?Q?eGKYgSUYO7pK8qhzxqmcVCoADwdCEUTTcD1wU+bJS4bOaVuhp7SZW3HQbqyi?= =?us-ascii?Q?YRn2Z4pFmId/JpivfLPUhRjtX9JAXRBdB/yCiWffWPaVbBEg3sa+GyAQvoCd?= =?us-ascii?Q?rD1x+LG3Fg5PxPbQnR33RumKuZzyUYefqGnrY+DPGscPstrCm9m1cDfqx5vn?= =?us-ascii?Q?TYth9KC5kCIlF16Yl2xxrZSqKYb/amzaJ8XVwP7fPCg8Ple+zbVNpmsoIbP0?= =?us-ascii?Q?cCe9rxVwzQ6fAdj4vkYaoy53uF5JbkbKTu9Xvg/3r3Mfv3uP9Mkafe3vGm9w?= =?us-ascii?Q?KdcpIpwmSKlYgVHWgao2GmAUBKWKaHN+lfJ1m6MzUesanWI7c6PJxkLEWb+B?= =?us-ascii?Q?hbO6DL6OHspD/8SKfEg1dzMI526R3canI+yT52IzIi9k84KaOQQX5aQ5Tcta?= =?us-ascii?Q?RjC2VZz3dmWgEeXH/e/gFZQORN9DOZIEFv4B0TRhf6itXrCjL8RmINQLQ9Wr?= =?us-ascii?Q?KTxJL3eTbknDgVAfMM6csdql3SbW8bXwKTcYj/1fx0W4Ibcro/pDET+6Jda/?= =?us-ascii?Q?JmanX4zI4JDzcNgN/nMuSG83cbwBIpIVqOdZbo70Hie5VVPdeGFUDwQ+d1g+?= =?us-ascii?Q?0vPCYApJ/EUQGtag410VX5B8yBr2/vWmtDxvN8jy4DGUfKRYE1FKs/gpF2J0?= =?us-ascii?Q?vKAWSGZx1xNvbtg3ScKbBWkUfpKCh9I7DqGmuHuCQoruDEgO64y4oXG2ysjN?= =?us-ascii?Q?9HWlrKeR/8s00qmqm17kQNB1s8LOcdq2RYmDGA9rsdCW1TqubOWuATdvvcPk?= =?us-ascii?Q?y4bCX+Mc=3D?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 6:Ru/d/DBKqC4RBoGlxEu1LTXDB3ai5JUV5ekVgpIE4+1qAbzxO9MFMGaMzRGR3h3JBz4mxwRv8dbJPw3Z1fb+2GFRUUm0nnECtKYmI3qbIQtORWJxVwxj8nu9ozTBd0kQKujSQc1fvN6s18NS3b0ClPd9pG9lF/BPctg1nSRFtJyEryZWE3SFiNDpzCsaGhuqcbXV/ID0sF2P4gOPRSE9A/HYGlFzDOarkxfw85vrJoD8aMNYzliwZGa4I9UhEZuEF51cmIC2rAQo+usTWG2f85V0Za8XVgMUu81vpsY1N6wlXNcDZYj/7Brym3UIZDyffr9sWHyYs/BkNiYU9SmoqlnMVrOfBQjo2Rnz/ODCfF1JiZfcIH2E32uYigfp+eg0yW0SpIBMfCUrRoRodsjFMF8rwNFD4dpS8IOevxPl+d4OERogBIRRAw5MeMA1oajeu19X58+qJg5xoF4Jxr58vWD8tDDzdNLkG4USNIGgdwBQsodZNr0JRlRIwkOu56k4jDYpebs0zHunDKY9WQBm4g==; 5:wEInx0xWRtulTFN8/Wz0UWYALqJtURSbM0GtSJxJk7z71aqNILVglaYtqC8/JOSWHnqD4D63flj+yOisAiudEm6giKOjLuAGIEjcpRUEc4stbqKMWb2B+/T7iy0md2gB0TeoGcrTIHc6x2FXmc/dZA==; 24:SQtxhzWOceXWaztyVqVZ9dlW+RbfSBjdF0umAL1AHOLDbf0idVrEQqzJGDXb3I20mwd38Ttqpf0ziVheFdFyY2KF/+/+xJ2vj5MOGJ0Xids= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DB6PR0801MB1989; 7:1V1Y7PTGPzlaipwIAW4NaqCpne5IMRAL/xgI8vNJj8ZtR76HA3rtNxsHThKJOTcEshZC/Ll/18jpoj5GfCaZoPGv2c0NK3uYoVYZhIvvfTHTXzmRvTnOWN53i3MC7C3WnOY+m2B61LmPUA5usTRvmilnuh04UeL676HucN7wxA9C9h/fOwxt0XOSw4Qsgd+77voG1sE3giTmRnUKgvszOIaAg1/xcYCMWVdbEPoHNaC9hrRyhROIJLQ/mz2I5AEVQZOavomemeEc77QENixVzfoWD+k7UWU6/EAjnjVRWESqAxHob08tYGAZREzGK3kuwUQHqN9kNSWOCriN7NkoOw==; 20:JvqEZ6Zx6QmscMfYfsAxDzSMoXBz+TU5Ny09pE6GF824lx9sdNLAjVp6wNib7kcneIWhl2spSnQLYTXwwsd6T6jyMTfPfv/gSHuF0gxey87zZIU1j0lMKqD7BYtbMqE4CiQcntXYeVv5FCCH2gGPPaHbvPrUKflm6kyZd5spQao= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 May 2017 12:47:56.1033 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0801MB1989 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 40.107.0.136 Subject: [Qemu-devel] [PATCH v2 9/9] char: avoid chardevice direct access 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: pbonzini@redhat.com, Anton Nefedov , den@virtuozzo.com, marcandre.lureau@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" frontends should avoid accessing CharDriver struct where possible Signed-off-by: Anton Nefedov Reviewed-by: Vladimir Sementsov-Ogievskiy --- chardev/char.c | 5 +++++ gdbstub.c | 2 +- hw/arm/strongarm.c | 2 +- hw/char/cadence_uart.c | 2 +- hw/char/debugcon.c | 2 +- hw/char/escc.c | 6 +++--- hw/char/exynos4210_uart.c | 2 +- hw/char/grlib_apbuart.c | 2 +- hw/char/ipoctal232.c | 2 +- hw/char/parallel.c | 2 +- hw/char/sclpconsole-lm.c | 2 +- hw/char/sclpconsole.c | 2 +- hw/char/sh_serial.c | 2 +- hw/char/spapr_vty.c | 2 +- hw/char/terminal3270.c | 2 +- hw/char/xen_console.c | 2 +- hw/ipmi/ipmi_bmc_extern.c | 2 +- hw/misc/ivshmem.c | 4 ++-- hw/usb/ccid-card-passthru.c | 4 ++-- hw/usb/dev-serial.c | 5 ++--- hw/usb/redirect.c | 5 ++--- include/sysemu/char.h | 7 +++++++ net/filter-mirror.c | 2 +- 23 files changed, 39 insertions(+), 29 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index 36d6f36..e43d840 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -494,6 +494,11 @@ bool qemu_chr_fe_backend_connected(CharBackend *be) return !!be->chr; } =20 +bool qemu_chr_fe_backend_open(CharBackend *be) +{ + return be->chr && be->chr->be_open; +} + static bool fe_connect(CharBackend *b, Chardev *s, Error **errp) { int tag =3D 0; diff --git a/gdbstub.c b/gdbstub.c index 1ac0489..68cbe8a 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2001,7 +2001,7 @@ int gdbserver_start(const char *device) NULL, &error_abort); monitor_init(mon_chr, 0); } else { - if (qemu_chr_fe_get_driver(&s->chr)) { + if (qemu_chr_fe_backend_connected(&s->chr)) { object_unparent(OBJECT(qemu_chr_fe_get_driver(&s->chr))); } mon_chr =3D s->mon_chr; diff --git a/hw/arm/strongarm.c b/hw/arm/strongarm.c index bec093d..9d7cf21 100644 --- a/hw/arm/strongarm.c +++ b/hw/arm/strongarm.c @@ -1105,7 +1105,7 @@ static void strongarm_uart_tx(void *opaque) =20 if (s->utcr3 & UTCR3_LBM) /* loopback */ { strongarm_uart_receive(s, &s->tx_fifo[s->tx_start], 1); - } else if (qemu_chr_fe_get_driver(&s->chr)) { + } else if (qemu_chr_fe_backend_connected(&s->chr)) { /* XXX this blocks entire thread. Rewrite to use * qemu_chr_fe_write and background I/O callbacks */ qemu_chr_fe_write_all(&s->chr, &s->tx_fifo[s->tx_start], 1); diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c index 71867b3..19636c0 100644 --- a/hw/char/cadence_uart.c +++ b/hw/char/cadence_uart.c @@ -278,7 +278,7 @@ static gboolean cadence_uart_xmit(GIOChannel *chan, GIO= Condition cond, int ret; =20 /* instant drain the fifo when there's no back-end */ - if (!qemu_chr_fe_get_driver(&s->chr)) { + if (!qemu_chr_fe_backend_connected(&s->chr)) { s->tx_count =3D 0; return FALSE; } diff --git a/hw/char/debugcon.c b/hw/char/debugcon.c index 6d95297..bd0d4f0 100644 --- a/hw/char/debugcon.c +++ b/hw/char/debugcon.c @@ -87,7 +87,7 @@ static const MemoryRegionOps debugcon_ops =3D { =20 static void debugcon_realize_core(DebugconState *s, Error **errp) { - if (!qemu_chr_fe_get_driver(&s->chr)) { + if (!qemu_chr_fe_backend_connected(&s->chr)) { error_setg(errp, "Can't create debugcon device, empty char device"= ); return; } diff --git a/hw/char/escc.c b/hw/char/escc.c index aa882b6..dbbeb4a 100644 --- a/hw/char/escc.c +++ b/hw/char/escc.c @@ -416,7 +416,7 @@ static void escc_update_parameters(ChannelState *s) int speed, parity, data_bits, stop_bits; QEMUSerialSetParams ssp; =20 - if (!qemu_chr_fe_get_driver(&s->chr) || s->type !=3D ser) + if (!qemu_chr_fe_backend_connected(&s->chr) || s->type !=3D ser) return; =20 if (s->wregs[W_TXCTRL1] & TXCTRL1_PAREN) { @@ -556,7 +556,7 @@ static void escc_mem_write(void *opaque, hwaddr addr, trace_escc_mem_writeb_data(CHN_C(s), val); s->tx =3D val; if (s->wregs[W_TXCTRL2] & TXCTRL2_TXEN) { // tx enabled - if (qemu_chr_fe_get_driver(&s->chr)) { + if (qemu_chr_fe_backend_connected(&s->chr)) { /* XXX this blocks entire thread. Rewrite to use * qemu_chr_fe_write and background I/O callbacks */ qemu_chr_fe_write_all(&s->chr, &s->tx, 1); @@ -1012,7 +1012,7 @@ static void escc_realize(DeviceState *dev, Error **er= rp) ESCC_SIZE << s->it_shift); =20 for (i =3D 0; i < 2; i++) { - if (qemu_chr_fe_get_driver(&s->chn[i].chr)) { + if (qemu_chr_fe_backend_connected(&s->chn[i].chr)) { s->chn[i].clock =3D s->frequency / 2; qemu_chr_fe_set_handlers(&s->chn[i].chr, serial_can_receive, serial_receive1, serial_event, NULL, diff --git a/hw/char/exynos4210_uart.c b/hw/char/exynos4210_uart.c index 7ef4ea5..2b0576c 100644 --- a/hw/char/exynos4210_uart.c +++ b/hw/char/exynos4210_uart.c @@ -379,7 +379,7 @@ static void exynos4210_uart_write(void *opaque, hwaddr = offset, break; =20 case UTXH: - if (qemu_chr_fe_get_driver(&s->chr)) { + if (qemu_chr_fe_backend_connected(&s->chr)) { s->reg[I_(UTRSTAT)] &=3D ~(UTRSTAT_TRANSMITTER_EMPTY | UTRSTAT_Tx_BUFFER_EMPTY); ch =3D (uint8_t)val; diff --git a/hw/char/grlib_apbuart.c b/hw/char/grlib_apbuart.c index 610a317..1cb9026 100644 --- a/hw/char/grlib_apbuart.c +++ b/hw/char/grlib_apbuart.c @@ -201,7 +201,7 @@ static void grlib_apbuart_write(void *opaque, hwaddr ad= dr, case DATA_OFFSET: case DATA_OFFSET + 3: /* When only one byte write */ /* Transmit when character device available and transmitter enable= d */ - if (qemu_chr_fe_get_driver(&uart->chr) && + if (qemu_chr_fe_backend_connected(&uart->chr) && (uart->control & UART_TRANSMIT_ENABLE)) { c =3D value & 0xFF; /* XXX this blocks entire thread. Rewrite to use diff --git a/hw/char/ipoctal232.c b/hw/char/ipoctal232.c index 734e42c..b5ada43 100644 --- a/hw/char/ipoctal232.c +++ b/hw/char/ipoctal232.c @@ -542,7 +542,7 @@ static void ipoctal_realize(DeviceState *dev, Error **e= rrp) ch->ipoctal =3D s; =20 /* Redirect IP-Octal channels to host character devices */ - if (qemu_chr_fe_get_driver(&ch->dev)) { + if (qemu_chr_fe_backend_connected(&ch->dev)) { qemu_chr_fe_set_handlers(&ch->dev, hostdev_can_receive, hostdev_receive, hostdev_event, NULL, ch, NULL, true); diff --git a/hw/char/parallel.c b/hw/char/parallel.c index c71a4a0..b3ed117 100644 --- a/hw/char/parallel.c +++ b/hw/char/parallel.c @@ -512,7 +512,7 @@ static void parallel_isa_realizefn(DeviceState *dev, Er= ror **errp) int base; uint8_t dummy; =20 - if (!qemu_chr_fe_get_driver(&s->chr)) { + if (!qemu_chr_fe_backend_connected(&s->chr)) { error_setg(errp, "Can't create parallel device, empty char device"= ); return; } diff --git a/hw/char/sclpconsole-lm.c b/hw/char/sclpconsole-lm.c index ed1e2c5..ff54d19 100644 --- a/hw/char/sclpconsole-lm.c +++ b/hw/char/sclpconsole-lm.c @@ -195,7 +195,7 @@ static int write_console_data(SCLPEvent *event, const u= int8_t *buf, int len) { SCLPConsoleLM *scon =3D SCLPLM_CONSOLE(event); =20 - if (!qemu_chr_fe_get_driver(&scon->chr)) { + if (!qemu_chr_fe_backend_connected(&scon->chr)) { /* If there's no backend, we can just say we consumed all data. */ return len; } diff --git a/hw/char/sclpconsole.c b/hw/char/sclpconsole.c index 9a65010..7e23d09 100644 --- a/hw/char/sclpconsole.c +++ b/hw/char/sclpconsole.c @@ -163,7 +163,7 @@ static ssize_t write_console_data(SCLPEvent *event, con= st uint8_t *buf, { SCLPConsole *scon =3D SCLP_CONSOLE(event); =20 - if (!qemu_chr_fe_get_driver(&scon->chr)) { + if (!qemu_chr_fe_backend_connected(&scon->chr)) { /* If there's no backend, we can just say we consumed all data. */ return len; } diff --git a/hw/char/sh_serial.c b/hw/char/sh_serial.c index c352337..868773f 100644 --- a/hw/char/sh_serial.c +++ b/hw/char/sh_serial.c @@ -110,7 +110,7 @@ static void sh_serial_write(void *opaque, hwaddr offs, } return; case 0x0c: /* FTDR / TDR */ - if (qemu_chr_fe_get_driver(&s->chr)) { + if (qemu_chr_fe_backend_connected(&s->chr)) { ch =3D val; /* XXX this blocks entire thread. Rewrite to use * qemu_chr_fe_write and background I/O callbacks */ diff --git a/hw/char/spapr_vty.c b/hw/char/spapr_vty.c index 9cdc0e0..6d1ccff 100644 --- a/hw/char/spapr_vty.c +++ b/hw/char/spapr_vty.c @@ -78,7 +78,7 @@ static void spapr_vty_realize(VIOsPAPRDevice *sdev, Error= **errp) { VIOsPAPRVTYDevice *dev =3D VIO_SPAPR_VTY_DEVICE(sdev); =20 - if (!qemu_chr_fe_get_driver(&dev->chardev)) { + if (!qemu_chr_fe_backend_connected(&dev->chardev)) { error_setg(errp, "chardev property not set"); return; } diff --git a/hw/char/terminal3270.c b/hw/char/terminal3270.c index 943a0f3..62803e5 100644 --- a/hw/char/terminal3270.c +++ b/hw/char/terminal3270.c @@ -239,7 +239,7 @@ static int write_payload_3270(EmulatedCcw3270Device *de= v, uint8_t cmd, return 0; } } - if (!qemu_chr_fe_get_driver(&t->chr)) { + if (!qemu_chr_fe_backend_connected(&t->chr)) { /* We just say we consumed all data if there's no backend. */ return count; } diff --git a/hw/char/xen_console.c b/hw/char/xen_console.c index cb7975f..b066176 100644 --- a/hw/char/xen_console.c +++ b/hw/char/xen_console.c @@ -150,7 +150,7 @@ static void xencons_send(struct XenConsole *con) ssize_t len, size; =20 size =3D con->buffer.size - con->buffer.consumed; - if (qemu_chr_fe_get_driver(&con->chr)) { + if (qemu_chr_fe_backend_connected(&con->chr)) { len =3D qemu_chr_fe_write(&con->chr, con->buffer.data + con->buffer.consumed, size); diff --git a/hw/ipmi/ipmi_bmc_extern.c b/hw/ipmi/ipmi_bmc_extern.c index 6f2339d..0ca9e92 100644 --- a/hw/ipmi/ipmi_bmc_extern.c +++ b/hw/ipmi/ipmi_bmc_extern.c @@ -447,7 +447,7 @@ static void ipmi_bmc_extern_realize(DeviceState *dev, E= rror **errp) { IPMIBmcExtern *ibe =3D IPMI_BMC_EXTERN(dev); =20 - if (!qemu_chr_fe_get_driver(&ibe->chr)) { + if (!qemu_chr_fe_backend_connected(&ibe->chr)) { error_setg(errp, "IPMI external bmc requires chardev attribute"); return; } diff --git a/hw/misc/ivshmem.c b/hw/misc/ivshmem.c index e2dece8..a1be4bb 100644 --- a/hw/misc/ivshmem.c +++ b/hw/misc/ivshmem.c @@ -1130,7 +1130,7 @@ static void ivshmem_doorbell_realize(PCIDevice *dev, = Error **errp) { IVShmemState *s =3D IVSHMEM_COMMON(dev); =20 - if (!qemu_chr_fe_get_driver(&s->server_chr)) { + if (!qemu_chr_fe_backend_connected(&s->server_chr)) { error_setg(errp, "You must specify a 'chardev'"); return; } @@ -1259,7 +1259,7 @@ static void ivshmem_realize(PCIDevice *dev, Error **e= rrp) " or ivshmem-doorbell instead"); } =20 - if (!!qemu_chr_fe_get_driver(&s->server_chr) + !!s->shmobj !=3D 1) { + if (qemu_chr_fe_backend_connected(&s->server_chr) + !!s->shmobj !=3D 1= ) { error_setg(errp, "You must specify either 'shm' or 'chardev'"); return; } diff --git a/hw/usb/ccid-card-passthru.c b/hw/usb/ccid-card-passthru.c index 9ace5ac..c0f8acd 100644 --- a/hw/usb/ccid-card-passthru.c +++ b/hw/usb/ccid-card-passthru.c @@ -325,7 +325,7 @@ static void passthru_apdu_from_guest( { PassthruState *card =3D PASSTHRU_CCID_CARD(base); =20 - if (!qemu_chr_fe_get_driver(&card->cs)) { + if (!qemu_chr_fe_backend_connected(&card->cs)) { printf("ccid-passthru: no chardev, discarding apdu length %d\n", l= en); return; } @@ -346,7 +346,7 @@ static int passthru_initfn(CCIDCardState *base) =20 card->vscard_in_pos =3D 0; card->vscard_in_hdr =3D 0; - if (qemu_chr_fe_get_driver(&card->cs)) { + if (qemu_chr_fe_backend_connected(&card->cs)) { DPRINTF(card, D_INFO, "initing chardev\n"); qemu_chr_fe_set_handlers(&card->cs, ccid_card_vscard_can_read, diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index e6b2c7c..7aa7290 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -483,13 +483,12 @@ static void usb_serial_realize(USBDevice *dev, Error = **errp) { USBSerialState *s =3D USB_SERIAL_DEV(dev); Error *local_err =3D NULL; - Chardev *chr =3D qemu_chr_fe_get_driver(&s->cs); =20 usb_desc_create_serial(dev); usb_desc_init(dev); dev->auto_attach =3D 0; =20 - if (!chr) { + if (!qemu_chr_fe_backend_connected(&s->cs)) { error_setg(errp, "Property chardev is required"); return; } @@ -504,7 +503,7 @@ static void usb_serial_realize(USBDevice *dev, Error **= errp) usb_serial_event, NULL, s, NULL, true); usb_serial_handle_reset(dev); =20 - if (chr->be_open && !dev->attached) { + if (qemu_chr_fe_backend_open(&s->cs) && !dev->attached) { usb_device_attach(dev, &error_abort); } } diff --git a/hw/usb/redirect.c b/hw/usb/redirect.c index 1e9bf69..6992d92 100644 --- a/hw/usb/redirect.c +++ b/hw/usb/redirect.c @@ -273,10 +273,9 @@ static gboolean usbredir_write_unblocked(GIOChannel *c= han, GIOCondition cond, static int usbredir_write(void *priv, uint8_t *data, int count) { USBRedirDevice *dev =3D priv; - Chardev *chr =3D qemu_chr_fe_get_driver(&dev->cs); int r; =20 - if (!chr->be_open) { + if (!qemu_chr_fe_backend_open(&dev->cs)) { return 0; } =20 @@ -1366,7 +1365,7 @@ static void usbredir_realize(USBDevice *udev, Error *= *errp) USBRedirDevice *dev =3D USB_REDIRECT(udev); int i; =20 - if (!qemu_chr_fe_get_driver(&dev->cs)) { + if (!qemu_chr_fe_backend_connected(&dev->cs)) { error_setg(errp, QERR_MISSING_PARAMETER, "chardev"); return; } diff --git a/include/sysemu/char.h b/include/sysemu/char.h index fa21535..e1a0e52 100644 --- a/include/sysemu/char.h +++ b/include/sysemu/char.h @@ -418,6 +418,13 @@ Chardev *qemu_chr_fe_get_driver(CharBackend *be); bool qemu_chr_fe_backend_connected(CharBackend *be); =20 /** + * @qemu_chr_fe_backend_open: + * + * Returns true if chardevice associated with @be is open. + */ +bool qemu_chr_fe_backend_open(CharBackend *be); + +/** * @qemu_chr_fe_deinit: * * Dissociate the CharBackend from the Chardev. diff --git a/net/filter-mirror.c b/net/filter-mirror.c index 06321d7..72a6077 100644 --- a/net/filter-mirror.c +++ b/net/filter-mirror.c @@ -163,7 +163,7 @@ static ssize_t filter_redirector_receive_iov(NetFilterS= tate *nf, MirrorState *s =3D FILTER_REDIRECTOR(nf); int ret; =20 - if (qemu_chr_fe_get_driver(&s->chr_out)) { + if (qemu_chr_fe_backend_connected(&s->chr_out)) { ret =3D filter_mirror_send(&s->chr_out, iov, iovcnt); if (ret) { error_report("filter_mirror_send failed(%s)", strerror(-ret)); --=20 2.7.4