[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [RFC v4 06/71] cpu: introduce process_queued_cpu_work_l
From: |
Alex Bennée |
Subject: |
Re: [Qemu-devel] [RFC v4 06/71] cpu: introduce process_queued_cpu_work_locked |
Date: |
Mon, 29 Oct 2018 16:35:32 +0000 |
User-agent: |
mu4e 1.1.0; emacs 26.1.50 |
Emilio G. Cota <address@hidden> writes:
> This completes the conversion to cpu_mutex_lock/unlock in the file.
>
> Reviewed-by: Richard Henderson <address@hidden>
> Signed-off-by: Emilio G. Cota <address@hidden>
Reviewed-by: Alex Bennée <address@hidden>
> ---
> cpus-common.c | 17 +++++++++++------
> 1 file changed, 11 insertions(+), 6 deletions(-)
>
> diff --git a/cpus-common.c b/cpus-common.c
> index 3fccee5585..c2ad554d54 100644
> --- a/cpus-common.c
> +++ b/cpus-common.c
> @@ -337,20 +337,19 @@ void async_safe_run_on_cpu(CPUState *cpu,
> run_on_cpu_func func,
> queue_work_on_cpu(cpu, wi);
> }
>
> -void process_queued_cpu_work(CPUState *cpu)
> +/* Called with the CPU's lock held */
> +static void process_queued_cpu_work_locked(CPUState *cpu)
> {
> struct qemu_work_item *wi;
> bool has_bql = qemu_mutex_iothread_locked();
>
> - qemu_mutex_lock(&cpu->lock);
> if (QSIMPLEQ_EMPTY(&cpu->work_list)) {
> - qemu_mutex_unlock(&cpu->lock);
> return;
> }
> while (!QSIMPLEQ_EMPTY(&cpu->work_list)) {
> wi = QSIMPLEQ_FIRST(&cpu->work_list);
> QSIMPLEQ_REMOVE_HEAD(&cpu->work_list, node);
> - qemu_mutex_unlock(&cpu->lock);
> + cpu_mutex_unlock(cpu);
> if (wi->exclusive) {
> /* Running work items outside the BQL avoids the following
> deadlock:
> * 1) start_exclusive() is called with the BQL taken while
> another
> @@ -376,13 +375,19 @@ void process_queued_cpu_work(CPUState *cpu)
> qemu_mutex_unlock_iothread();
> }
> }
> - qemu_mutex_lock(&cpu->lock);
> + cpu_mutex_lock(cpu);
> if (wi->free) {
> g_free(wi);
> } else {
> atomic_mb_set(&wi->done, true);
> }
> }
> - qemu_mutex_unlock(&cpu->lock);
> qemu_cond_broadcast(&cpu->cond);
> }
> +
> +void process_queued_cpu_work(CPUState *cpu)
> +{
> + cpu_mutex_lock(cpu);
> + process_queued_cpu_work_locked(cpu);
> + cpu_mutex_unlock(cpu);
> +}
--
Alex Bennée
- [Qemu-devel] [RFC v4 05/71] cpu: move run_on_cpu to cpus-common, (continued)
[Qemu-devel] [RFC v4 02/71] cpu: rename cpu->work_mutex to cpu->lock, Emilio G. Cota, 2018/10/25
[Qemu-devel] [RFC v4 39/71] i386/hax-all: convert to cpu_interrupt_request, Emilio G. Cota, 2018/10/25
[Qemu-devel] [RFC v4 06/71] cpu: introduce process_queued_cpu_work_locked, Emilio G. Cota, 2018/10/25
- Re: [Qemu-devel] [RFC v4 06/71] cpu: introduce process_queued_cpu_work_locked,
Alex Bennée <=
[Qemu-devel] [RFC v4 03/71] cpu: introduce cpu_mutex_lock/unlock, Emilio G. Cota, 2018/10/25
[Qemu-devel] [RFC v4 10/71] hppa: convert to helper_cpu_halted_set, Emilio G. Cota, 2018/10/25
[Qemu-devel] [RFC v4 14/71] cpu: define cpu_halted helpers, Emilio G. Cota, 2018/10/25
[Qemu-devel] [RFC v4 12/71] alpha: convert to helper_cpu_halted_set, Emilio G. Cota, 2018/10/25