[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v6 00/12] cpu-exec: Safe work in quiescent state
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH v6 00/12] cpu-exec: Safe work in quiescent state |
Date: |
Thu, 1 Sep 2016 12:20:15 +0200 |
This is not the code I promised at the beginning of the week.
It's better, and not only in that this one works. :) Instead of
reinventing the wheel and using the new wheel for linux-user's
start_exclusive/end_exclusive, the linux-user/ code is moved to
cpus-common.c and reused as the synchronization mechanism behind
async_safe_run_on_cpu.
The code works and actually satisfies our needs very well. The only
disadvantage is that safe work items will run with a mutex taken; the
mutex fits decently in QEMU's hierarchy however, sitting between the
BQL and the tb_lock.
For performance, the last patch changes it to avoid condition variables
in the fast path. (There are still two memory barriers; if desired they
could be merged with the ones in rcu_read_lock/rcu_read_unlock). I am
including a formal model of the algorithm; together with new documentation
in include/qom/cpu.h, it accounts for most of the added lines of code.
Still, it is completely optional.
Paolo
Alex Bennée (1):
cpus: pass CPUState to run_on_cpu helpers
Paolo Bonzini (5):
cpus-common: move CPU list management to common code
cpus-common: move exclusive work infrastructure from linux-user
cpus-common: always defer async_run_on_cpu work items
cpus-common: Introduce async_safe_run_on_cpu()
cpus-common: lock-free fast path for cpu_exec_start/end
Sergey Fedorov (6):
cpus: Move common code out of {async_, }run_on_cpu()
cpus: Rename flush_queued_work()
linux-user: Use QemuMutex and QemuCond
linux-user: Add qemu_cpu_is_self() and qemu_cpu_kick()
cpus-common: move CPU work item management to common code
tcg: Make tb_flush() thread safe
Makefile.target | 2 +-
bsd-user/main.c | 30 +----
cpu-exec.c | 12 +-
cpus-common.c | 314 +++++++++++++++++++++++++++++++++++++++++++++
cpus.c | 99 +-------------
docs/tcg-exclusive.promela | 224 ++++++++++++++++++++++++++++++++
exec.c | 30 +----
hw/i386/kvm/apic.c | 3 +-
hw/i386/kvmvapic.c | 6 +-
hw/ppc/ppce500_spin.c | 31 ++---
hw/ppc/spapr.c | 6 +-
hw/ppc/spapr_hcall.c | 17 +--
include/exec/cpu-all.h | 4 +
include/exec/cpu-common.h | 2 +
include/exec/exec-all.h | 11 --
include/exec/tb-context.h | 2 +-
include/qom/cpu.h | 95 +++++++++++++-
kvm-all.c | 21 +--
linux-user/main.c | 130 ++++++-------------
target-i386/helper.c | 19 ++-
target-i386/kvm.c | 6 +-
target-s390x/cpu.c | 4 +-
target-s390x/cpu.h | 7 +-
target-s390x/kvm.c | 98 +++++++-------
target-s390x/misc_helper.c | 4 +-
translate-all.c | 38 ++++--
vl.c | 1 +
27 files changed, 814 insertions(+), 402 deletions(-)
create mode 100644 cpus-common.c
create mode 100644 docs/tcg-exclusive.promela
--
2.7.4
- [Qemu-devel] [PATCH v6 00/12] cpu-exec: Safe work in quiescent state,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 05/12] linux-user: Add qemu_cpu_is_self() and qemu_cpu_kick(), Paolo Bonzini, 2016/09/01
- [Qemu-devel] [PATCH 04/12] linux-user: Use QemuMutex and QemuCond, Paolo Bonzini, 2016/09/01
- [Qemu-devel] [PATCH 02/12] cpus: Move common code out of {async_, }run_on_cpu(), Paolo Bonzini, 2016/09/01
- [Qemu-devel] [PATCH 01/12] cpus: pass CPUState to run_on_cpu helpers, Paolo Bonzini, 2016/09/01
- [Qemu-devel] [PATCH 08/12] cpus-common: move exclusive work infrastructure from, Paolo Bonzini, 2016/09/01
- [Qemu-devel] [PATCH 03/12] cpus: Rename flush_queued_work(), Paolo Bonzini, 2016/09/01
- [Qemu-devel] [PATCH 07/12] cpus-common: move CPU work item management to common, Paolo Bonzini, 2016/09/01
- [Qemu-devel] [PATCH 06/12] cpus-common: move CPU list management to common code, Paolo Bonzini, 2016/09/01