From nobody Sat May 4 22:42:09 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1549105840189727.5431464294046; Sat, 2 Feb 2019 03:10:40 -0800 (PST) Received: from localhost ([127.0.0.1]:40832 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gptBv-000357-0b for importer@patchew.org; Sat, 02 Feb 2019 06:10:31 -0500 Received: from eggs.gnu.org ([209.51.188.92]:49294) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gptAK-0002QI-5C for qemu-devel@nongnu.org; Sat, 02 Feb 2019 06:08:54 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gptAH-00027F-Px for qemu-devel@nongnu.org; Sat, 02 Feb 2019 06:08:52 -0500 Received: from mail-ed1-x542.google.com ([2a00:1450:4864:20::542]:36841) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gptAH-00026Q-GR for qemu-devel@nongnu.org; Sat, 02 Feb 2019 06:08:49 -0500 Received: by mail-ed1-x542.google.com with SMTP id f23so7595362edb.3 for ; Sat, 02 Feb 2019 03:08:49 -0800 (PST) Received: from donizetti.fosdem.net ([2001:67c:1810:f051:6994:ac56:8e0f:c7bf]) by smtp.gmail.com with ESMTPSA id e51sm2746689edd.35.2019.02.02.03.08.42 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 02 Feb 2019 03:08:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=bBSBDwmiLo9SJtks+d5LFEdpSl0a/PlYz6Y/S/P/DgU=; b=gUyCais2HhidfxYura4LGx7TzievDWRhJ4abTIfEjRtWKXluQu2u3DjDhQ6J/RQK29 GNTXRy6TdxjG7rgnR3MhEIzuTiIL3SAgj7eScGpTxWAotvGiPazCOwE03VB96gQOFBnW cekCXWxTcORJc8VYuISMv/7yFOqiQYtopcc5Cgszxf2OUF4QbgeX3TTaClwlhTQBe4li gEER/EiPKz8X6MqlJGZuAl2YFCZVI0NtvN2BO50MZcFkvIZRTS9+RK89wXZwmzv7E5vB oTSAHgHBhqvWdTpVSrnob8nEVnEGr6sScQDfTSaxP8AdnrE1ipJjZgKQEuZZSSuzH+/c LlNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :mime-version:content-transfer-encoding; bh=bBSBDwmiLo9SJtks+d5LFEdpSl0a/PlYz6Y/S/P/DgU=; b=Vb/wslIeLDUKyRUzzgM1wSg0RU4Pc0JV9AH/SptvJX94EWW+c9X1yGrwR5uxG1laOX zejxUu4ikT4LkCJN6HqXwP3uwDwz00NhJkpTNzlRzBrv1VxDeabYHZYFtf+rdOGdgOR3 M1jfhFq4UoPjabvx8T+Z5r0503aNam2g7r1eg8X8D5q9X0lci7SngMvyp+lxTCm2bGKb HfXuSZSceGqx6Z1hGHSnRVr/Gj4Z7oUnYWU9tT9/mA9wlmtjWvzZMI85LkBtyQQv88lk xHkPJgv1ZtksWRYFCs+moY8AhShTLJ1zzHhuUiiwblNOx/oZPeJPdwIVKVd1OiodmyVZ a4Tg== X-Gm-Message-State: AJcUukcuYiR3dZUGstYJxT5xlGIqw1AT9Dfo2g45/cF3pRzT5zbYqZ8P ShLqPgCCmQlX8+k3YN+4Mpjy+ekKgso= X-Google-Smtp-Source: ALg8bN4rKZ0ll71gKVN8AxLWUs9w7WfF/5N/PqxTIVWkqx1JYbDW9SKmB7MxJjlHPmfcA4rpoM99Ow== X-Received: by 2002:a50:999b:: with SMTP id m27mr42857622edb.10.1549105727618; Sat, 02 Feb 2019 03:08:47 -0800 (PST) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Sat, 2 Feb 2019 12:08:34 +0100 Message-Id: <20190202110834.24880-1-pbonzini@redhat.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::542 Subject: [Qemu-devel] [PATCH] char: allow specifying a GMainContext at opening time 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: =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" This will be needed by vhost-user-test, when each test switches to its own GMainLoop and GMainContext. Otherwise, for a reconnecting socket the initial connection will happen on the default GMainContext, and no one will be listening on it. Signed-off-by: Paolo Bonzini Based-on: <1544684731-18828-1-git-send-email-thuth@redhat.com> Reviewed-by: Daniel P. Berrang=C3=A9 --- chardev/char.c | 30 +++++++++++++++------------- gdbstub.c | 4 ++-- hmp.c | 2 +- hw/arm/omap2.c | 2 +- hw/bt/hci-csr.c | 2 +- hw/char/omap_uart.c | 4 ++-- hw/char/xen_console.c | 3 ++- hw/isa/isa-superio.c | 4 ++-- hw/mips/boston.c | 2 +- hw/mips/mips_malta.c | 2 +- hw/usb/dev-serial.c | 2 +- include/chardev/char.h | 16 +++++++++++---- net/slirp.c | 2 +- qtest.c | 2 +- tests/test-char.c | 43 +++++++++++++++++++++-------------------- tests/vhost-user-test.c | 2 +- vl.c | 8 ++++---- 17 files changed, 72 insertions(+), 58 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index ccba36bafb..71ac061f62 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -634,7 +634,8 @@ ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, Err= or **errp) return backend; } =20 -Chardev *qemu_chr_new_from_opts(QemuOpts *opts, Error **errp) +Chardev *qemu_chr_new_from_opts(QemuOpts *opts, GMainContext *context, + Error **errp) { const ChardevClass *cc; Chardev *chr =3D NULL; @@ -674,7 +675,7 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts, Error *= *errp) =20 chr =3D qemu_chardev_new(bid ? bid : id, object_class_get_name(OBJECT_CLASS(cc)), - backend, errp); + backend, context, errp); =20 if (chr =3D=3D NULL) { goto out; @@ -687,7 +688,7 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts, Error *= *errp) backend->type =3D CHARDEV_BACKEND_KIND_MUX; backend->u.mux.data =3D g_new0(ChardevMux, 1); backend->u.mux.data->chardev =3D g_strdup(bid); - mux =3D qemu_chardev_new(id, TYPE_CHARDEV_MUX, backend, errp); + mux =3D qemu_chardev_new(id, TYPE_CHARDEV_MUX, backend, context, e= rrp); if (mux =3D=3D NULL) { object_unparent(OBJECT(chr)); chr =3D NULL; @@ -703,7 +704,7 @@ out: } =20 Chardev *qemu_chr_new_noreplay(const char *label, const char *filename, - bool permit_mux_mon) + bool permit_mux_mon, GMainContext *context) { const char *p; Chardev *chr; @@ -718,7 +719,7 @@ Chardev *qemu_chr_new_noreplay(const char *label, const= char *filename, if (!opts) return NULL; =20 - chr =3D qemu_chr_new_from_opts(opts, &err); + chr =3D qemu_chr_new_from_opts(opts, context, &err); if (!chr) { error_report_err(err); goto out; @@ -736,10 +737,11 @@ out: =20 static Chardev *qemu_chr_new_permit_mux_mon(const char *label, const char *filename, - bool permit_mux_mon) + bool permit_mux_mon, + GMainContext *context) { Chardev *chr; - chr =3D qemu_chr_new_noreplay(label, filename, permit_mux_mon); + chr =3D qemu_chr_new_noreplay(label, filename, permit_mux_mon, context= ); if (chr) { if (replay_mode !=3D REPLAY_MODE_NONE) { qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_REPLAY); @@ -753,14 +755,14 @@ static Chardev *qemu_chr_new_permit_mux_mon(const cha= r *label, return chr; } =20 -Chardev *qemu_chr_new(const char *label, const char *filename) +Chardev *qemu_chr_new(const char *label, const char *filename, GMainContex= t *context) { - return qemu_chr_new_permit_mux_mon(label, filename, false); + return qemu_chr_new_permit_mux_mon(label, filename, false, context); } =20 -Chardev *qemu_chr_new_mux_mon(const char *label, const char *filename) +Chardev *qemu_chr_new_mux_mon(const char *label, const char *filename, GMa= inContext *context) { - return qemu_chr_new_permit_mux_mon(label, filename, true); + return qemu_chr_new_permit_mux_mon(label, filename, true, context); } =20 static int qmp_query_chardev_foreach(Object *obj, void *data) @@ -935,6 +937,7 @@ void qemu_chr_set_feature(Chardev *chr, =20 Chardev *qemu_chardev_new(const char *id, const char *typename, ChardevBackend *backend, + GMainContext *gcontext, Error **errp) { Object *obj; @@ -947,6 +950,7 @@ Chardev *qemu_chardev_new(const char *id, const char *t= ypename, obj =3D object_new(typename); chr =3D CHARDEV(obj); chr->label =3D g_strdup(id); + chr->gcontext =3D gcontext; =20 qemu_char_open(chr, backend, &be_opened, &local_err); if (local_err) { @@ -991,7 +995,7 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevB= ackend *backend, } =20 chr =3D qemu_chardev_new(id, object_class_get_name(OBJECT_CLASS(cc)), - backend, errp); + backend, NULL, errp); if (!chr) { return NULL; } @@ -1049,7 +1053,7 @@ ChardevReturn *qmp_chardev_change(const char *id, Cha= rdevBackend *backend, } =20 chr_new =3D qemu_chardev_new(NULL, object_class_get_name(OBJECT_CLASS(= cc)), - backend, errp); + backend, chr->gcontext, errp); if (!chr_new) { return NULL; } diff --git a/gdbstub.c b/gdbstub.c index 3129b5c284..582e880a4a 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -2527,7 +2527,7 @@ int gdbserver_start(const char *device) * FIXME: it's a bit weird to allow using a mux chardev here * and implicitly setup a monitor. We may want to break this. */ - chr =3D qemu_chr_new_noreplay("gdb", device, true); + chr =3D qemu_chr_new_noreplay("gdb", device, true, NULL); if (!chr) return -1; } @@ -2541,7 +2541,7 @@ int gdbserver_start(const char *device) =20 /* Initialize a monitor terminal for gdb */ mon_chr =3D qemu_chardev_new(NULL, TYPE_CHARDEV_GDB, - NULL, &error_abort); + NULL, NULL, &error_abort); monitor_init(mon_chr, 0); } else { qemu_chr_fe_deinit(&s->chr, true); diff --git a/hmp.c b/hmp.c index b2a2b1f84e..c18caacfd7 100644 --- a/hmp.c +++ b/hmp.c @@ -2395,7 +2395,7 @@ void hmp_chardev_add(Monitor *mon, const QDict *qdict) if (opts =3D=3D NULL) { error_setg(&err, "Parsing chardev args failed"); } else { - qemu_chr_new_from_opts(opts, &err); + qemu_chr_new_from_opts(opts, NULL, &err); qemu_opts_del(opts); } hmp_handle_error(mon, &err); diff --git a/hw/arm/omap2.c b/hw/arm/omap2.c index 3c7d1364a9..94dffb2f57 100644 --- a/hw/arm/omap2.c +++ b/hw/arm/omap2.c @@ -799,7 +799,7 @@ static struct omap_sti_s *omap_sti_init(struct omap_tar= get_agent_s *ta, s->irq =3D irq; omap_sti_reset(s); =20 - qemu_chr_fe_init(&s->chr, chr ?: qemu_chr_new("null", "null"), + qemu_chr_fe_init(&s->chr, chr ?: qemu_chr_new("null", "null", NULL), &error_abort); =20 memory_region_init_io(&s->iomem, NULL, &omap_sti_ops, s, "omap.sti", diff --git a/hw/bt/hci-csr.c b/hw/bt/hci-csr.c index 0341ded50c..fa6660a113 100644 --- a/hw/bt/hci-csr.c +++ b/hw/bt/hci-csr.c @@ -501,7 +501,7 @@ static const TypeInfo char_hci_type_info =3D { Chardev *uart_hci_init(void) { return qemu_chardev_new(NULL, TYPE_CHARDEV_HCI, - NULL, &error_abort); + NULL, NULL, &error_abort); } =20 static void register_types(void) diff --git a/hw/char/omap_uart.c b/hw/char/omap_uart.c index 6fd1b9cf6b..52c3a326c2 100644 --- a/hw/char/omap_uart.c +++ b/hw/char/omap_uart.c @@ -63,7 +63,7 @@ struct omap_uart_s *omap_uart_init(hwaddr base, s->irq =3D irq; s->serial =3D serial_mm_init(get_system_memory(), base, 2, irq, omap_clk_getrate(fclk)/16, - chr ?: qemu_chr_new(label, "null"), + chr ?: qemu_chr_new(label, "null", NULL), DEVICE_NATIVE_ENDIAN); return s; } @@ -183,6 +183,6 @@ void omap_uart_attach(struct omap_uart_s *s, Chardev *c= hr) /* TODO: Should reuse or destroy current s->serial */ s->serial =3D serial_mm_init(get_system_memory(), s->base, 2, s->irq, omap_clk_getrate(s->fclk) / 16, - chr ?: qemu_chr_new("null", "null"), + chr ?: qemu_chr_new("null", "null", NULL), DEVICE_NATIVE_ENDIAN); } diff --git a/hw/char/xen_console.c b/hw/char/xen_console.c index dc6ff0e5b3..91f34ef06c 100644 --- a/hw/char/xen_console.c +++ b/hw/char/xen_console.c @@ -211,7 +211,8 @@ static int con_init(struct XenLegacyDevice *xendev) * FIXME: sure we want to support implicit * muxed monitors here? */ - qemu_chr_new_mux_mon(label, output), &error_abort= ); + qemu_chr_new_mux_mon(label, output, NULL), + &error_abort); } =20 xenstore_store_pv_console_info(con->xendev.dev, diff --git a/hw/isa/isa-superio.c b/hw/isa/isa-superio.c index 8bc2f69eaa..d54463bf03 100644 --- a/hw/isa/isa-superio.c +++ b/hw/isa/isa-superio.c @@ -44,7 +44,7 @@ static void isa_superio_realize(DeviceState *dev, Error *= *errp) chr =3D parallel_hds[i]; if (chr =3D=3D NULL) { name =3D g_strdup_printf("discarding-parallel%d", i); - chr =3D qemu_chr_new(name, "null"); + chr =3D qemu_chr_new(name, "null", NULL); } else { name =3D g_strdup_printf("parallel%d", i); } @@ -84,7 +84,7 @@ static void isa_superio_realize(DeviceState *dev, Error *= *errp) chr =3D serial_hd(i); if (chr =3D=3D NULL) { name =3D g_strdup_printf("discarding-serial%d", i); - chr =3D qemu_chr_new(name, "null"); + chr =3D qemu_chr_new(name, "null", NULL); } else { name =3D g_strdup_printf("serial%d", i); } diff --git a/hw/mips/boston.c b/hw/mips/boston.c index 6c9c20a93e..e5bab3cadc 100644 --- a/hw/mips/boston.c +++ b/hw/mips/boston.c @@ -512,7 +512,7 @@ static void boston_mach_init(MachineState *machine) memory_region_init_io(lcd, NULL, &boston_lcd_ops, s, "boston-lcd", 0x8= ); memory_region_add_subregion_overlap(sys_mem, 0x17fff000, lcd, 0); =20 - chr =3D qemu_chr_new("lcd", "vc:320x240"); + chr =3D qemu_chr_new("lcd", "vc:320x240", NULL); qemu_chr_fe_init(&s->lcd_display, chr, NULL); qemu_chr_fe_set_handlers(&s->lcd_display, NULL, NULL, boston_lcd_event, NULL, s, NULL, true); diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c index 74667766c2..7a403ef1ce 100644 --- a/hw/mips/mips_malta.c +++ b/hw/mips/mips_malta.c @@ -568,7 +568,7 @@ static MaltaFPGAState *malta_fpga_init(MemoryRegion *ad= dress_space, memory_region_add_subregion(address_space, base, &s->iomem_lo); memory_region_add_subregion(address_space, base + 0xa00, &s->iomem_hi); =20 - chr =3D qemu_chr_new("fpga", "vc:320x200"); + chr =3D qemu_chr_new("fpga", "vc:320x200", NULL); qemu_chr_fe_init(&s->display, chr, NULL); qemu_chr_fe_set_handlers(&s->display, NULL, NULL, malta_fgpa_display_event, NULL, s, NULL, true= ); diff --git a/hw/usb/dev-serial.c b/hw/usb/dev-serial.c index 98d1ca3c91..03c3bcd240 100644 --- a/hw/usb/dev-serial.c +++ b/hw/usb/dev-serial.c @@ -514,7 +514,7 @@ static USBDevice *usb_braille_init(USBBus *bus, const c= har *unused) USBDevice *dev; Chardev *cdrv; =20 - cdrv =3D qemu_chr_new("braille", "braille"); + cdrv =3D qemu_chr_new("braille", "braille", NULL); if (!cdrv) return NULL; =20 diff --git a/include/chardev/char.h b/include/chardev/char.h index 014566c3de..c0b57f7685 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -73,6 +73,7 @@ struct Chardev { /** * qemu_chr_new_from_opts: * @opts: see qemu-config.c for a list of valid options + * @context: the #GMainContext to be used at initialization time * * Create a new character backend from a QemuOpts list. * @@ -81,6 +82,7 @@ struct Chardev { * or left untouched in case of help option */ Chardev *qemu_chr_new_from_opts(QemuOpts *opts, + GMainContext *context, Error **errp); =20 /** @@ -106,25 +108,29 @@ ChardevBackend *qemu_chr_parse_opts(QemuOpts *opts, * qemu_chr_new: * @label: the name of the backend * @filename: the URI + * @context: the #GMainContext to be used at initialization time * * Create a new character backend from a URI. * Do not implicitly initialize a monitor if the chardev is muxed. * * Returns: a new character backend */ -Chardev *qemu_chr_new(const char *label, const char *filename); +Chardev *qemu_chr_new(const char *label, const char *filename, + GMainContext *context); =20 /** * qemu_chr_new_mux_mon: * @label: the name of the backend * @filename: the URI + * @context: the #GMainContext to be used at initialization time * * Create a new character backend from a URI. * Implicitly initialize a monitor if the chardev is muxed. * * Returns: a new character backend */ -Chardev *qemu_chr_new_mux_mon(const char *label, const char *filename); +Chardev *qemu_chr_new_mux_mon(const char *label, const char *filename, + GMainContext *context); =20 /** * qemu_chr_change: @@ -146,6 +152,7 @@ void qemu_chr_cleanup(void); * @label: the name of the backend * @filename: the URI * @permit_mux_mon: if chardev is muxed, initialize a monitor + * @context: the #GMainContext to be used at initialization time * * Create a new character backend from a URI. * Character device communications are not written @@ -154,7 +161,7 @@ void qemu_chr_cleanup(void); * Returns: a new character backend */ Chardev *qemu_chr_new_noreplay(const char *label, const char *filename, - bool permit_mux_mon); + bool permit_mux_mon, GMainContext *context); =20 /** * qemu_chr_be_can_write: @@ -272,7 +279,8 @@ typedef struct ChardevClass { } ChardevClass; =20 Chardev *qemu_chardev_new(const char *id, const char *typename, - ChardevBackend *backend, Error **errp); + ChardevBackend *backend, GMainContext *context, + Error **errp); =20 extern int term_escape_char; =20 diff --git a/net/slirp.c b/net/slirp.c index f98425ee9f..f5c32e6f8e 100644 --- a/net/slirp.c +++ b/net/slirp.c @@ -780,7 +780,7 @@ static int slirp_guestfwd(SlirpState *s, const char *co= nfig_str, Error **errp) * FIXME: sure we want to support implicit * muxed monitors here? */ - Chardev *chr =3D qemu_chr_new_mux_mon(buf, p); + Chardev *chr =3D qemu_chr_new_mux_mon(buf, p, NULL); =20 if (!chr) { error_setg(errp, "Could not open guest forwarding device '%s'", diff --git a/qtest.c b/qtest.c index 60988c8aa2..527141785f 100644 --- a/qtest.c +++ b/qtest.c @@ -763,7 +763,7 @@ void qtest_init(const char *qtest_chrdev, const char *q= test_log, Error **errp) { Chardev *chr; =20 - chr =3D qemu_chr_new("qtest", qtest_chrdev); + chr =3D qemu_chr_new("qtest", qtest_chrdev, NULL); =20 if (chr =3D=3D NULL) { error_setg(errp, "Failed to initialize device for qtest: \"%s\"", diff --git a/tests/test-char.c b/tests/test-char.c index 19c3efad72..b23d038bd2 100644 --- a/tests/test-char.c +++ b/tests/test-char.c @@ -66,7 +66,7 @@ static void char_console_test_subprocess(void) 1, &error_abort); qemu_opt_set(opts, "backend", "console", &error_abort); =20 - chr =3D qemu_chr_new_from_opts(opts, NULL); + chr =3D qemu_chr_new_from_opts(opts, NULL, NULL); g_assert_nonnull(chr); =20 qemu_chr_write_all(chr, (const uint8_t *)"CONSOLE", 7); @@ -88,7 +88,7 @@ static void char_stdio_test_subprocess(void) CharBackend be; int ret; =20 - chr =3D qemu_chr_new("label", "stdio"); + chr =3D qemu_chr_new("label", "stdio", NULL); g_assert_nonnull(chr); =20 qemu_chr_fe_init(&be, chr, &error_abort); @@ -119,7 +119,7 @@ static void char_ringbuf_test(void) qemu_opt_set(opts, "backend", "ringbuf", &error_abort); =20 qemu_opt_set(opts, "size", "5", &error_abort); - chr =3D qemu_chr_new_from_opts(opts, NULL); + chr =3D qemu_chr_new_from_opts(opts, NULL, NULL); g_assert_null(chr); qemu_opts_del(opts); =20 @@ -127,7 +127,7 @@ static void char_ringbuf_test(void) 1, &error_abort); qemu_opt_set(opts, "backend", "ringbuf", &error_abort); qemu_opt_set(opts, "size", "2", &error_abort); - chr =3D qemu_chr_new_from_opts(opts, &error_abort); + chr =3D qemu_chr_new_from_opts(opts, NULL, &error_abort); g_assert_nonnull(chr); qemu_opts_del(opts); =20 @@ -150,7 +150,7 @@ static void char_ringbuf_test(void) 1, &error_abort); qemu_opt_set(opts, "backend", "memory", &error_abort); qemu_opt_set(opts, "size", "2", &error_abort); - chr =3D qemu_chr_new_from_opts(opts, NULL); + chr =3D qemu_chr_new_from_opts(opts, NULL, NULL); g_assert_nonnull(chr); object_unparent(OBJECT(chr)); qemu_opts_del(opts); @@ -169,7 +169,7 @@ static void char_mux_test(void) qemu_opt_set(opts, "backend", "ringbuf", &error_abort); qemu_opt_set(opts, "size", "128", &error_abort); qemu_opt_set(opts, "mux", "on", &error_abort); - chr =3D qemu_chr_new_from_opts(opts, &error_abort); + chr =3D qemu_chr_new_from_opts(opts, NULL, &error_abort); g_assert_nonnull(chr); qemu_opts_del(opts); =20 @@ -335,7 +335,7 @@ static void char_socket_test_common(Chardev *chr, bool = reconnect) qemu_chr_fe_set_handlers(&be, socket_can_read, socket_read, NULL, NULL, &d, NULL, true); =20 - chr_client =3D qemu_chr_new("client", tmp); + chr_client =3D qemu_chr_new("client", tmp, NULL); qemu_chr_fe_init(&client_be, chr_client, &error_abort); qemu_chr_fe_set_handlers(&client_be, socket_can_read_hello, socket_read_hello, @@ -374,7 +374,7 @@ static void char_socket_test_common(Chardev *chr, bool = reconnect) =20 static void char_socket_basic_test(void) { - Chardev *chr =3D qemu_chr_new("server", "tcp:127.0.0.1:0,server,nowait= "); + Chardev *chr =3D qemu_chr_new("server", "tcp:127.0.0.1:0,server,nowait= ", NULL); =20 char_socket_test_common(chr, false); } @@ -382,7 +382,7 @@ static void char_socket_basic_test(void) =20 static void char_socket_reconnect_test(void) { - Chardev *chr =3D qemu_chr_new("server", "tcp:127.0.0.1:0,server,nowait= "); + Chardev *chr =3D qemu_chr_new("server", "tcp:127.0.0.1:0,server,nowait= ", NULL); =20 char_socket_test_common(chr, true); } @@ -412,7 +412,7 @@ static void char_socket_fdpass_test(void) g_free(optstr); g_assert_nonnull(opts); =20 - chr =3D qemu_chr_new_from_opts(opts, &error_abort); + chr =3D qemu_chr_new_from_opts(opts, NULL, &error_abort); =20 qemu_opts_del(opts); =20 @@ -495,7 +495,8 @@ static void char_websock_test(void) CharBackend client_be; Chardev *chr_client; Chardev *chr =3D qemu_chr_new("server", - "websocket:127.0.0.1:0,server,nowait"); + "websocket:127.0.0.1:0,server,nowait", + NULL); const char handshake[] =3D "GET / HTTP/1.1\r\n" "Upgrade: websocket\r\n" "Connection: Upgrade\r\n" @@ -519,7 +520,7 @@ static void char_websock_test(void) qemu_chr_fe_set_handlers(&be, websock_server_can_read, websock_server_= read, NULL, NULL, chr, NULL, true); =20 - chr_client =3D qemu_chr_new("client", tmp); + chr_client =3D qemu_chr_new("client", tmp, NULL); qemu_chr_fe_init(&client_be, chr_client, &error_abort); qemu_chr_fe_set_handlers(&client_be, websock_client_can_read, websock_client_read, @@ -565,7 +566,7 @@ static void char_pipe_test(void) } =20 tmp =3D g_strdup_printf("pipe:%s", pipe); - chr =3D qemu_chr_new("pipe", tmp); + chr =3D qemu_chr_new("pipe", tmp, NULL); g_assert_nonnull(chr); g_free(tmp); =20 @@ -647,7 +648,7 @@ static void char_udp_test_internal(Chardev *reuse_chr, = int sock) int port; sock =3D make_udp_socket(&port); tmp =3D g_strdup_printf("udp:127.0.0.1:%d", port); - chr =3D qemu_chr_new("client", tmp); + chr =3D qemu_chr_new("client", tmp, NULL); g_assert_nonnull(chr); =20 be =3D g_alloca(sizeof(CharBackend)); @@ -691,14 +692,14 @@ static void char_serial_test(void) qemu_opt_set(opts, "backend", "serial", &error_abort); qemu_opt_set(opts, "path", "/dev/null", &error_abort); =20 - chr =3D qemu_chr_new_from_opts(opts, NULL); + chr =3D qemu_chr_new_from_opts(opts, NULL, NULL); g_assert_nonnull(chr); /* TODO: add more tests with a pty */ object_unparent(OBJECT(chr)); =20 /* test tty alias */ qemu_opt_set(opts, "backend", "tty", &error_abort); - chr =3D qemu_chr_new_from_opts(opts, NULL); + chr =3D qemu_chr_new_from_opts(opts, NULL, NULL); g_assert_nonnull(chr); object_unparent(OBJECT(chr)); =20 @@ -731,7 +732,7 @@ static void char_file_fifo_test(void) g_assert_cmpint(ret, =3D=3D, 8); =20 chr =3D qemu_chardev_new("label-file", TYPE_CHARDEV_FILE, &backend, - &error_abort); + NULL, &error_abort); =20 qemu_chr_fe_init(&be, chr, &error_abort); qemu_chr_fe_set_handlers(&be, @@ -785,7 +786,7 @@ static void char_file_test_internal(Chardev *ext_chr, c= onst char *filepath) out =3D g_build_filename(tmp_path, "out", NULL); file.out =3D out; chr =3D qemu_chardev_new(NULL, TYPE_CHARDEV_FILE, &backend, - &error_abort); + NULL, &error_abort); } ret =3D qemu_chr_write_all(chr, (uint8_t *)"hello!", 6); g_assert_cmpint(ret, =3D=3D, 6); @@ -820,7 +821,7 @@ static void char_null_test(void) chr =3D qemu_chr_find("label-null"); g_assert_null(chr); =20 - chr =3D qemu_chr_new("label-null", "null"); + chr =3D qemu_chr_new("label-null", "null", NULL); chr =3D qemu_chr_find("label-null"); g_assert_nonnull(chr); =20 @@ -857,7 +858,7 @@ static void char_invalid_test(void) { Chardev *chr; =20 - chr =3D qemu_chr_new("label-invalid", "invalid"); + chr =3D qemu_chr_new("label-invalid", "invalid", NULL); g_assert_null(chr); } =20 @@ -890,7 +891,7 @@ static void char_hotswap_test(void) =20 chr_args =3D g_strdup_printf("udp:127.0.0.1:%d", port); =20 - chr =3D qemu_chr_new("chardev", chr_args); + chr =3D qemu_chr_new("chardev", chr_args, NULL); qemu_chr_fe_init(&be, chr, &error_abort); =20 /* check that chardev operates correctly */ diff --git a/tests/vhost-user-test.c b/tests/vhost-user-test.c index e90cd4ca65..34c4e267c7 100644 --- a/tests/vhost-user-test.c +++ b/tests/vhost-user-test.c @@ -543,7 +543,7 @@ static void test_server_create_chr(TestServer *server, = const gchar *opt) Chardev *chr; =20 chr_path =3D g_strdup_printf("unix:%s%s", server->socket_path, opt); - chr =3D qemu_chr_new(server->chr_name, chr_path); + chr =3D qemu_chr_new(server->chr_name, chr_path, NULL); g_free(chr_path); =20 g_assert_nonnull(chr); diff --git a/vl.c b/vl.c index 41d6af2947..a63f7ec1fa 100644 --- a/vl.c +++ b/vl.c @@ -2314,7 +2314,7 @@ static int chardev_init_func(void *opaque, QemuOpts *= opts, Error **errp) { Error *local_err =3D NULL; =20 - if (!qemu_chr_new_from_opts(opts, &local_err)) { + if (!qemu_chr_new_from_opts(opts, NULL, &local_err)) { if (local_err) { error_propagate(errp, local_err); return -1; @@ -2452,7 +2452,7 @@ static int serial_parse(const char *devname) snprintf(label, sizeof(label), "serial%d", index); serial_hds =3D g_renew(Chardev *, serial_hds, index + 1); =20 - serial_hds[index] =3D qemu_chr_new_mux_mon(label, devname); + serial_hds[index] =3D qemu_chr_new_mux_mon(label, devname, NULL); if (!serial_hds[index]) { error_report("could not connect serial device" " to character backend '%s'", devname); @@ -2488,7 +2488,7 @@ static int parallel_parse(const char *devname) exit(1); } snprintf(label, sizeof(label), "parallel%d", index); - parallel_hds[index] =3D qemu_chr_new_mux_mon(label, devname); + parallel_hds[index] =3D qemu_chr_new_mux_mon(label, devname, NULL); if (!parallel_hds[index]) { error_report("could not connect parallel device" " to character backend '%s'", devname); @@ -2502,7 +2502,7 @@ static int debugcon_parse(const char *devname) { QemuOpts *opts; =20 - if (!qemu_chr_new_mux_mon("debugcon", devname)) { + if (!qemu_chr_new_mux_mon("debugcon", devname, NULL)) { error_report("invalid character backend '%s'", devname); exit(1); } --=20 2.20.1