From nobody Mon Feb 9 11:51:22 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.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 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1500237095593853.7493366483405; Sun, 16 Jul 2017 13:31:35 -0700 (PDT) Received: from localhost ([::1]:46827 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dWqCU-0006xB-Cc for importer@patchew.org; Sun, 16 Jul 2017 16:31:34 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46258) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dWpmc-0001B1-Q2 for qemu-devel@nongnu.org; Sun, 16 Jul 2017 16:04:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dWpmX-0008O1-Qc for qemu-devel@nongnu.org; Sun, 16 Jul 2017 16:04:50 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:33937) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dWpmX-0008Na-MR for qemu-devel@nongnu.org; Sun, 16 Jul 2017 16:04:45 -0400 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id DF02E20A62; Sun, 16 Jul 2017 16:04:44 -0400 (EDT) Received: from frontend1 ([10.202.2.160]) by compute4.internal (MEProxy); Sun, 16 Jul 2017 16:04:44 -0400 Received: from localhost (flamenco.cs.columbia.edu [128.59.20.216]) by mail.messagingengine.com (Postfix) with ESMTPA id 9B3387E17E; Sun, 16 Jul 2017 16:04:44 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=braap.org; h=cc :date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc:x-sasl-enc; s=mesmtp; bh=MJb WQKvklNsfBJrB5oXkmZDXUk31Kw3e74+RxXLef9g=; b=WAKXZgexeXO6KulhAwi CwulxzXLoUhJTN69yPWnJzq6v2f0YxnXsOYR79NiFtD7Ff16d0Rn8jZr5MUjYF8N V716L1N+SR1U0vXJET8LgiEt5xHoBptf7HL/UrO/wWRL6mX+iweU0Ze0Wvh3aVAp yiR79UEDPPENh7hdYI49A/G4= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc :x-sasl-enc; s=fm1; bh=MJbWQKvklNsfBJrB5oXkmZDXUk31Kw3e74+RxXLef 9g=; b=WgIsPmZBw72+tY6DSOTNewUrYb0XZ8GLC73hBaJJoMWGj0qsQOiZGRJGe jSvZ5ASUxitr2FOVOrVOpyIVglSoBxQdwAJES2TgkBZwVPCjKxdERcUNn94OcaA9 NlFVW1Ma/DZx+EBc8ensWSb2n4ob6d4PvIlJHuHTMXRkHv0J7d7MefTrXYTsTjM4 TfX5M7mnOILp7HBiDglDl/qT5EXrtpeO7TiwH/pvjEyYzc5VxG9oGdrXYKaWAyon bWnTJWIajaONLBXypqedCqvBlGUQOPrIz7H9Q3FMZJqkcJmkeuiSWdDOduXNW0ae KzpKmwUSptYFDYsNllPCbAz877Hmw== X-ME-Sender: X-Sasl-enc: 5ixIhuMc9jIGGQmyOR9ffreyVp+lEFDHStWq0DdFx6xP 1500235484 From: "Emilio G. Cota" To: qemu-devel@nongnu.org Date: Sun, 16 Jul 2017 16:04:10 -0400 Message-Id: <1500235468-15341-28-git-send-email-cota@braap.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1500235468-15341-1-git-send-email-cota@braap.org> References: <1500235468-15341-1-git-send-email-cota@braap.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 66.111.4.25 Subject: [Qemu-devel] [PATCH v2 27/45] exec-all: extract tb->tc_* into a separate struct tc_tb X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Richard Henderson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" In preparation for adding tc.size to be able to keep track of TB's using the binary search tree implementation from glib. Signed-off-by: Emilio G. Cota Reviewed-by: Richard Henderson --- include/exec/exec-all.h | 20 ++++++++++++++------ accel/tcg/cpu-exec.c | 6 +++--- accel/tcg/translate-all.c | 20 ++++++++++---------- tcg/tcg-runtime.c | 4 ++-- tcg/tcg.c | 4 ++-- 5 files changed, 31 insertions(+), 23 deletions(-) diff --git a/include/exec/exec-all.h b/include/exec/exec-all.h index 13975af..7356c3e 100644 --- a/include/exec/exec-all.h +++ b/include/exec/exec-all.h @@ -315,6 +315,14 @@ static inline void tlb_flush_by_mmuidx_all_cpus_synced= (CPUState *cpu, #define USE_DIRECT_JUMP #endif =20 +/* + * Translation Cache-related fields of a TB. + */ +struct tb_tc { + void *ptr; /* pointer to the translated code */ + uint8_t *search; /* pointer to search data */ +}; + struct TranslationBlock { target_ulong pc; /* simulated PC corresponding to this block (EIP + = CS base) */ target_ulong cs_base; /* CS base for this block */ @@ -334,8 +342,8 @@ struct TranslationBlock { /* Per-vCPU dynamic tracing state used to generate this TB */ uint32_t trace_vcpu_dstate; =20 - void *tc_ptr; /* pointer to the translated code */ - uint8_t *tc_search; /* pointer to search data */ + struct tb_tc tc; + /* original tb when cflags has CF_NOCACHE */ struct TranslationBlock *orig_tb; /* first and second physical page containing code. The lower bit @@ -442,7 +450,7 @@ static inline void tb_set_jmp_target(TranslationBlock *= tb, int n, uintptr_t addr) { uint16_t offset =3D tb->jmp_insn_offset[n]; - tb_set_jmp_target1((uintptr_t)(tb->tc_ptr + offset), addr); + tb_set_jmp_target1((uintptr_t)(tb->tc.ptr + offset), addr); } =20 #else @@ -469,11 +477,11 @@ static inline void tb_add_jump(TranslationBlock *tb, = int n, qemu_log_mask_and_addr(CPU_LOG_EXEC, tb->pc, "Linking TBs %p [" TARGET_FMT_lx "] index %d -> %p [" TARGET_FMT_lx "]\n", - tb->tc_ptr, tb->pc, n, - tb_next->tc_ptr, tb_next->pc); + tb->tc.ptr, tb->pc, n, + tb_next->tc.ptr, tb_next->pc); =20 /* patch the native jump address */ - tb_set_jmp_target(tb, n, (uintptr_t)tb_next->tc_ptr); + tb_set_jmp_target(tb, n, (uintptr_t)tb_next->tc.ptr); =20 /* add in TB jmp circular list */ tb->jmp_list_next[n] =3D tb_next->jmp_list_first; diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index 23e6d2c..ba36f83 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -143,11 +143,11 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *= cpu, TranslationBlock *itb) uintptr_t ret; TranslationBlock *last_tb; int tb_exit; - uint8_t *tb_ptr =3D itb->tc_ptr; + uint8_t *tb_ptr =3D itb->tc.ptr; =20 qemu_log_mask_and_addr(CPU_LOG_EXEC, itb->pc, "Trace %p [%d: " TARGET_FMT_lx "] %s\n", - itb->tc_ptr, cpu->cpu_index, itb->pc, + itb->tc.ptr, cpu->cpu_index, itb->pc, lookup_symbol(itb->pc)); =20 #if defined(DEBUG_DISAS) @@ -179,7 +179,7 @@ static inline tcg_target_ulong cpu_tb_exec(CPUState *cp= u, TranslationBlock *itb) qemu_log_mask_and_addr(CPU_LOG_EXEC, last_tb->pc, "Stopped execution of TB chain before %p [" TARGET_FMT_lx "] %s\n", - last_tb->tc_ptr, last_tb->pc, + last_tb->tc.ptr, last_tb->pc, lookup_symbol(last_tb->pc)); if (cc->synchronize_from_tb) { cc->synchronize_from_tb(cpu, last_tb); diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c index df1ccbf..cfef6da 100644 --- a/accel/tcg/translate-all.c +++ b/accel/tcg/translate-all.c @@ -260,7 +260,7 @@ static target_long decode_sleb128(uint8_t **pp) which comes from the host pc of the end of the code implementing the in= sn. =20 Each line of the table is encoded as sleb128 deltas from the previous - line. The seed for the first line is { tb->pc, 0..., tb->tc_ptr }. + line. The seed for the first line is { tb->pc, 0..., tb->tc.ptr }. That is, the first column is seeded with the guest pc, the last column with the host pc, and the middle columns with zeros. */ =20 @@ -270,7 +270,7 @@ static int encode_search(TranslationBlock *tb, uint8_t = *block) uint8_t *p =3D block; int i, j, n; =20 - tb->tc_search =3D block; + tb->tc.search =3D block; =20 for (i =3D 0, n =3D tb->icount; i < n; ++i) { target_ulong prev; @@ -305,9 +305,9 @@ static int cpu_restore_state_from_tb(CPUState *cpu, Tra= nslationBlock *tb, uintptr_t searched_pc) { target_ulong data[TARGET_INSN_START_WORDS] =3D { tb->pc }; - uintptr_t host_pc =3D (uintptr_t)tb->tc_ptr; + uintptr_t host_pc =3D (uintptr_t)tb->tc.ptr; CPUArchState *env =3D cpu->env_ptr; - uint8_t *p =3D tb->tc_search; + uint8_t *p =3D tb->tc.search; int i, j, num_insns =3D tb->icount; #ifdef CONFIG_PROFILER int64_t ti =3D profile_getclock(); @@ -858,7 +858,7 @@ void tb_free(TranslationBlock *tb) tb =3D=3D tcg_ctx.tb_ctx.tbs[tcg_ctx.tb_ctx.nb_tbs - 1]) { size_t struct_size =3D ROUND_UP(sizeof(*tb), qemu_icache_linesize); =20 - tcg_ctx.code_gen_ptr =3D tb->tc_ptr - struct_size; + tcg_ctx.code_gen_ptr =3D tb->tc.ptr - struct_size; tcg_ctx.tb_ctx.nb_tbs--; } } @@ -1059,7 +1059,7 @@ static inline void tb_remove_from_jmp_list(Translatio= nBlock *tb, int n) another TB */ static inline void tb_reset_jump(TranslationBlock *tb, int n) { - uintptr_t addr =3D (uintptr_t)(tb->tc_ptr + tb->jmp_reset_offset[n]); + uintptr_t addr =3D (uintptr_t)(tb->tc.ptr + tb->jmp_reset_offset[n]); tb_set_jmp_target(tb, n, addr); } =20 @@ -1294,7 +1294,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, } =20 gen_code_buf =3D tcg_ctx.code_gen_ptr; - tb->tc_ptr =3D gen_code_buf; + tb->tc.ptr =3D gen_code_buf; tb->pc =3D pc; tb->cs_base =3D cs_base; tb->flags =3D flags; @@ -1314,7 +1314,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, gen_intermediate_code(env, tb); tcg_ctx.cpu =3D NULL; =20 - trace_translate_block(tb, tb->pc, tb->tc_ptr); + trace_translate_block(tb, tb->pc, tb->tc.ptr); =20 /* generate machine code */ tb->jmp_reset_offset[0] =3D TB_JMP_RESET_OFFSET_INVALID; @@ -1360,7 +1360,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, qemu_log_in_addr_range(tb->pc)) { qemu_log_lock(); qemu_log("OUT: [size=3D%d]\n", gen_code_size); - log_disas(tb->tc_ptr, gen_code_size); + log_disas(tb->tc.ptr, gen_code_size); qemu_log("\n"); qemu_log_flush(); qemu_log_unlock(); @@ -1696,7 +1696,7 @@ static TranslationBlock *tb_find_pc(uintptr_t tc_ptr) while (m_min <=3D m_max) { m =3D (m_min + m_max) >> 1; tb =3D tcg_ctx.tb_ctx.tbs[m]; - v =3D (uintptr_t)tb->tc_ptr; + v =3D (uintptr_t)tb->tc.ptr; if (v =3D=3D tc_ptr) { return tb; } else if (tc_ptr < v) { diff --git a/tcg/tcg-runtime.c b/tcg/tcg-runtime.c index bf6f248..08fe077 100644 --- a/tcg/tcg-runtime.c +++ b/tcg/tcg-runtime.c @@ -157,9 +157,9 @@ void *HELPER(lookup_tb_ptr)(CPUArchState *env) } qemu_log_mask_and_addr(CPU_LOG_EXEC, pc, "Chain %p [%d: " TARGET_FMT_lx "] %s\n", - tb->tc_ptr, cpu->cpu_index, pc, + tb->tc.ptr, cpu->cpu_index, pc, lookup_symbol(pc)); - return tb->tc_ptr; + return tb->tc.ptr; } =20 void HELPER(exit_atomic)(CPUArchState *env) diff --git a/tcg/tcg.c b/tcg/tcg.c index 3559829..28c1b94 100644 --- a/tcg/tcg.c +++ b/tcg/tcg.c @@ -2616,8 +2616,8 @@ int tcg_gen_code(TCGContext *s, TranslationBlock *tb) =20 tcg_reg_alloc_start(s); =20 - s->code_buf =3D tb->tc_ptr; - s->code_ptr =3D tb->tc_ptr; + s->code_buf =3D tb->tc.ptr; + s->code_ptr =3D tb->tc.ptr; =20 tcg_out_tb_init(s); =20 --=20 2.7.4