qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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

  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).