From: "Marc-André Lureau" <mlureau@redhat.com>
To: Eric Blake <eblake@redhat.com>
Cc: "Marc-André Lureau" <marcandre.lureau@redhat.com>,
qemu-devel@nongnu.org, pbonzini@redhat.com
Subject: Re: [Qemu-devel] [PATCH 18/40] char: remove class kind field
Date: Fri, 13 Jan 2017 10:23:54 -0500 (EST) [thread overview]
Message-ID: <724848068.2316978.1484321034557.JavaMail.zimbra@redhat.com> (raw)
In-Reply-To: <fc5e4f20-9ea2-fe8b-eafc-3b35aa4e9aa4@redhat.com>
Hi
----- Original Message -----
> 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()...
I tried to explain some of the reasons in the commit message.
We need backend->type to be set correctly for the qapi_free_ChardevBackend() to work. The kind field used to be on a class member, but we try to get rid of it. So we move that information to _parse(), and change the backend type appropriately there.
KIND_NULL is the common backend (sharing ChardevCommon).
>
> > @@ -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?
0 is KIND_FILE, which would lead to invalid free.
> > + 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?
fixed
>
> > 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?
sorry, too many rebases, conflicts.. fixed
>
> > 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
>
>
next prev parent reply other threads:[~2017-01-13 15:24 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
2017-01-13 15:23 ` Marc-André Lureau [this message]
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=724848068.2316978.1484321034557.JavaMail.zimbra@redhat.com \
--to=mlureau@redhat.com \
--cc=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.