diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2016-09-02 23:33:38 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2016-09-27 11:57:30 +0200 |
commit | 758e1b2b622d7c177dc2d95e887a11aa069b7e68 (patch) | |
tree | 4b8fc6e2fa1fac81eeb8d038ee1f213dbab71a3a /docs | |
parent | cf07da65f335b9a74e62f5413078f67280572f36 (diff) | |
download | qemu-758e1b2b622d7c177dc2d95e887a11aa069b7e68.tar.gz qemu-758e1b2b622d7c177dc2d95e887a11aa069b7e68.tar.bz2 qemu-758e1b2b622d7c177dc2d95e887a11aa069b7e68.zip |
cpus-common: simplify locking for start_exclusive/end_exclusive
It is not necessary to hold qemu_cpu_list_mutex throughout the
exclusive section, because no other exclusive section can run
while pending_cpus != 0.
exclusive_idle() is called in cpu_exec_start(), and that prevents
any CPUs created after start_exclusive() from entering cpu_exec()
during an exclusive section.
Reviewed-by: Richard Henderson <rth@twiddle.net>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'docs')
-rw-r--r-- | docs/tcg-exclusive.promela | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/docs/tcg-exclusive.promela b/docs/tcg-exclusive.promela index 8bb0967df6..feac679b9a 100644 --- a/docs/tcg-exclusive.promela +++ b/docs/tcg-exclusive.promela @@ -98,9 +98,11 @@ byte has_waiter[N_CPUS]; do \ :: pending_cpus > 1 -> COND_WAIT(exclusive_cond, mutex); \ :: else -> break; \ - od + od; \ + MUTEX_UNLOCK(mutex); #define end_exclusive() \ + MUTEX_LOCK(mutex); \ pending_cpus = 0; \ COND_BROADCAST(exclusive_resume); \ MUTEX_UNLOCK(mutex); |