From: "Pavel Dovgalyuk" <dovgaluk@ispras.ru>
To: 'Paolo Bonzini' <pbonzini@redhat.com>,
'Pavel Dovgalyuk' <Pavel.Dovgaluk@ispras.ru>,
qemu-devel@nongnu.org
Cc: kwolf@redhat.com, peter.maydell@linaro.org,
boost.lists@gmail.com, quintela@redhat.com, jasowang@redhat.com,
mst@redhat.com, zuban32s@gmail.com,
maria.klimushenkova@ispras.ru, kraxel@redhat.com,
alex.bennee@linaro.org
Subject: Re: [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads
Date: Fri, 19 Jan 2018 15:05:55 +0300 [thread overview]
Message-ID: <002a01d3911d$dc13ca80$943b5f80$@ru> (raw)
In-Reply-To: <aca12788-c119-3046-ee8f-e7b3d4cc59bb@redhat.com>
> From: Paolo Bonzini [mailto:pbonzini@redhat.com]
> On 19/01/2018 09:44, Pavel Dovgalyuk wrote:
> > while (all_cpu_threads_idle()) {
> > + qemu_mutex_lock_iothread();
> > stop_tcg_kick_timer();
> > qemu_cond_wait(cpu->halt_cond, &qemu_global_mutex);
> > + qemu_mutex_unlock_iothread();
> > }
>
> cpu_has_work cannot be called outside BQL yet. You first need to access
> cpu->interrupt_request with atomics.
>
> In general, testing the condition outside the mutex is a very dangerous
> pattern (and I'm usually the one who enjoys dangerous patterns).
It means, that I'll have to fix all the has_work function to avoid races,
because x86_cpu_has_work may have them?
static bool x86_cpu_has_work(CPUState *cs)
{
X86CPU *cpu = X86_CPU(cs);
CPUX86State *env = &cpu->env;
return ((cs->interrupt_request & (CPU_INTERRUPT_HARD |
CPU_INTERRUPT_POLL)) &&
(env->eflags & IF_MASK)) ||
(cs->interrupt_request & (CPU_INTERRUPT_NMI |
CPU_INTERRUPT_INIT |
CPU_INTERRUPT_SIPI |
CPU_INTERRUPT_MCE)) ||
((cs->interrupt_request & CPU_INTERRUPT_SMI) &&
!(env->hflags & HF_SMM_MASK));
}
Pavel Dovgalyuk
next prev parent reply other threads:[~2018-01-19 12:05 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-19 8:42 [Qemu-devel] [RFC PATCH v4 00/23] replay additions Pavel Dovgalyuk
2018-01-19 8:42 ` [Qemu-devel] [RFC PATCH v4 01/23] This patch adds a condition before overwriting exception_index fields Pavel Dovgalyuk
2018-01-19 8:47 ` Paolo Bonzini
2018-01-19 8:42 ` [Qemu-devel] [RFC PATCH v4 02/23] block: implement bdrv_snapshot_goto for blkreplay Pavel Dovgalyuk
2018-01-19 8:42 ` [Qemu-devel] [RFC PATCH v4 03/23] blkreplay: create temporary overlay for underlaying devices Pavel Dovgalyuk
2018-01-19 8:43 ` [Qemu-devel] [RFC PATCH v4 04/23] replay: disable default snapshot for record/replay Pavel Dovgalyuk
2018-01-19 8:43 ` [Qemu-devel] [RFC PATCH v4 05/23] replay: fix processing async events Pavel Dovgalyuk
2018-01-19 8:43 ` [Qemu-devel] [RFC PATCH v4 06/23] replay: fixed replay_enable_events Pavel Dovgalyuk
2018-01-19 8:43 ` [Qemu-devel] [RFC PATCH v4 07/23] replay: fix save/load vm for non-empty queue Pavel Dovgalyuk
2018-01-19 8:43 ` [Qemu-devel] [RFC PATCH v4 08/23] replay: added replay log format description Pavel Dovgalyuk
2018-01-19 8:43 ` [Qemu-devel] [RFC PATCH v4 09/23] replay: make safe vmstop at record/replay Pavel Dovgalyuk
2018-01-19 8:43 ` [Qemu-devel] [RFC PATCH v4 10/23] replay: save prior value of the host clock Pavel Dovgalyuk
2018-01-19 8:43 ` [Qemu-devel] [RFC PATCH v4 11/23] target/arm/arm-powertctl: drop BQL assertions Pavel Dovgalyuk
2018-01-19 8:44 ` [Qemu-devel] [RFC PATCH v4 12/23] cpus: push BQL lock to qemu_*_wait_io_event Pavel Dovgalyuk
2018-01-19 8:55 ` Paolo Bonzini
2018-01-19 11:52 ` Pavel Dovgalyuk
2018-01-19 8:44 ` [Qemu-devel] [RFC PATCH v4 13/23] cpus: only take BQL for sleeping threads Pavel Dovgalyuk
2018-01-19 8:59 ` Paolo Bonzini
2018-01-19 12:05 ` Pavel Dovgalyuk [this message]
2018-01-19 12:19 ` Paolo Bonzini
2018-01-19 12:25 ` Pavel Dovgalyuk
2018-01-19 12:26 ` Paolo Bonzini
2018-01-19 12:36 ` Pavel Dovgalyuk
2018-01-19 13:20 ` Pavel Dovgalyuk
2018-01-19 13:33 ` Paolo Bonzini
2018-01-22 6:47 ` Pavel Dovgalyuk
2018-01-19 8:44 ` [Qemu-devel] [RFC PATCH v4 14/23] replay/replay.c: bump REPLAY_VERSION again Pavel Dovgalyuk
2018-01-19 8:44 ` [Qemu-devel] [RFC PATCH v4 15/23] replay/replay-internal.c: track holding of replay_lock Pavel Dovgalyuk
2018-01-19 8:44 ` [Qemu-devel] [RFC PATCH v4 16/23] replay: make locking visible outside replay code Pavel Dovgalyuk
2018-01-19 8:44 ` [Qemu-devel] [RFC PATCH v4 17/23] replay: push replay_mutex_lock up the call tree Pavel Dovgalyuk
2018-01-19 8:44 ` [Qemu-devel] [RFC PATCH v4 18/23] replay: don't destroy mutex at exit Pavel Dovgalyuk
2018-01-19 8:44 ` [Qemu-devel] [RFC PATCH v4 19/23] replay: check return values of fwrite Pavel Dovgalyuk
2018-01-19 8:45 ` [Qemu-devel] [RFC PATCH v4 20/23] replay: avoid recursive call of checkpoints Pavel Dovgalyuk
2018-01-19 8:45 ` [Qemu-devel] [RFC PATCH v4 21/23] scripts/replay-dump.py: replay log dumper Pavel Dovgalyuk
2018-01-19 8:45 ` [Qemu-devel] [RFC PATCH v4 22/23] replay: don't process async events when warping the clock Pavel Dovgalyuk
2018-01-19 8:45 ` [Qemu-devel] [RFC PATCH v4 23/23] replay: save vmstate of the asynchronous events Pavel Dovgalyuk
2018-01-19 9:25 ` [Qemu-devel] [RFC PATCH v4 00/23] replay additions no-reply
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='002a01d3911d$dc13ca80$943b5f80$@ru' \
--to=dovgaluk@ispras.ru \
--cc=Pavel.Dovgaluk@ispras.ru \
--cc=alex.bennee@linaro.org \
--cc=boost.lists@gmail.com \
--cc=jasowang@redhat.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=maria.klimushenkova@ispras.ru \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
--cc=zuban32s@gmail.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).