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: Paolo Bonzini
Subject: Re: [Qemu-devel] [PATCH 13/16] cpus-common: simplify locking for start_exclusive/end_exclusive
Date: Wed, 21 Sep 2016 18:20:54 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0


On 21/09/2016 18:15, Emilio G. Cota wrote:
> 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.
> 

Ok.

Paolo



reply via email to

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