qemu-devel
[Top][All Lists]
Advanced

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]