From: Fam Zheng <famz@redhat.com>
To: Stefan Hajnoczi <stefanha@redhat.com>
Cc: pbonzini@redhat.com, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] AioContext of block jobs
Date: Thu, 26 Mar 2015 11:45:02 +0800 [thread overview]
Message-ID: <20150326034502.GF14724@ad.nay.redhat.com> (raw)
In-Reply-To: <20150325133113.GK22940@stefanha-thinkpad.redhat.com>
On Wed, 03/25 13:31, Stefan Hajnoczi wrote:
> On Wed, Mar 25, 2015 at 04:31:39PM +0800, Fam Zheng wrote:
> > I was looking at block jobs' AioContext and realized that the block job
> > coroutines are actually started in main loop.
> >
> > I'm confused because 5a7e7a0bad17c96e03f55ed7019e2d7545e21a96 and friends in
> > the series [1] seem to move the coroutines to the BDS's iothreads, but it
> > didn't do that.
> >
> > (Although after the first block_job_yield or sleep, the coroutines ARE resumed
> > in the right AioContext.)
> >
> > Why is it safe to start the jobs from the main thread where QMP command is
> > handled? I see no guarantee that the jobs won't access BDS before first yield
> > but after releasing the AioContext.
>
> Is there a concrete case you are worried about?
No, I just missed that aio_context_release is only called after the first block
job coroutine yield.
Thanks for explaining.
Fam
>
> For example:
> void qmp_block_stream(const char *device,
> ...
> stream_start(bs, base_bs, base_name, has_speed ? speed : 0,
> on_error, block_job_cb, bs, &local_err);
> if (local_err) {
> error_propagate(errp, local_err);
> goto out;
> }
>
> trace_qmp_block_stream(bs, bs->job);
>
> out:
> aio_context_release(aio_context); <----
> }
>
> Since the BDS AioContext is held during stream_start, there is no race
> condition.
>
> The resources used by the coroutine (i.e. timers or the BDS) bind their event
> handler functions to the AioContext. This means the coroutine will only be
> entered again under the AioContext in the future.
>
> Stefan
prev parent reply other threads:[~2015-03-26 3:45 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-25 8:31 [Qemu-devel] AioContext of block jobs Fam Zheng
2015-03-25 11:25 ` Paolo Bonzini
2015-03-25 12:06 ` Fam Zheng
2015-03-25 13:31 ` Stefan Hajnoczi
2015-03-26 3:45 ` Fam Zheng [this message]
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=20150326034502.GF14724@ad.nay.redhat.com \
--to=famz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--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.