aboutsummaryrefslogtreecommitdiff
path: root/softmmu/cpus.c
diff options
context:
space:
mode:
authorIdan Horowitz <idan.horowitz@gmail.com>2022-01-14 02:43:57 +0200
committerRichard Henderson <richard.henderson@linaro.org>2022-02-09 08:55:02 +1100
commit25e82fb769eddb83e0b68487b8b08d9426704d54 (patch)
treebf541bd2cd78e26e5350a2473d89a152e1b8b7d7 /softmmu/cpus.c
parentcfc2a2d69d59f02b32df3098ce17e10ab86d43c6 (diff)
downloadqemu-25e82fb769eddb83e0b68487b8b08d9426704d54.zip
qemu-25e82fb769eddb83e0b68487b8b08d9426704d54.tar.gz
qemu-25e82fb769eddb83e0b68487b8b08d9426704d54.tar.bz2
softmmu/cpus: Check if the cpu work list is empty atomically
Instead of taking the lock of the cpu work list in order to check if it's empty, we can just read the head pointer atomically. This decreases cpu_work_list_empty's share from 5% to 1.3% in a profile of icount-enabled aarch64-softmmu. Signed-off-by: Idan Horowitz <idan.horowitz@gmail.com> Message-Id: <20220114004358.299534-1-idan.horowitz@gmail.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'softmmu/cpus.c')
-rw-r--r--softmmu/cpus.c7
1 files changed, 1 insertions, 6 deletions
diff --git a/softmmu/cpus.c b/softmmu/cpus.c
index 23bca46..035395a 100644
--- a/softmmu/cpus.c
+++ b/softmmu/cpus.c
@@ -73,12 +73,7 @@ bool cpu_is_stopped(CPUState *cpu)
bool cpu_work_list_empty(CPUState *cpu)
{
- bool ret;
-
- qemu_mutex_lock(&cpu->work_mutex);
- ret = QSIMPLEQ_EMPTY(&cpu->work_list);
- qemu_mutex_unlock(&cpu->work_mutex);
- return ret;
+ return QSIMPLEQ_EMPTY_ATOMIC(&cpu->work_list);
}
bool cpu_thread_is_idle(CPUState *cpu)