[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v6 71/73] cpus-common: release BQL earlier in run_on
From: |
Emilio G. Cota |
Subject: |
[Qemu-devel] [PATCH v6 71/73] cpus-common: release BQL earlier in run_on_cpu |
Date: |
Tue, 29 Jan 2019 19:48:09 -0500 |
After completing the conversion to per-CPU locks, there is no need
to release the BQL after having called cpu_kick.
Reviewed-by: Richard Henderson <address@hidden>
Signed-off-by: Emilio G. Cota <address@hidden>
---
cpus-common.c | 20 +++++---------------
1 file changed, 5 insertions(+), 15 deletions(-)
diff --git a/cpus-common.c b/cpus-common.c
index 62e282bff1..1241024b2c 100644
--- a/cpus-common.c
+++ b/cpus-common.c
@@ -145,6 +145,11 @@ void run_on_cpu(CPUState *cpu, run_on_cpu_func func,
run_on_cpu_data data)
return;
}
+ /* We are going to sleep on the CPU lock, so release the BQL */
+ if (has_bql) {
+ qemu_mutex_unlock_iothread();
+ }
+
wi.func = func;
wi.data = data;
wi.done = false;
@@ -153,21 +158,6 @@ void run_on_cpu(CPUState *cpu, run_on_cpu_func func,
run_on_cpu_data data)
cpu_mutex_lock(cpu);
queue_work_on_cpu_locked(cpu, &wi);
-
- /*
- * We are going to sleep on the CPU lock, so release the BQL.
- *
- * During the transition to per-CPU locks, we release the BQL _after_
- * having kicked the destination CPU (from queue_work_on_cpu_locked above).
- * This makes sure that the enqueued work will be seen by the CPU
- * after being woken up from the kick, since the CPU sleeps on the BQL.
- * Once we complete the transition to per-CPU locks, we will release
- * the BQL earlier in this function.
- */
- if (has_bql) {
- qemu_mutex_unlock_iothread();
- }
-
while (!atomic_mb_read(&wi.done)) {
CPUState *self_cpu = current_cpu;
--
2.17.1
- [Qemu-devel] [PATCH v6 33/73] ppc: use cpu_reset_interrupt, (continued)
- [Qemu-devel] [PATCH v6 33/73] ppc: use cpu_reset_interrupt, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 66/73] riscv: convert to cpu_has_work_with_iothread_lock, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 64/73] mips: convert to cpu_has_work_with_iothread_lock, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 62/73] cpu: introduce cpu_has_work_with_iothread_lock, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 70/73] cpu: protect CPU state with cpu->lock instead of the BQL, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 44/73] ppc: convert to cpu_interrupt_request, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 58/73] microblaze: convert to cpu_interrupt_request, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 72/73] cpu: add async_run_on_cpu_no_bql, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 68/73] xtensa: convert to cpu_has_work_with_iothread_lock, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 57/73] unicore32: convert to cpu_interrupt_request, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 71/73] cpus-common: release BQL earlier in run_on_cpu,
Emilio G. Cota <=
- [Qemu-devel] [PATCH v6 73/73] cputlb: queue async flush jobs without the BQL, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 67/73] sparc: convert to cpu_has_work_with_iothread_lock, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 69/73] cpu: rename all_cpu_threads_idle to qemu_tcg_rr_all_cpu_threads_idle, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 63/73] ppc: convert to cpu_has_work_with_iothread_lock, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 38/73] arm: convert to cpu_interrupt_request, Emilio G. Cota, 2019/01/29
- [Qemu-devel] [PATCH v6 65/73] s390x: convert to cpu_has_work_with_iothread_lock, Emilio G. Cota, 2019/01/29