[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 13/16] cpus-common: simplify locking for start_e
From: |
Emilio G. Cota |
Subject: |
Re: [Qemu-devel] [PATCH 13/16] cpus-common: simplify locking for start_exclusive/end_exclusive |
Date: |
Wed, 21 Sep 2016 12:15:22 -0400 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
On Mon, Sep 19, 2016 at 14:50:56 +0200, Paolo Bonzini wrote:
> 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.
>
> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
> cpus-common.c | 6 ++++++
> docs/tcg-exclusive.promela | 4 +++-
> include/qom/cpu.h | 4 ----
> 3 files changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/cpus-common.c b/cpus-common.c
> index 9225c65..6adc982 100644
> --- a/cpus-common.c
> +++ b/cpus-common.c
> @@ -191,11 +191,17 @@ void start_exclusive(void)
> if (pending_cpus > 1) {
> qemu_cond_wait(&exclusive_cond, &qemu_cpu_list_mutex);
> }
> +
> + /* Can release mutex, no one will enter another exclusive
> + * section until end_exclusive resets pending_cpus to 0.
> + */
> + qemu_mutex_unlock(&qemu_cpu_list_mutex);
> }
>
> /* Finish an exclusive operation. Releases qemu_cpu_list_mutex. */
> void end_exclusive(void)
> {
> + qemu_mutex_lock(&qemu_cpu_list_mutex);
> pending_cpus = 0;
> qemu_cond_broadcast(&exclusive_resume);
> qemu_mutex_unlock(&qemu_cpu_list_mutex);
The comments at the top of both start_exclusive and end_exclusive
should be updated.
E.
- [Qemu-devel] [PATCH 07/16] cpus-common: move CPU work item management to common code, (continued)
- [Qemu-devel] [PATCH 06/16] cpus-common: move CPU list management to common code, Paolo Bonzini, 2016/09/19
- [Qemu-devel] [PATCH 08/16] cpus-common: fix uninitialized variable use in run_on_cpu, Paolo Bonzini, 2016/09/19
- [Qemu-devel] [PATCH 09/16] cpus-common: move exclusive work infrastructure from linux-user, Paolo Bonzini, 2016/09/19
- [Qemu-devel] [PATCH 10/16] docs: include formal model for TCG exclusive sections, Paolo Bonzini, 2016/09/19
- [Qemu-devel] [PATCH 11/16] cpus-common: always defer async_run_on_cpu work items, Paolo Bonzini, 2016/09/19
- [Qemu-devel] [PATCH 12/16] cpus-common: remove redundant call to exclusive_idle(), Paolo Bonzini, 2016/09/19
- [Qemu-devel] [PATCH 13/16] cpus-common: simplify locking for start_exclusive/end_exclusive, Paolo Bonzini, 2016/09/19
[Qemu-devel] [PATCH 15/16] tcg: Make tb_flush() thread safe, Paolo Bonzini, 2016/09/19
[Qemu-devel] [PATCH 16/16] cpus-common: lock-free fast path for cpu_exec_start/end, Paolo Bonzini, 2016/09/19