diff options
author | Peter Maydell | 2020-06-16 15:57:15 +0200 |
---|---|---|
committer | Peter Maydell | 2020-06-16 15:57:15 +0200 |
commit | 5c24bce3056ff209a1ecc50ff4b7e65b85ad8e74 (patch) | |
tree | 892258958df952056f405ba49cb303c6915476bc /cpus-common.c | |
parent | Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20200616'... (diff) | |
parent | plugins: new lockstep plugin for debugging TCG changes (diff) | |
download | qemu-5c24bce3056ff209a1ecc50ff4b7e65b85ad8e74.tar.gz qemu-5c24bce3056ff209a1ecc50ff4b7e65b85ad8e74.tar.xz qemu-5c24bce3056ff209a1ecc50ff4b7e65b85ad8e74.zip |
Merge remote-tracking branch 'remotes/stsquad/tags/pull-testing-and-plugin-160620-2' into staging
Testing and plugin updates
- clear up dtc warnings
- add support for --enable-tsan builds
- re-enable shippable cross builds
- serialise cirrus check steps
- fix check-tcg plugin issues
- add lockstep plugin
# gpg: Signature made Tue 16 Jun 2020 14:50:09 BST
# gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44
# gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [full]
# Primary key fingerprint: 6685 AE99 E751 67BC AFC8 DF35 FBD0 DB09 5A9E 2A44
* remotes/stsquad/tags/pull-testing-and-plugin-160620-2: (21 commits)
plugins: new lockstep plugin for debugging TCG changes
tests/tcg: ensure -cpu max also used for plugin run
tests/tcg: build plugin list from contents of src directory
cirrus.yml: serialise make check
Revert ".shippable: temporaily disable some cross builds"
tests: Disable select tests under TSan, which hit TSan issue.
docs: Added details on TSan to testing.rst
util: Added tsan annotate for thread name.
include/qemu: Added tsan.h for annotations.
tests/docker: Added docker build support for TSan.
thread: add tsan annotations to QemuSpin
translate-all: call qemu_spin_destroy for PageDesc
tcg: call qemu_spin_destroy for tb->jmp_lock
qht: call qemu_spin_destroy for head buckets
cputlb: destroy CPUTLB with tlb_destroy
thread: add qemu_spin_destroy
cpu: convert queued work to a QSIMPLEQ
configure: add --enable-tsan flag + fiber annotations for coroutine-ucontext
Makefile: remove old compatibility gunks
Makefile: dtc: update, build the libfdt target
...
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'cpus-common.c')
-rw-r--r-- | cpus-common.c | 25 |
1 files changed, 8 insertions, 17 deletions
diff --git a/cpus-common.c b/cpus-common.c index 70a9d12981..8f5512b3d7 100644 --- a/cpus-common.c +++ b/cpus-common.c @@ -97,7 +97,7 @@ void cpu_list_remove(CPUState *cpu) } struct qemu_work_item { - struct qemu_work_item *next; + QSIMPLEQ_ENTRY(qemu_work_item) node; run_on_cpu_func func; run_on_cpu_data data; bool free, exclusive, done; @@ -106,13 +106,7 @@ struct qemu_work_item { static void queue_work_on_cpu(CPUState *cpu, struct qemu_work_item *wi) { qemu_mutex_lock(&cpu->work_mutex); - if (cpu->queued_work_first == NULL) { - cpu->queued_work_first = wi; - } else { - cpu->queued_work_last->next = wi; - } - cpu->queued_work_last = wi; - wi->next = NULL; + QSIMPLEQ_INSERT_TAIL(&cpu->work_list, wi, node); wi->done = false; qemu_mutex_unlock(&cpu->work_mutex); @@ -306,17 +300,14 @@ void process_queued_cpu_work(CPUState *cpu) { struct qemu_work_item *wi; - if (cpu->queued_work_first == NULL) { + qemu_mutex_lock(&cpu->work_mutex); + if (QSIMPLEQ_EMPTY(&cpu->work_list)) { + qemu_mutex_unlock(&cpu->work_mutex); return; } - - qemu_mutex_lock(&cpu->work_mutex); - while (cpu->queued_work_first != NULL) { - wi = cpu->queued_work_first; - cpu->queued_work_first = wi->next; - if (!cpu->queued_work_first) { - cpu->queued_work_last = NULL; - } + while (!QSIMPLEQ_EMPTY(&cpu->work_list)) { + wi = QSIMPLEQ_FIRST(&cpu->work_list); + QSIMPLEQ_REMOVE_HEAD(&cpu->work_list, node); qemu_mutex_unlock(&cpu->work_mutex); if (wi->exclusive) { /* Running work items outside the BQL avoids the following deadlock: |