From: Kevin Wolf <kwolf@redhat.com>
To: Peter Crosthwaite <peter.crosthwaite@petalogix.com>
Cc: edgar.iglesias@gmail.com, qemu-devel@nongnu.org,
john.williams@petalogix.com, stefanha@linux.vnet.ibm.com
Subject: Re: [Qemu-devel] [RFC] block: Removed coroutine ownership assumption
Date: Fri, 22 Jun 2012 10:53:50 +0200 [thread overview]
Message-ID: <4FE4329E.7030806@redhat.com> (raw)
In-Reply-To: <CAEgOgz58DJxqCq1JPgWTj3t9sqa7THtopKXxX6xw4a+MhLJxRw@mail.gmail.com>
Am 22.06.2012 10:20, schrieb Peter Crosthwaite:
> On Fri, Jun 22, 2012 at 5:49 PM, Kevin Wolf <kwolf@redhat.com> wrote:
>> Am 22.06.2012 08:44, schrieb Peter A. G. Crosthwaite:
>>> The block layer assumes that it is the only user of coroutines -
>>> The qemu_in_coroutine() is used to determine if a function is in one of the
>>> block layers coroutines, which is flawed. I.E. If a client (e.g. a device or
>>> a machine model) of the block layer uses couroutine itself, the block layer
>>> will identify the callers coroutines as its own, and may falsely yield the
>>> calling coroutine (instead of creating its own to yield).
>>>
>>> AFAICT, there are no conflicts in the QEMU master here yet, but its kind of an
>>> issue, as anyone who comes along and used coroutines and the block layer
>>> together is going to run into some very obscure and hard to debug race
>>> conditions.
>>>
>>> Signed-off-by: Peter A. G. Crosthwaite <peter.crosthwaite@petalogix.com>
>>
>> What does your coroutine caller look like that this is a problem?
>
> Its a machine model that instantiated some block devices concurrently.
> Theres some chicken-and-egg issues with the instantiation such that
> they have the happen concurrently. One device instantiates a block
> device (pflash_cfi_01) from coroutine context. block then check
> qemu_in_coroutine() which returns true so it uses my coroutine for its
> inner workings, whereas if it were a normal machine model it would
> kick of its own coroutine to do its block stuff.
>
> Does
>> it make assumptions about the number of yields or anything like that?
>
> Yes it does, but I thought that was the point of coroutines vs
> threads? coroutines you control yield behaviour explicitly whearas
> thread you cant?
Well, I can see your point, although today no code in qemu makes use of
the property that the caller could in theory know where the coroutine
yields. I think it's also dangerous because there is a non-obvious
dependency of the caller on the internals of the coroutine. A simple
innocent looking refactoring of the coroutine might break assumptions
that are made here.
Other code in qemu that uses coroutines only makes use of the fact that
coroutines can only be interrupted at known points, so synchronisation
between multiple coroutines becomes easier.
Kevin
next prev parent reply other threads:[~2012-06-22 8:54 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-22 6:44 [Qemu-devel] [RFC] block: Removed coroutine ownership assumption Peter A. G. Crosthwaite
2012-06-22 7:49 ` Kevin Wolf
2012-06-22 8:20 ` Peter Crosthwaite
2012-06-22 8:31 ` Peter Maydell
2012-06-22 8:34 ` Stefan Hajnoczi
2012-06-22 8:53 ` Kevin Wolf [this message]
2012-06-22 10:59 ` Peter Crosthwaite
[not found] ` <CAEgOgz4+5FsFUZT796chTADOXcRps0+74T4whfmdEsh_dO96VA@mail.gmail.com>
[not found] ` <CAJSP0QWVJTb9jPZC_mdWpd4OwLz4VOuxGBZ_=2M4HNeexEC96Q@mail.gmail.com>
[not found] ` <CAFEAcA_cX_jxZMSjjT=yBA1Hmf2VpWbGyDBZ8z9mqq5rVNsWWw@mail.gmail.com>
[not found] ` <CAJSP0QV=BsRhdD_tVE9Cav-bhGiF-R3+Ab2aTtun6nSoPh0EmQ@mail.gmail.com>
[not found] ` <m3vcidw3v3.fsf@blackfin.pond.sub.org>
[not found] ` <CAEgOgz6Mai7PvBkHwN0EjhFsAFMU8W=V1B1X0ZLN3c1YHRaWKA@mail.gmail.com>
[not found] ` <CAJSP0QWJcuEOmxhoAceqU2WYQkGT+fsizf-kdx_irq97j3pw4Q@mail.gmail.com>
[not found] ` <CAEgOgz51jauHzvEk0Pk+oNQ0qPekjKatvNivv4vxQsQR_6nOVQ@mail.gmail.com>
[not found] ` <CAJSP0QXnaw2HV7M+U=0S-ApGGnrGtt1w0P5w5gpmv7h-7bMs9g@mail.gmail.com>
[not found] ` <CAEgOgz65h2baE0ufvSgfow-B5fGVwJKgNwsf3C2r65HNGdiQxg@mail.gmail.com>
[not found] ` <4FED6638.90703@redhat.com>
[not found] ` <CAEgOgz6sUREnwNuiSM=344ZTNq_4xMJDFU29Sn+6dTeVww4rhA@mail.gmail.com>
[not found] ` <m3y5n61hl5.fsf@blackfin.pond.sub.org>
[not found] ` <CAEgOgz7oPPsMexuzsYwc2LOGGOC4EM9NvHjXAp0TT2T8kOyirQ@mail.gmail.com>
2012-07-02 8:50 ` Stefan Hajnoczi
2012-07-02 8:57 ` Peter Crosthwaite
2012-07-02 9:04 ` Kevin Wolf
2012-07-02 9:42 ` Peter Crosthwaite
2012-07-02 10:01 ` Kevin Wolf
2012-07-02 10:18 ` Peter Maydell
2012-07-02 10:44 ` Kevin Wolf
2012-07-02 10:59 ` Peter Maydell
2012-07-02 11:03 ` Peter Crosthwaite
2012-07-02 11:12 ` Peter Crosthwaite
2012-07-02 11:19 ` Kevin Wolf
2012-07-02 11:25 ` Peter Crosthwaite
2012-07-02 10:18 ` Peter Crosthwaite
2012-07-02 10:52 ` Kevin Wolf
2012-07-02 10:57 ` Peter Crosthwaite
2012-07-02 11:04 ` Kevin Wolf
2012-07-12 13:42 ` Markus Armbruster
2012-07-13 1:21 ` Peter Crosthwaite
2012-07-13 8:33 ` Markus Armbruster
2012-06-22 7:50 ` Jan Kiszka
2012-06-22 8:00 ` Peter Crosthwaite
2012-06-22 8:06 ` Kevin Wolf
2012-06-22 8:16 ` Peter Maydell
2012-06-22 8:23 ` Peter Crosthwaite
2012-06-22 8:33 ` Stefan Hajnoczi
2012-06-22 8:45 ` Kevin Wolf
2012-06-22 8:48 ` Markus Armbruster
2012-06-22 9:06 ` Peter Maydell
2012-06-22 12:04 ` Markus Armbruster
2012-06-22 12:30 ` Peter Maydell
2012-06-22 13:36 ` Markus Armbruster
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=4FE4329E.7030806@redhat.com \
--to=kwolf@redhat.com \
--cc=edgar.iglesias@gmail.com \
--cc=john.williams@petalogix.com \
--cc=peter.crosthwaite@petalogix.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@linux.vnet.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).