From nobody Mon Feb 9 21:11:56 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1566285989; cv=none; d=zoho.com; s=zohoarc; b=ZY+LS6yElQ+7KaXnATimNaTb3wJlwX/7nbW6JaEI5qYGGliE1i0d2NREPYnx34fv0XWlyrp3HWILKau/vEgNPnKeBoYX0OABf67wY0458wPhsJeDuUBHh19fqKKhlEe9mmcqhJ+6r/OdTZSQMdlyOEftkaplJZPMuillXR6FTwM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1566285989; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=jKyrZbZb5Nlnl26RSTow8cqQ6RvtGbMtJV42O7sncGY=; b=IlloB3/fYGIsyKePFMD/omH9LYDLNPM7QFvc+nOiiF6+O4BmJcVZSTwpVi0UffhoSyBoJcH/Uj/6R82s6AKireXQdR+zPvtpCZlCjy5LkDmlj4YQU3OOLEJfk5+iEIGy8XjdmKHDFud0mgC++Bn9wYTqo6HG6Ob5+HWcVAEl6WE= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1566285989147676.7302614881592; Tue, 20 Aug 2019 00:26:29 -0700 (PDT) Received: from localhost ([::1]:34074 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hzyXD-00049t-Ss for importer@patchew.org; Tue, 20 Aug 2019 03:26:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42814) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1hzy8t-0005wZ-VX for qemu-devel@nongnu.org; Tue, 20 Aug 2019 03:01:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hzy8j-0003bx-Rl for qemu-devel@nongnu.org; Tue, 20 Aug 2019 03:01:17 -0400 Received: from mx1.redhat.com ([209.132.183.28]:45708) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hzy8j-0003XS-IO for qemu-devel@nongnu.org; Tue, 20 Aug 2019 03:01:09 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 1EB37190C026; Tue, 20 Aug 2019 07:01:05 +0000 (UTC) Received: from 640k.localdomain.com (ovpn-112-20.ams2.redhat.com [10.36.112.20]) by smtp.corp.redhat.com (Postfix) with ESMTP id 0EA8760BE2; Tue, 20 Aug 2019 07:01:03 +0000 (UTC) From: Paolo Bonzini To: qemu-devel@nongnu.org Date: Tue, 20 Aug 2019 08:59:46 +0200 Message-Id: <1566284395-30287-28-git-send-email-pbonzini@redhat.com> In-Reply-To: <1566284395-30287-1-git-send-email-pbonzini@redhat.com> References: <1566284395-30287-1-git-send-email-pbonzini@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.6.2 (mx1.redhat.com [10.5.110.70]); Tue, 20 Aug 2019 07:01:05 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PULL 27/36] icount: clean up cpu_can_io at the entry to the block X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Pavel Dovgalyuk Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Pavel Dovgalyuk Most of IO instructions can be executed only at the end of the block in icount mode. Therefore translator can set cpu_can_io flag when translating the last instruction. But when the blocks are chained, then this flag is not reset and may remain set at the beginning of the next block. This patch resets the flag at the entry of any translation block, making I/O operations impossible by default. Signed-off-by: Pavel Dovgalyuk -- v2 changes: - reset can_do_io at the start of every TB (suggested by Paolo Bonzini) Message-Id: <156404428943.18669.15747009371169578935.stgit@pasha-Precision-= 3630-Tower> Signed-off-by: Paolo Bonzini --- accel/tcg/cpu-exec.c | 1 - include/exec/gen-icount.h | 38 ++++++++++++++++++++------------------ 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index 6c85c3e..48272c7 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -169,7 +169,6 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cp= u, TranslationBlock *itb) } #endif /* DEBUG_DISAS */ =20 - cpu->can_do_io =3D !use_icount; ret =3D tcg_qemu_tb_exec(env, tb_ptr); cpu->can_do_io =3D 1; last_tb =3D (TranslationBlock *)(ret & ~TB_EXIT_MASK); diff --git a/include/exec/gen-icount.h b/include/exec/gen-icount.h index f7669b6..4004e6c 100644 --- a/include/exec/gen-icount.h +++ b/include/exec/gen-icount.h @@ -7,6 +7,24 @@ =20 static TCGOp *icount_start_insn; =20 +static inline void gen_io_start(void) +{ + TCGv_i32 tmp =3D tcg_const_i32(1); + tcg_gen_st_i32(tmp, cpu_env, + offsetof(ArchCPU, parent_obj.can_do_io) - + offsetof(ArchCPU, env)); + tcg_temp_free_i32(tmp); +} + +static inline void gen_io_end(void) +{ + TCGv_i32 tmp =3D tcg_const_i32(0); + tcg_gen_st_i32(tmp, cpu_env, + offsetof(ArchCPU, parent_obj.can_do_io) - + offsetof(ArchCPU, env)); + tcg_temp_free_i32(tmp); +} + static inline void gen_tb_start(TranslationBlock *tb) { TCGv_i32 count, imm; @@ -40,6 +58,8 @@ static inline void gen_tb_start(TranslationBlock *tb) tcg_gen_st16_i32(count, cpu_env, offsetof(ArchCPU, neg.icount_decr.u16.low) - offsetof(ArchCPU, env)); + /* Disable I/O by default */ + gen_io_end(); } =20 tcg_temp_free_i32(count); @@ -57,22 +77,4 @@ static inline void gen_tb_end(TranslationBlock *tb, int = num_insns) tcg_gen_exit_tb(tb, TB_EXIT_REQUESTED); } =20 -static inline void gen_io_start(void) -{ - TCGv_i32 tmp =3D tcg_const_i32(1); - tcg_gen_st_i32(tmp, cpu_env, - offsetof(ArchCPU, parent_obj.can_do_io) - - offsetof(ArchCPU, env)); - tcg_temp_free_i32(tmp); -} - -static inline void gen_io_end(void) -{ - TCGv_i32 tmp =3D tcg_const_i32(0); - tcg_gen_st_i32(tmp, cpu_env, - offsetof(ArchCPU, parent_obj.can_do_io) - - offsetof(ArchCPU, env)); - tcg_temp_free_i32(tmp); -} - #endif --=20 1.8.3.1