From: Markus Armbruster <armbru@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
Cc: marcandre.lureau@redhat.com, pbonzini@redhat.com,
berrange@redhat.com, eduardo@habkost.net,
qemu-devel@nongnu.org, raphael@enfabrica.net,
yc-core@yandex-team.ru, d-tatianin@yandex-team.ru
Subject: Re: [PATCH v4 5/7] chardev/char: introduce .init() + .connect() initialization interface
Date: Thu, 16 Oct 2025 08:20:55 +0200 [thread overview]
Message-ID: <87qzv3v03c.fsf@pond.sub.org> (raw)
In-Reply-To: <20251015212051.1156334-6-vsementsov@yandex-team.ru> (Vladimir Sementsov-Ogievskiy's message of "Thu, 16 Oct 2025 00:20:49 +0300")
Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> writes:
> We'll need a possibility to postpone connect step to later point in
> time to implement backend-transfer migration feature for vhost-user-blk
> in further commits. Let's start with new char interface for backends.
>
> .init() takes QAPI parameters and should parse them, called early
>
> .connect() should actually establish a connection, and postponed to
> the point of attaching to frontend. Called at later point, either
> at time of attaching frontend, either from qemu_chr_wait_connected().
s/either/or/
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
> Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
[...]
> diff --git a/include/chardev/char.h b/include/chardev/char.h
> index 429852f8d9..d2e01f0f9c 100644
> --- a/include/chardev/char.h
> +++ b/include/chardev/char.h
> @@ -63,6 +63,7 @@ struct Chardev {
> CharBackend *be;
> char *label;
> char *filename;
> + bool connect_postponed;
> int logfd;
> int be_open;
> /* used to coordinate the chardev-change special-case: */
> @@ -225,6 +226,7 @@ QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename,
> bool permit_mux_mon);
> int qemu_chr_write(Chardev *s, const uint8_t *buf, int len, bool write_all);
> #define qemu_chr_write_all(s, buf, len) qemu_chr_write(s, buf, len, true)
> +bool qemu_chr_connect(Chardev *chr, Error **errp);
> int qemu_chr_wait_connected(Chardev *chr, Error **errp);
>
> #define TYPE_CHARDEV "chardev"
> @@ -259,7 +261,31 @@ struct ChardevClass {
> /* parse command line options and populate QAPI @backend */
> void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp);
>
> - /* called after construction, open/starts the backend */
> + /*
> + * Called after construction, create the backend, mutually exclusive
> + * with @open, and should be followed by @connect().
> + * Must set the Chardev's chr->filename on success.
> + */
> + bool (*init)(Chardev *chr, ChardevBackend *backend,
> + Error **errp);
> +
> + /*
> + * Called after @init(), starts the backend, mutually exclusive
> + * with @open. Should care to send CHR_EVENT_OPENED when connected.
Would "Must send CHR_EVENT_OPENED on success" be clearer?
> + */
> + bool (*connect)(Chardev *chr, Error **errp);
> +
> + /*
> + * Called after construction, an alternative to @init + @connect
> + * and should do the work for both: create and start the backend.
> + * Mutual exclusive with @init and @connect.
Mutually
> + *
> + * May not set the Chardev's chr->filename (generic code will care),
> + * and may not send CHR_EVENT_OPENED when connected (@be_opened
> + * should not be touched in this case, to signal the generic code
> + * to care about CHR_EVENT_OPENED). If backend care about
If the backend cares
> + * CHR_EVENT_OPENED, it should set @be_opened to false.
> + */
> void (*open)(Chardev *chr, ChardevBackend *backend,
> bool *be_opened, Error **errp);
next prev parent reply other threads:[~2025-10-16 6:22 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-15 21:20 [PATCH v4 0/7] chardev: postpone connect Vladimir Sementsov-Ogievskiy
2025-10-15 21:20 ` [PATCH v4 1/7] chardev/char-socket: simplify reconnect-ms handling Vladimir Sementsov-Ogievskiy
2025-10-15 21:20 ` [PATCH v4 2/7] chardev/char: split chardev_init_common() out of qemu_char_open() Vladimir Sementsov-Ogievskiy
2025-10-15 21:20 ` [PATCH v4 3/7] chardev/char: qemu_char_open(): add return value Vladimir Sementsov-Ogievskiy
2025-10-15 21:20 ` [PATCH v4 4/7] chardev/char: move filename and be_opened handling to qemu_char_open() Vladimir Sementsov-Ogievskiy
2025-10-15 21:20 ` [PATCH v4 5/7] chardev/char: introduce .init() + .connect() initialization interface Vladimir Sementsov-Ogievskiy
2025-10-16 6:20 ` Markus Armbruster [this message]
2025-10-16 6:40 ` Vladimir Sementsov-Ogievskiy
2025-10-15 21:20 ` [PATCH v4 6/7] chardev/char-socket: move to .init + .connect api Vladimir Sementsov-Ogievskiy
2025-10-15 21:20 ` [PATCH v4 7/7] chardev: introduce DEFINE_PROP_CHR_NO_CONNECT Vladimir Sementsov-Ogievskiy
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87qzv3v03c.fsf@pond.sub.org \
--to=armbru@redhat.com \
--cc=berrange@redhat.com \
--cc=d-tatianin@yandex-team.ru \
--cc=eduardo@habkost.net \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=raphael@enfabrica.net \
--cc=vsementsov@yandex-team.ru \
--cc=yc-core@yandex-team.ru \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.