From: Eric Blake <eblake@redhat.com>
To: "Marc-André Lureau" <marcandre.lureau@redhat.com>, qemu-devel@nongnu.org
Cc: pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH 18/40] char: remove class kind field
Date: Thu, 12 Jan 2017 12:32:01 -0600 [thread overview]
Message-ID: <fc5e4f20-9ea2-fe8b-eafc-3b35aa4e9aa4@redhat.com> (raw)
In-Reply-To: <20170111172956.11255-19-marcandre.lureau@redhat.com>
[-- Attachment #1: Type: text/plain, Size: 4810 bytes --]
On 01/11/2017 11:29 AM, Marc-André Lureau wrote:
> The class kind is necessary to lookup the chardev name in
> qmp_chardev_add() after calling qemu_chr_new_from_opts() and to set
> the appropriate ChardevBackend (mainly to free the right
> fields).
>
> qemu_chr_new_from_opts() can be changed to use a non-qmp function
> using the chardev class typename. Introduce qemu_chardev_add() to be
> called from qemu_chr_new_from_opts() and remove the class chardev kind
> field. Set the backend->type in the parse callback (when non-common
> fields are added).
>
> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
>
> +static Chardev *qemu_chardev_add(const char *id, const char *typename,
> + ChardevBackend *backend, Error **errp)
> +{
> + Chardev *chr;
> +
> + chr = qemu_chr_find(id);
> + if (chr) {
> + error_setg(errp, "Chardev '%s' already exists", id);
> + return NULL;
> + }
> +
> + chr = qemu_chardev_new(id, typename, backend, errp);
> + if (!chr) {
> + return NULL;
> + }
> +
> + QTAILQ_INSERT_TAIL(&chardevs, chr, next);
> + return chr;
> +}
> +
This part seems okay.
> @@ -4222,22 +4235,22 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts,
>
> cc = char_get_class(name, errp);
> if (cc == NULL) {
> - goto err;
> + return NULL;
> }
>
> backend = g_new0(ChardevBackend, 1);
> + backend->type = CHARDEV_BACKEND_KIND_NULL;
>
> if (qemu_opt_get_bool(opts, "mux", 0)) {
> bid = g_strdup_printf("%s-base", id);
> }
>
> chr = NULL;
> - backend->type = cc->kind;
I'm not sure I follow this hunk - we used to set backend->type
dynamically and now it is forced to KIND_NULL. Is the point that we
don't need to set backend->type here because the later call to
qemu_chardev_add()...
> @@ -4245,37 +4258,33 @@ Chardev *qemu_chr_new_from_opts(QemuOpts *opts,
> backend->u.null.data = ccom; /* Any ChardevCommon member would work */
> }
>
> - ret = qmp_chardev_add(bid ? bid : id, backend, errp);
> - if (!ret) {
> - goto qapi_out;
> + chr = qemu_chardev_add(bid ? bid : id,
> + object_class_get_name(OBJECT_CLASS(cc)),
> + backend, errp);
...now passes the Object type which can be used to derive the same same
information? In that case, was the assignment to backend->type =
KIND_NULL dead?
> + if (chr == NULL) {
> + goto out;
> }
>
> if (bid) {
> + Chardev *mux;
> qapi_free_ChardevBackend(backend);
> - qapi_free_ChardevReturn(ret);
> backend = g_new0(ChardevBackend, 1);
> - backend->u.mux.data = g_new0(ChardevMux, 1);
> backend->type = CHARDEV_BACKEND_KIND_MUX;
> + backend->u.mux.data = g_new0(ChardevMux, 1);
Why the churn on the assignment to backend->u.mux.data?
> backend->u.mux.data->chardev = g_strdup(bid);
> - ret = qmp_chardev_add(id, backend, errp);
> - if (!ret) {
> - chr = qemu_chr_find(bid);
> + mux = qemu_chardev_add(id, TYPE_CHARDEV_MUX, backend, errp);
> + if (mux == NULL) {
> qemu_chr_delete(chr);
> chr = NULL;
> - goto qapi_out;
> + goto out;
> }
> + chr = mux;
> }
>
> - chr = qemu_chr_find(id);
> -
> -qapi_out:
> +out:
> qapi_free_ChardevBackend(backend);
> - qapi_free_ChardevReturn(ret);
> g_free(bid);
> return chr;
> -
> -err:
> - return NULL;
> }
>
> @@ -5010,24 +5014,18 @@ Chardev *qemu_chardev_new(const char *id, const char *typename,
> ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
> Error **errp)
> {
> - const ChardevClass *cc;
> ChardevReturn *ret;
> + const ChardevClass *cc;
Why the churn on this declaration?
> Chardev *chr;
>
> - chr = qemu_chr_find(id);
> - if (chr) {
> - error_setg(errp, "Chardev '%s' already exists", id);
> - return NULL;
> - }
> -
> cc = char_get_class(ChardevBackendKind_lookup[backend->type], errp);
> - if (!cc) {
> + if (cc == NULL) {
Why the churn on this conditional?
> return NULL;
> }
>
> - chr = qemu_chardev_new(id, object_class_get_name(OBJECT_CLASS(cc)),
> + chr = qemu_chardev_add(id, object_class_get_name(OBJECT_CLASS(cc)),
> backend, errp);
> - if (!chr) {
> + if (chr == NULL) {
and again
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]
next prev parent reply other threads:[~2017-01-12 18:32 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-11 17:29 [Qemu-devel] [PATCH 00/40] chardev: qom clean-up and split in various backend files Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 01/40] spice-qemu-char: convert to finalize Marc-André Lureau
2017-01-11 19:52 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 02/40] baum: " Marc-André Lureau
2017-01-11 19:55 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 03/40] msmouse: " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 04/40] mux: " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 05/40] char-udp: " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 06/40] char-socket: " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 07/40] char-pty: " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 08/40] char-ringbuf: " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 09/40] char-parallel: convert parallel " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 10/40] char-stdio: convert " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 11/40] char-win-stdio: " Marc-André Lureau
2017-01-11 20:20 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 12/40] char-win: do not override chr_free Marc-André Lureau
2017-01-11 20:22 ` Eric Blake
2017-01-12 15:14 ` Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 13/40] char-win: convert to finalize Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 14/40] char-fd: " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 15/40] char: remove chr_free Marc-André Lureau
2017-01-11 20:27 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 16/40] char: get rid of CharDriver Marc-André Lureau
2017-01-11 21:33 ` Eric Blake
2017-01-12 16:14 ` Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 17/40] char: rename remaining CharDriver to Chardev Marc-André Lureau
2017-01-12 17:16 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 18/40] char: remove class kind field Marc-André Lureau
2017-01-12 18:32 ` Eric Blake [this message]
2017-01-13 15:23 ` Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 19/40] char: move to chardev/ Marc-André Lureau
2017-01-12 19:06 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 20/40] char: create chardev-obj-y Marc-André Lureau
2017-01-12 21:47 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 21/40] char: make null_chr_write() the default method Marc-André Lureau
2017-01-12 22:42 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 22/40] char: move null chardev to its own file Marc-André Lureau
2017-01-12 22:44 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 23/40] char: move mux " Marc-André Lureau
2017-01-12 23:06 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 24/40] char: move ringbuf/memory " Marc-André Lureau
2017-01-12 23:13 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 25/40] char: rename and move to header CHR_READ_BUF_LEN Marc-André Lureau
2017-01-12 23:13 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 26/40] char: remove unused READ_RETRIES Marc-André Lureau
2017-01-12 23:14 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 27/40] char: move QIOChannel-related in char-io.h Marc-André Lureau
2017-01-12 23:26 ` Eric Blake
2017-01-13 16:42 ` Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 28/40] char: move fd chardev in its own file Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 29/40] char: move win chardev base class " Marc-André Lureau
2017-01-13 19:51 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 30/40] char: move win-stdio into " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 31/40] char: move socket chardev to " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 32/40] char: move udp chardev in " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 33/40] char: move file " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 34/40] char: move stdio " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 35/40] char: move console " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 36/40] char: move pipe chardev " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 37/40] char: move pty " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 38/40] char: move serial chardev to itw " Marc-André Lureau
2017-01-11 17:29 ` [Qemu-devel] [PATCH 39/40] char: move parallel chardev in its " Marc-André Lureau
2017-01-13 19:54 ` Eric Blake
2017-01-11 17:29 ` [Qemu-devel] [PATCH 40/40] char: headers clean-up Marc-André Lureau
2017-01-13 19:52 ` Eric Blake
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=fc5e4f20-9ea2-fe8b-eafc-3b35aa4e9aa4@redhat.com \
--to=eblake@redhat.com \
--cc=marcandre.lureau@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/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.