From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: "Pavel Dovgalyuk" <pavel.dovgalyuk@ispras.ru>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Stefan Hajnoczi" <stefanha@redhat.com>
Cc: Thomas Huth <thuth@redhat.com>,
Eduardo Habkost <ehabkost@redhat.com>,
QEMU Developers <qemu-devel@nongnu.org>,
Wainer dos Santos Moschetta <wainersm@redhat.com>,
Pavel Dovgalyuk <pavel.dovgaluk@ispras.ru>,
Cleber Rosa <crosa@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>, John Snow <jsnow@redhat.com>
Subject: Re: acceptance-system-fedora failures
Date: Wed, 7 Oct 2020 14:49:08 +0200 [thread overview]
Message-ID: <c5e6f7ea-93c4-a46a-dfee-7699c08c1060@redhat.com> (raw)
In-Reply-To: <d86c9425-dcb2-7fa7-1f6f-bd7b8dab53c1@ispras.ru>
On 10/7/20 2:20 PM, Pavel Dovgalyuk wrote:
> On 07.10.2020 14:22, Alex Bennée wrote:
>>
>> Philippe Mathieu-Daudé <philmd@redhat.com> writes:
>>
>>> On 10/7/20 10:51 AM, Pavel Dovgalyuk wrote:
>>>> On 07.10.2020 11:23, Thomas Huth wrote:
>>>>> On 07/10/2020 09.13, Philippe Mathieu-Daudé wrote:
>>>>> Thanks, that was helpful. ... and the winner is:
>>>>>
>>>>> commit 55adb3c45620c31f29978f209e2a44a08d34e2da
>>>>> Author: John Snow <jsnow@redhat.com>
>>>>> Date: Fri Jul 24 01:23:00 2020 -0400
>>>>> Subject: ide: cancel pending callbacks on SRST
>>>>>
>>>>> ... starting with this commit, the tests starts failing. John, any
>>>>> idea what
>>>>> might be causing this?
>>>>
>>>> This patch includes the following lines:
>>>>
>>>> + aio_bh_schedule_oneshot(qemu_get_aio_context(),
>>>> + ide_bus_perform_srst, bus);
>>>>
>>>> replay_bh_schedule_oneshot_event should be used instead of this
>>>> function, because it synchronizes non-deterministic BHs.
>>>
>>> Why do we have 2 different functions? BH are already complex
>>> enough, and we need to also think about the replay API...
>>>
>>> What about the other cases such vhost-user (blk/net), virtio-blk?
>>
>> This does seem like something that should be wrapped up inside
>> aio_bh_schedule_oneshot itself or maybe we need a
>> aio_bh_schedule_transaction_oneshot to distinguish it from the other
>> uses the function has.
>>
>
> Maybe there should be two functions:
> - one for the guest modification
aio_bh_schedule_oneshot_deterministic()?
> - one for internal qemu things
Not sure why there is a difference, BH are used to
avoid delaying the guest, so there always something
related to "guest modification".
>
> The first one may be implemented though the rr+second one.
> Maybe replay_ prefix is confusing and the whole BH interface should look
> like that?
Yes, but it would be safer/clearer if we don't need to use
a replay_ API.
Can we embed these functions?
- replay_bh_schedule_event
- replay_bh_schedule_oneshot_event
If compiled without rr, events_enabled=false and
compiler can optimize:
-- >8 --
diff --git a/util/async.c b/util/async.c
index f758354c6a..376b6d4e27 100644
--- a/util/async.c
+++ b/util/async.c
@@ -109,14 +109,19 @@ static QEMUBH *aio_bh_dequeue(BHList *head,
unsigned *flags)
void aio_bh_schedule_oneshot(AioContext *ctx, QEMUBHFunc *cb, void *opaque)
{
- QEMUBH *bh;
- bh = g_new(QEMUBH, 1);
- *bh = (QEMUBH){
- .ctx = ctx,
- .cb = cb,
- .opaque = opaque,
- };
- aio_bh_enqueue(bh, BH_SCHEDULED | BH_ONESHOT);
+ if (events_enabled) {
+ replay_add_event(REPLAY_ASYNC_EVENT_BH_ONESHOT, cb,
+ opaque, replay_get_current_icount());
+ } else {
+ QEMUBH *bh;
+ bh = g_new(QEMUBH, 1);
+ *bh = (QEMUBH){
+ .ctx = ctx,
+ .cb = cb,
+ .opaque = opaque,
+ };
+ aio_bh_enqueue(bh, BH_SCHEDULED | BH_ONESHOT);
+ }
}
QEMUBH *aio_bh_new(AioContext *ctx, QEMUBHFunc *cb, void *opaque)
@@ -178,7 +183,12 @@ void qemu_bh_schedule_idle(QEMUBH *bh)
void qemu_bh_schedule(QEMUBH *bh)
{
- aio_bh_enqueue(bh, BH_SCHEDULED);
+ if (events_enabled) {
+ replay_add_event(REPLAY_ASYNC_EVENT_BH, bh, NULL,
+ replay_get_current_icount());
+ } else {
+ aio_bh_enqueue(bh, BH_SCHEDULED);
+ }
}
---
>
>
> Pavel Dovgalyuk
>
next prev parent reply other threads:[~2020-10-07 12:50 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-06 23:07 acceptance-system-fedora failures John Snow
2020-10-07 5:20 ` Philippe Mathieu-Daudé
2020-10-07 7:13 ` Philippe Mathieu-Daudé
2020-10-07 8:23 ` Thomas Huth
2020-10-07 8:51 ` Pavel Dovgalyuk
2020-10-07 9:57 ` Philippe Mathieu-Daudé
2020-10-07 11:22 ` Alex Bennée
2020-10-07 12:20 ` Pavel Dovgalyuk
2020-10-07 12:49 ` Philippe Mathieu-Daudé [this message]
2020-10-07 13:11 ` Pavel Dovgalyuk
2020-10-08 10:26 ` Philippe Mathieu-Daudé
2020-10-08 11:50 ` Kevin Wolf
2020-10-09 10:37 ` Pavel Dovgalyuk
2020-10-13 8:57 ` Philippe Mathieu-Daudé
2020-10-07 12:17 ` Pavel Dovgalyuk
2020-10-07 14:03 ` John Snow
2020-10-07 7:23 ` Thomas Huth
2020-10-07 8:19 ` Philippe Mathieu-Daudé
2020-10-07 14:38 ` Cleber Rosa
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=c5e6f7ea-93c4-a46a-dfee-7699c08c1060@redhat.com \
--to=philmd@redhat.com \
--cc=alex.bennee@linaro.org \
--cc=crosa@redhat.com \
--cc=ehabkost@redhat.com \
--cc=jsnow@redhat.com \
--cc=pavel.dovgaluk@ispras.ru \
--cc=pavel.dovgalyuk@ispras.ru \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
--cc=thuth@redhat.com \
--cc=wainersm@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 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).