qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: 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, dovgaluk@ispras.ru,
	kraxel@redhat.com, alex.bennee@linaro.org
Subject: Re: [Qemu-devel] [RFC PATCH v5 13/24] kvm: remove BQL lock/unlock
Date: Tue, 30 Jan 2018 20:24:24 -0500	[thread overview]
Message-ID: <cdd33248-c2b8-dfe1-1e8b-108503f15e77@redhat.com> (raw)
In-Reply-To: <20180123085432.3419.84711.stgit@pasha-VirtualBox>

On 23/01/2018 03:54, Pavel Dovgalyuk wrote:
> @@ -1861,7 +1861,6 @@ int kvm_cpu_exec(CPUState *cpu)
>          return EXCP_HLT;
>      }
>  
> -    qemu_mutex_unlock_iothread();
>      cpu_exec_start(cpu);
>      do {
>          MemTxAttrs attrs;


So this means that kvm_cpu_exec is now called without taking the BQL.
I'll leave aside the bisectability issue (patch 11 breaks kvm_cpu_exec,
because this qemu_mutex_unlock_iothread now has an assertion failure),
since they are easily fixed by squashing patches 11-13 together.

The lines immediately above are

    if (kvm_arch_process_async_events(cpu)) {
        atomic_set(&cpu->exit_request, 0);
        return EXCP_HLT;
    }

So this means that, after patch 11, kvm_arch_process_async_events went
from "called with BQL taken" to "called with BQL not taken".  And that
is completely broken, because it accesses cs->interrupt_request just
like cpu_has_work.  Previous reviews have ascertained that accessing
cs->interrupt_request requires taking the BQL; this is the same, except
worse because now we can even *write* cs->interrupt_request (clear bits)
without taking the lock.  I don't need to explain to you why this is bad.

         .------------------------------------------------.
         | .--------------------------------------------. |
         | | This is not how you are supposed to modify | |
         | |             multi-threaded code.           | |
         | '--------------------------------------------' |
         '------------------------------------------------'

If something can be accessed outside a lock, e.g. with atomics, that has
to be documented.  In addition, if it's not obvious whether a function
is called with a lock or without, you add comments that make it clear.
Take a lock at accel/tcg/translate-all.c or exec.c for examples.

This is the last pass through this series that I make.  I'll pick the
patches that I consider ready, for everything else you'll have to find a
reviewer that is willing to look through the series and vouch for it
with a "Reviewed-by".

Paolo

  reply	other threads:[~2018-01-31  1:24 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-23  8:53 [Qemu-devel] [RFC PATCH v5 00/24] replay additions Pavel Dovgalyuk
2018-01-23  8:53 ` [Qemu-devel] [RFC PATCH v5 01/24] cpu-exec: fix exception_index handling Pavel Dovgalyuk
2018-01-23  8:53 ` [Qemu-devel] [RFC PATCH v5 02/24] block: implement bdrv_snapshot_goto for blkreplay Pavel Dovgalyuk
2018-01-23  8:53 ` [Qemu-devel] [RFC PATCH v5 03/24] blkreplay: create temporary overlay for underlaying devices Pavel Dovgalyuk
2018-01-23  8:53 ` [Qemu-devel] [RFC PATCH v5 04/24] replay: disable default snapshot for record/replay Pavel Dovgalyuk
2018-01-23  8:53 ` [Qemu-devel] [RFC PATCH v5 05/24] replay: fix processing async events Pavel Dovgalyuk
2018-01-23  8:53 ` [Qemu-devel] [RFC PATCH v5 06/24] replay: fixed replay_enable_events Pavel Dovgalyuk
2018-01-23  8:53 ` [Qemu-devel] [RFC PATCH v5 07/24] replay: fix save/load vm for non-empty queue Pavel Dovgalyuk
2018-01-23  8:54 ` [Qemu-devel] [RFC PATCH v5 08/24] replay: added replay log format description Pavel Dovgalyuk
2018-01-23  8:54 ` [Qemu-devel] [RFC PATCH v5 09/24] replay: save prior value of the host clock Pavel Dovgalyuk
2018-01-23  8:54 ` [Qemu-devel] [RFC PATCH v5 10/24] target/arm/arm-powertctl: drop BQL assertions Pavel Dovgalyuk
2018-01-23  8:54 ` [Qemu-devel] [RFC PATCH v5 11/24] cpus: push BQL lock to qemu_*_wait_io_event Pavel Dovgalyuk
2018-01-23  8:54 ` [Qemu-devel] [RFC PATCH v5 12/24] hax: remove BQL lock/unlock Pavel Dovgalyuk
2018-01-23  8:54 ` [Qemu-devel] [RFC PATCH v5 13/24] kvm: " Pavel Dovgalyuk
2018-01-31  1:24   ` Paolo Bonzini [this message]
2018-01-23  8:54 ` [Qemu-devel] [RFC PATCH v5 14/24] replay/replay.c: bump REPLAY_VERSION again Pavel Dovgalyuk
2018-01-23  8:54 ` [Qemu-devel] [RFC PATCH v5 15/24] replay/replay-internal.c: track holding of replay_lock Pavel Dovgalyuk
2018-01-23  8:54 ` [Qemu-devel] [RFC PATCH v5 16/24] replay: make locking visible outside replay code Pavel Dovgalyuk
2018-01-23  8:54 ` [Qemu-devel] [RFC PATCH v5 17/24] replay: push replay_mutex_lock up the call tree Pavel Dovgalyuk
2018-01-23  8:55 ` [Qemu-devel] [RFC PATCH v5 18/24] replay: don't destroy mutex at exit Pavel Dovgalyuk
2018-01-23  8:55 ` [Qemu-devel] [RFC PATCH v5 19/24] replay: check return values of fwrite Pavel Dovgalyuk
2018-01-23  8:55 ` [Qemu-devel] [RFC PATCH v5 20/24] replay: avoid recursive call of checkpoints Pavel Dovgalyuk
2018-01-23  8:55 ` [Qemu-devel] [RFC PATCH v5 21/24] scripts/replay-dump.py: replay log dumper Pavel Dovgalyuk
2018-01-23  8:55 ` [Qemu-devel] [RFC PATCH v5 22/24] replay: don't process async events when warping the clock Pavel Dovgalyuk
2018-01-23  8:55 ` [Qemu-devel] [RFC PATCH v5 23/24] replay: save vmstate of the asynchronous events Pavel Dovgalyuk
2018-01-23  8:55 ` [Qemu-devel] [RFC PATCH v5 24/24] replay: don't drain/flush bdrv queue while RR is working Pavel Dovgalyuk
2018-01-23  9:32 ` [Qemu-devel] [RFC PATCH v5 00/24] replay additions no-reply
2018-01-30  5:57 ` Pavel Dovgalyuk

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=cdd33248-c2b8-dfe1-1e8b-108503f15e77@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=Pavel.Dovgaluk@ispras.ru \
    --cc=alex.bennee@linaro.org \
    --cc=boost.lists@gmail.com \
    --cc=dovgaluk@ispras.ru \
    --cc=jasowang@redhat.com \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=maria.klimushenkova@ispras.ru \
    --cc=mst@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).