All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: qemu-devel@nongnu.org, Stefan Hajnoczi <shajnocz@redhat.com>,
	"Daniel P . Berrange" <berrange@redhat.com>,
	Paolo Bonzini <pbonzini@redhat.com>, Fam Zheng <famz@redhat.com>,
	Juan Quintela <quintela@redhat.com>,
	mdroth@linux.vnet.ibm.com, Eric Blake <eblake@redhat.com>,
	Laurent Vivier <lvivier@redhat.com>,
	Markus Armbruster <armbru@redhat.com>,
	marcandre.lureau@redhat.com,
	"Dr . David Alan Gilbert" <dgilbert@redhat.com>
Subject: Re: [Qemu-devel] [RFC v5 09/26] monitor: create monitor dedicate iothread
Date: Sat, 16 Dec 2017 12:50:28 +0800	[thread overview]
Message-ID: <20171216045028.GW7780@xz-mi> (raw)
In-Reply-To: <20171216044200.GV7780@xz-mi>

On Sat, Dec 16, 2017 at 12:42:00PM +0800, Peter Xu wrote:
> On Fri, Dec 15, 2017 at 01:21:42PM +0000, Stefan Hajnoczi wrote:
> > On Fri, Dec 15, 2017 at 04:31:08PM +0800, Peter Xu wrote:
> > > On Wed, Dec 13, 2017 at 04:20:22PM +0000, Stefan Hajnoczi wrote:
> > > > On Tue, Dec 05, 2017 at 01:51:43PM +0800, Peter Xu wrote:
> > > > > @@ -208,6 +209,12 @@ struct Monitor {
> > > > >      QTAILQ_ENTRY(Monitor) entry;
> > > > >  };
> > > > >  
> > > > > +struct MonitorGlobal {
> > > > > +    IOThread *mon_iothread;
> > > > > +};
> > > > > +
> > > > > +static struct MonitorGlobal mon_global;
> > > > 
> > > > structs can be anonymous.  That avoids the QEMU coding style violation
> > > > (structs must be typedefed):
> > > > 
> > > >   static struct {
> > > >       IOThread *mon_iothread;
> > > >   } mon_global;
> > > 
> > > Will fix this up.  Thanks.
> > > 
> > > > 
> > > > In general global variables are usually top-level variables in QEMU.
> > > > I'm not sure why wrapping globals in a struct is useful.
> > > 
> > > Because I see too many global variables for monitor code, and from
> > > this patch I wanted to start moving them altogether into this global
> > > struct.  I didn't really do that in current series because it's more
> > > like a clean up, but if you see future patches,
> > 
> > You cannot expect reviewers to jump around a 26 patch series to check
> > for possible future changes.  Each patch must be self-contained and the
> > changes need to be justified.
> 
> Noted.
> 
> > 
> > > I can add a comment in the commit message, like: "Let's start to
> > > create a struct to keep monitor global variables together".  Would
> > > that help?
> > 
> > It's better to add a comment in the code:
> > 
> > /* Add monitor global variables to this struct */
> > 
> > so that other people modifying the code know what this is about and can
> > participate.
> 
> Will do.
> 
> > 
> > Other people might not want to do it since it leads to repetitive and
> > long names like mon_global.mon_iothread.  Or they might just not see the
> > struct when defining a global.
> > 
> > The chance of the struct being used consistently is low and therefore I
> > wouldn't do it.
> > 
> > > > 
> > > > > @@ -4117,6 +4136,16 @@ void monitor_cleanup(void)
> > > > >  {
> > > > >      Monitor *mon, *next;
> > > > >  
> > > > > +    /*
> > > > > +     * We need to explicitly stop the iothread (but not destroy it),
> > > > > +     * cleanup the monitor resources, then destroy the iothread.  See
> > > > > +     * again on the glib bug mentioned in 2b316774f6 for a reason.
> > > > > +     *
> > > > > +     * TODO: the bug is fixed in glib 2.28, so we can remove this hack
> > > > > +     * as long as we won't support glib versions older than it.
> > > > > +     */
> > > > 
> > > > I find this comment confusing.  There is no GSource .finalize() in
> > > > monitor.c so why does monitor_cleanup() need to work around the bug?
> > > > 
> > > > I see that monitor_data_destroy() is not thread-safe so the IOThread
> > > > must be stopped first.  That is unrelated to glib.
> > > 
> > > Yeah actually that's a suggestion by Dave and Dan in previous review
> > > comments which makes sense to me:
> > > 
> > >   http://lists.gnu.org/archive/html/qemu-devel/2017-11/msg04344.html
> > > 
> > > I'm fine with either way: keep it as it is,
> > 
> > The meaning of the comment is unclear to me and you haven't been able to
> > explain it.  Therefore, merging this comment isn't justified.
> 
> (Please see below)
> 
> > 
> > > or instead saying
> > > "monitor_data_destroy() is not thread-safe" (which finally will still
> > > root cause to that glib bug).
> > 
> > This is incorrect.  The problem is that the IOThread may run chardev
> > handler functions while the main loop thread invokes
> > monitor_data_destroy().  There is nothing protecting the chardev itself
> > (it's not thread-safe!) nor the monitor state that is being freed, so a
> > running chardev handler function could crash.
> 
> It's only about a single line of comment, but since we are at this, I
> think it would still be good to discuss it in case I was wrong.
> 
> Firstly, I agree that chardevs are not thread-safe.  But IMHO monitors
> are thread-safe.  There is the big monitor_lock to protect.  There can
> be bug though, but generally speaking that lock should be doing the
> thread safety work.
> 
> Next, basically when destroying the monitors logically we should never
> touch the chardev if without that glib bug.  Or say, if without the
> bug we should not call qemu_chr_fe_deinit() in monitor_data_destroy().

Ouch. :-/

I was meaning remove_fd_in_watch() in qemu_chr_fe_set_handlers().  Of
course it needs to touch chardev to unregister the stuff. :-)

And I think you are right.  Let me remove the comment.  The
iothread_stop() needs to be there always, even without that bug.

Sorry for the noise.

-- 
Peter Xu

  reply	other threads:[~2017-12-16  4:50 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-05  5:51 [Qemu-devel] [RFC v5 00/26] QMP: out-of-band (OOB) execution support Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 01/26] qobject: introduce qstring_get_try_str() Peter Xu
2017-12-13 15:25   ` Stefan Hajnoczi
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 02/26] qobject: introduce qobject_get_try_str() Peter Xu
2017-12-13 15:25   ` Stefan Hajnoczi
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 03/26] qobject: let object_property_get_str() use new API Peter Xu
2017-12-13 15:27   ` Stefan Hajnoczi
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 04/26] monitor: move skip_flush into monitor_data_init Peter Xu
2017-12-13 15:28   ` Stefan Hajnoczi
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 05/26] qjson: add "opaque" field to JSONMessageParser Peter Xu
2017-12-13 15:37   ` Stefan Hajnoczi
2017-12-15  7:55     ` Peter Xu
2017-12-15 12:45       ` Stefan Hajnoczi
2017-12-16  3:28         ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 06/26] monitor: move the cur_mon hack deeper for QMP Peter Xu
2017-12-13 15:41   ` Stefan Hajnoczi
2017-12-15  8:02     ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 07/26] monitor: unify global init Peter Xu
2017-12-13 15:48   ` Stefan Hajnoczi
2017-12-15  8:11     ` Peter Xu
2017-12-15 12:47       ` Stefan Hajnoczi
2017-12-16  3:52         ` Peter Xu
2017-12-16  9:01           ` Stefan Hajnoczi
2017-12-18  3:27             ` Peter Xu
2017-12-18  9:24               ` Stefan Hajnoczi
2017-12-18 10:10                 ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 08/26] monitor: let mon_list be tail queue Peter Xu
2017-12-13 15:49   ` Stefan Hajnoczi
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 09/26] monitor: create monitor dedicate iothread Peter Xu
2017-12-13 16:20   ` Stefan Hajnoczi
2017-12-15  8:31     ` Peter Xu
2017-12-15 13:21       ` Stefan Hajnoczi
2017-12-16  4:42         ` Peter Xu
2017-12-16  4:50           ` Peter Xu [this message]
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 10/26] monitor: allow to use IO thread for parsing Peter Xu
2017-12-13 16:35   ` Stefan Hajnoczi
2017-12-15  8:50     ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 11/26] qmp: introduce QMPCapability Peter Xu
2017-12-13 16:56   ` Stefan Hajnoczi
2017-12-15  9:14     ` Peter Xu
2017-12-15  9:38       ` Fam Zheng
2017-12-16  3:58         ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 12/26] qmp: negociate QMP capabilities Peter Xu
2017-12-12 17:39   ` Dr. David Alan Gilbert
2017-12-13 17:19   ` Stefan Hajnoczi
2017-12-15  9:40     ` Fam Zheng
2017-12-15 13:26       ` Stefan Hajnoczi
2017-12-15 13:53         ` Fam Zheng
2017-12-16  5:34           ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 13/26] qmp: introduce some capability helpers Peter Xu
2017-12-12 17:44   ` Dr. David Alan Gilbert
2017-12-13 17:20   ` Stefan Hajnoczi
2017-12-15  9:42   ` Fam Zheng
2017-12-16  5:45     ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 14/26] monitor: introduce monitor_qmp_respond() Peter Xu
2017-12-13 17:35   ` Stefan Hajnoczi
2017-12-16  5:52     ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 15/26] monitor: let suspend_cnt be thread safe Peter Xu
2017-12-13 18:43   ` Stefan Hajnoczi
2017-12-16  6:12     ` Peter Xu
2017-12-16  9:11       ` Stefan Hajnoczi
2017-12-18  5:16         ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 16/26] monitor: separate QMP parser and dispatcher Peter Xu
2017-12-13 20:09   ` Stefan Hajnoczi
2017-12-16  6:37     ` Peter Xu
2017-12-16  6:46       ` Peter Xu
2017-12-16  9:23       ` Stefan Hajnoczi
2017-12-18  5:26         ` Peter Xu
2017-12-18  9:10           ` Stefan Hajnoczi
2017-12-18 10:03             ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 17/26] qmp: add new event "request-dropped" Peter Xu
2017-12-14 11:16   ` Stefan Hajnoczi
2017-12-16  6:59     ` Peter Xu
2017-12-14 11:32   ` Stefan Hajnoczi
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 18/26] monitor: send event when request queue full Peter Xu
2017-12-14 11:41   ` Stefan Hajnoczi
2017-12-16  7:17     ` Peter Xu
2017-12-16  9:28       ` Stefan Hajnoczi
2017-12-18  5:32         ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 19/26] qapi: introduce new cmd option "allow-oob" Peter Xu
2017-12-14 12:42   ` Stefan Hajnoczi
2017-12-15  9:51   ` Fam Zheng
2017-12-16  7:34     ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 20/26] qmp: support out-of-band (oob) execution Peter Xu
2017-12-14 13:16   ` Stefan Hajnoczi
2017-12-18  5:37     ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 21/26] qmp: isolate responses into io thread Peter Xu
2017-12-14 13:43   ` Stefan Hajnoczi
2017-12-18  5:52     ` Peter Xu
2017-12-18  7:32       ` Peter Xu
2017-12-18  8:40         ` Stefan Hajnoczi
2017-12-18 10:15           ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 22/26] monitor: enable IO thread for (qmp & !mux) typed Peter Xu
2017-12-14 13:44   ` Stefan Hajnoczi
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 23/26] qmp: add command "x-oob-test" Peter Xu
2017-12-14 13:45   ` Stefan Hajnoczi
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 24/26] docs: update QMP documents for OOB commands Peter Xu
2017-12-14 14:30   ` Stefan Hajnoczi
2017-12-18  9:44     ` Peter Xu
2017-12-18 14:09       ` Stefan Hajnoczi
2017-12-19  3:18         ` Peter Xu
2017-12-05  5:51 ` [Qemu-devel] [RFC v5 25/26] tests: qmp-test: verify command batching Peter Xu
2017-12-14 14:39   ` Stefan Hajnoczi
2017-12-18  9:48     ` Peter Xu
2017-12-05  5:52 ` [Qemu-devel] [RFC v5 26/26] tests: qmp-test: add oob test Peter Xu
2017-12-14 14:47   ` Stefan Hajnoczi
2017-12-18  9:51     ` Peter Xu
2017-12-18 13:59       ` Stefan Hajnoczi
2017-12-14 14:52 ` [Qemu-devel] [RFC v5 00/26] QMP: out-of-band (OOB) execution support Stefan Hajnoczi
2017-12-19  6:05   ` Peter Xu
2017-12-15 10:41 ` Fam Zheng
2017-12-15 11:43   ` Dr. David Alan Gilbert
2017-12-15 13:30   ` Stefan Hajnoczi

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=20171216045028.GW7780@xz-mi \
    --to=peterx@redhat.com \
    --cc=armbru@redhat.com \
    --cc=berrange@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=eblake@redhat.com \
    --cc=famz@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=marcandre.lureau@redhat.com \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    --cc=shajnocz@redhat.com \
    --cc=stefanha@redhat.com \
    /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.