diff mbox series

[1/2] softmmu/cpus: Check if the cpu work list is empty atomically

Message ID 20220114004358.299534-1-idan.horowitz@gmail.com (mailing list archive)
State New, archived
Headers show
Series [1/2] softmmu/cpus: Check if the cpu work list is empty atomically | expand

Commit Message

Idan Horowitz Jan. 14, 2022, 12:43 a.m. UTC
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>
---
 softmmu/cpus.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

Comments

Richard Henderson Jan. 26, 2022, 9:40 p.m. UTC | #1
On 1/14/22 11:43 AM, Idan Horowitz wrote:
> 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>
> ---
>   softmmu/cpus.c | 7 +------
>   1 file changed, 1 insertion(+), 6 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

Queued to tcg-next.


r~
diff mbox series

Patch

diff --git a/softmmu/cpus.c b/softmmu/cpus.c
index 23bca46b07..035395ae13 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)