[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
- Re: [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
Re: [Qemu-devel] [PATCH 16/16] cpus-common: lock-free fast path for cpu_exec_start/end, Emilio G. Cota, 2016/09/21