From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:49874) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZQHHi-0003w1-2j for qemu-devel@nongnu.org; Fri, 14 Aug 2015 11:52:46 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZQHHe-0003V8-N0 for qemu-devel@nongnu.org; Fri, 14 Aug 2015 11:52:46 -0400 Received: from mail-wi0-f176.google.com ([209.85.212.176]:38073) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZQHHe-0003V3-Hw for qemu-devel@nongnu.org; Fri, 14 Aug 2015 11:52:42 -0400 Received: by wicja10 with SMTP id ja10so25237512wic.1 for ; Fri, 14 Aug 2015 08:52:42 -0700 (PDT) From: Alvise Rigo Date: Fri, 14 Aug 2015 17:55:27 +0200 Message-Id: <1439567732-14118-2-git-send-email-a.rigo@virtualopensystems.com> In-Reply-To: <1439567732-14118-1-git-send-email-a.rigo@virtualopensystems.com> References: <1439567732-14118-1-git-send-email-a.rigo@virtualopensystems.com> Subject: [Qemu-devel] [mttcg RFC v4 1/6] cpus: async_run_on_cpu: kick only if needed List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org, mttcg@listserver.greensocs.com Cc: claudio.fontana@huawei.com, pbonzini@redhat.com, jani.kokkonen@huawei.com, tech@virtualopensystems.com, alex.bennee@linaro.org, aurelien@aurel32.net In some unique situations a vCPU can be kicked even if it's not ready to execute TCG code i.e. when current_tb has never been set before. This can happen with the atomic stress test (not kvm-unit-test based), where a vCPU can query some work to a not yet started vCPU. Signed-off-by: Alvise Rigo --- cpus.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cpus.c b/cpus.c index f61530c..3d90142 100644 --- a/cpus.c +++ b/cpus.c @@ -935,7 +935,9 @@ void async_run_on_cpu(CPUState *cpu, void (*func)(void *data), void *data) wi->done = false; qemu_mutex_unlock(&cpu->work_mutex); - qemu_cpu_kick(cpu); + if (tcg_enabled() && (atomic_read(&cpu->tcg_exec_flag) == 1)) { + qemu_cpu_kick(cpu); + } } void async_run_safe_work_on_cpu(CPUState *cpu, void (*func)(void *data), -- 2.5.0