From nobody Wed Nov 27 06:49:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1699990074; cv=none; d=zohomail.com; s=zohoarc; b=LogyJRaqbwyOLMZhjrGJ5GsIJOa54S+VGX/lK6KNg2DMz3NtM/D6C0f6/0FOD8gTRgK55OZ9phiXnSl4Slfpc97UnfXyDFBUZ3xq+TrBR8Hs50j42D831zJSVYQAJ4eLGiWhb6OSRDVvN41Iv3H6MRYjaRfnEgoEBIdLrbVHGkE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699990074; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=U5juuJ7X5jTEcQbetRFuXGDhp1OBOcXOBoH2eS6RKpA=; b=Hsf9KK8NkRE+tp/HMhxvgqtd3JFKe9eCytPESh1YFlIh18cCwc81Aywag3ZJy3s15Ps/0CRFt6gHsDmewJzBBqKcG1mAd9MLzZwiZCCS68ccRxuYEY5Unia2EVaDLLlqhz8R6lLmyYPOyhTijf5ay3XIt6OuOTBTccn/IYxrxLk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1699990074380532.1920448413405; Tue, 14 Nov 2023 11:27:54 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r2z3w-0003tc-3a; Tue, 14 Nov 2023 14:27:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r2z3u-0003sd-HP for qemu-devel@nongnu.org; Tue, 14 Nov 2023 14:27:02 -0500 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1r2z3s-00070P-Ar for qemu-devel@nongnu.org; Tue, 14 Nov 2023 14:27:02 -0500 Received: by mail-pl1-x629.google.com with SMTP id d9443c01a7336-1cc37fb1310so45926445ad.1 for ; Tue, 14 Nov 2023 11:26:59 -0800 (PST) Received: from stoup.. ([71.212.149.95]) by smtp.gmail.com with ESMTPSA id j18-20020a170902c3d200b001c728609574sm6052643plj.6.2023.11.14.11.26.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Nov 2023 11:26:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1699990019; x=1700594819; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=U5juuJ7X5jTEcQbetRFuXGDhp1OBOcXOBoH2eS6RKpA=; b=bJPyVhU1UVRPhn7xoJ/rgmANYsRkVwa1eUYF3by/JmcgLSNIbezEcoVqvaHv9Oj05F HNR6G/fS/HCMIUZAy9kCxptPQw0pyg+TLUwG3lQH/X9LPAxagN4zz41gktf94s5Q96aR vpPrl4o7uhBcuIZ6cAHmBGNlRAPT2m3yF5QAKuE7PjRHeeVhyd0VK/O86js/8f88kO6O z3+JAgbMSsSPJAOVGaV5zXRqyc9hXjVhJUree5suq3i0BdMJBa8XxYCcWj0jX+prMgvt 8cE4ho+5e17RCjYQKFIb5Bnfumjq0PxepjJQFGrGgyNfFVxdgxXbG2ptbYUdRRqFPviL q5qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699990019; x=1700594819; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=U5juuJ7X5jTEcQbetRFuXGDhp1OBOcXOBoH2eS6RKpA=; b=F9fgM9AYat/CtP5C4EwQbBeEq2OTllcODh6mNPsCfk4IV3oyRdK5MyHGiIv2ocAVs4 fBNQku1x0gXz/5PUrfWfGbMtcAZ4cbSWYICWiiVbEzSQEnZf6vt+gUsc4V9F0fXUVURS dTNyKdMz1BQtFcUg7vUPJ8hhSThXfKy3cd6FGfw7b8cF5qrrbewAN6DepRAp7/3XYqNJ toriJmkKC4sqqYENh4WE/zRaAqCoonpgswX3VpQcyHEoC83CxUvDynUlgz66/xmKhP3b 3fxjLGJSQLxEPnELR8C70EbVhnebiIrihCHBBob1qlNaXByPLFNjN8jC0n0IVp9DvM46 p6Jw== X-Gm-Message-State: AOJu0YyAz4zdGnoCGnr0FhDyVnhRz7umHsaiimqqUUBr4I76GPLlPEU6 4Aly34mZuw+e8OJZrPW97POMsnGU2vYXMZTxhKA= X-Google-Smtp-Source: AGHT+IGNbAj7ldAthFQsJtvSWSNlOH0pO20yUF0gHiZYXQfL7y41X2N3YA838Jwg/TjkMb3tdMit2w== X-Received: by 2002:a17:902:b608:b0:1cc:4985:fbf8 with SMTP id b8-20020a170902b60800b001cc4985fbf8mr2814683pls.59.1699990018821; Tue, 14 Nov 2023 11:26:58 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Cc: =?UTF-8?q?Cl=C3=A9ment=20Chigot?= , Claudio Fontana Subject: [PULL 1/3] accel/tcg: Remove CF_LAST_IO Date: Tue, 14 Nov 2023 11:26:54 -0800 Message-Id: <20231114192656.176451-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231114192656.176451-1-richard.henderson@linaro.org> References: <20231114192656.176451-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1699990075240100001 In cpu_exec_step_atomic, we did not set CF_LAST_IO, which lead to a loop with cpu_io_recompile. But since 18a536f1f8 ("Always require can_do_io") we no longer need a flag to indicate when the last insn should have can_do_io set, so remove the flag entirely. Reported-by: Cl=C3=A9ment Chigot Tested-by: Cl=C3=A9ment Chigot Reviewed-by: Claudio Fontana Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1961 Signed-off-by: Richard Henderson --- docs/devel/tcg-icount.rst | 6 ------ include/exec/translation-block.h | 13 ++++++------- accel/tcg/cpu-exec.c | 2 +- accel/tcg/tb-maint.c | 6 ++---- accel/tcg/translate-all.c | 4 ++-- accel/tcg/translator.c | 22 +++++++++------------- system/watchpoint.c | 6 ++---- 7 files changed, 22 insertions(+), 37 deletions(-) diff --git a/docs/devel/tcg-icount.rst b/docs/devel/tcg-icount.rst index 50c8e8dabc..7df883446a 100644 --- a/docs/devel/tcg-icount.rst +++ b/docs/devel/tcg-icount.rst @@ -62,12 +62,6 @@ To deal with this case, when an I/O access is made we: - re-compile a single [1]_ instruction block for the current PC - exit the cpu loop and execute the re-compiled block =20 -The new block is created with the CF_LAST_IO compile flag which -ensures the final instruction translation starts with a call to -gen_io_start() so we don't enter a perpetual loop constantly -recompiling a single instruction block. For translators using the -common translator_loop this is done automatically. - =20 .. [1] sometimes two instructions if dealing with delay slots =20 =20 Other I/O operations diff --git a/include/exec/translation-block.h b/include/exec/translation-bl= ock.h index b785751774..e2b26e16da 100644 --- a/include/exec/translation-block.h +++ b/include/exec/translation-block.h @@ -71,13 +71,12 @@ struct TranslationBlock { #define CF_NO_GOTO_TB 0x00000200 /* Do not chain with goto_tb */ #define CF_NO_GOTO_PTR 0x00000400 /* Do not chain with goto_ptr */ #define CF_SINGLE_STEP 0x00000800 /* gdbstub single-step in effect */ -#define CF_LAST_IO 0x00008000 /* Last insn may be an IO access. */ -#define CF_MEMI_ONLY 0x00010000 /* Only instrument memory ops */ -#define CF_USE_ICOUNT 0x00020000 -#define CF_INVALID 0x00040000 /* TB is stale. Set with @jmp_lock hel= d */ -#define CF_PARALLEL 0x00080000 /* Generate code for a parallel contex= t */ -#define CF_NOIRQ 0x00100000 /* Generate an uninterruptible TB */ -#define CF_PCREL 0x00200000 /* Opcodes in TB are PC-relative */ +#define CF_MEMI_ONLY 0x00001000 /* Only instrument memory ops */ +#define CF_USE_ICOUNT 0x00002000 +#define CF_INVALID 0x00004000 /* TB is stale. Set with @jmp_lock hel= d */ +#define CF_PARALLEL 0x00008000 /* Generate code for a parallel contex= t */ +#define CF_NOIRQ 0x00010000 /* Generate an uninterruptible TB */ +#define CF_PCREL 0x00020000 /* Opcodes in TB are PC-relative */ #define CF_CLUSTER_MASK 0xff000000 /* Top 8 bits are cluster ID */ #define CF_CLUSTER_SHIFT 24 =20 diff --git a/accel/tcg/cpu-exec.c b/accel/tcg/cpu-exec.c index 1a5bc90220..c938eb96f8 100644 --- a/accel/tcg/cpu-exec.c +++ b/accel/tcg/cpu-exec.c @@ -721,7 +721,7 @@ static inline bool cpu_handle_exception(CPUState *cpu, = int *ret) && cpu->neg.icount_decr.u16.low + cpu->icount_extra =3D=3D 0) { /* Execute just one insn to trigger exception pending in the l= og */ cpu->cflags_next_tb =3D (curr_cflags(cpu) & ~CF_USE_ICOUNT) - | CF_LAST_IO | CF_NOIRQ | 1; + | CF_NOIRQ | 1; } #endif return false; diff --git a/accel/tcg/tb-maint.c b/accel/tcg/tb-maint.c index e678d20dc2..3d2a896220 100644 --- a/accel/tcg/tb-maint.c +++ b/accel/tcg/tb-maint.c @@ -1083,8 +1083,7 @@ bool tb_invalidate_phys_page_unwind(tb_page_addr_t ad= dr, uintptr_t pc) if (current_tb_modified) { /* Force execution of one insn next time. */ CPUState *cpu =3D current_cpu; - cpu->cflags_next_tb =3D - 1 | CF_LAST_IO | CF_NOIRQ | curr_cflags(current_cpu); + cpu->cflags_next_tb =3D 1 | CF_NOIRQ | curr_cflags(current_cpu); return true; } return false; @@ -1154,8 +1153,7 @@ tb_invalidate_phys_page_range__locked(struct page_col= lection *pages, if (current_tb_modified) { page_collection_unlock(pages); /* Force execution of one insn next time. */ - current_cpu->cflags_next_tb =3D - 1 | CF_LAST_IO | CF_NOIRQ | curr_cflags(current_cpu); + current_cpu->cflags_next_tb =3D 1 | CF_NOIRQ | curr_cflags(current= _cpu); mmap_unlock(); cpu_loop_exit_noexc(current_cpu); } diff --git a/accel/tcg/translate-all.c b/accel/tcg/translate-all.c index b263857ecc..79a88f5fb7 100644 --- a/accel/tcg/translate-all.c +++ b/accel/tcg/translate-all.c @@ -304,7 +304,7 @@ TranslationBlock *tb_gen_code(CPUState *cpu, =20 if (phys_pc =3D=3D -1) { /* Generate a one-shot TB with 1 insn in it */ - cflags =3D (cflags & ~CF_COUNT_MASK) | CF_LAST_IO | 1; + cflags =3D (cflags & ~CF_COUNT_MASK) | 1; } =20 max_insns =3D cflags & CF_COUNT_MASK; @@ -632,7 +632,7 @@ void cpu_io_recompile(CPUState *cpu, uintptr_t retaddr) * operations only (which execute after completion) so we don't * double instrument the instruction. */ - cpu->cflags_next_tb =3D curr_cflags(cpu) | CF_MEMI_ONLY | CF_LAST_IO |= n; + cpu->cflags_next_tb =3D curr_cflags(cpu) | CF_MEMI_ONLY | n; =20 if (qemu_loglevel_mask(CPU_LOG_EXEC)) { vaddr pc =3D log_pc(cpu, tb); diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c index 575b9812ad..38c34009a5 100644 --- a/accel/tcg/translator.c +++ b/accel/tcg/translator.c @@ -89,7 +89,7 @@ static TCGOp *gen_tb_start(DisasContextBase *db, uint32_t= cflags) * each translation block. The cost is minimal, plus it would be * very easy to forget doing it in the translator. */ - set_can_do_io(db, db->max_insns =3D=3D 1 && (cflags & CF_LAST_IO)); + set_can_do_io(db, db->max_insns =3D=3D 1); =20 return icount_start_insn; } @@ -151,13 +151,7 @@ void translator_loop(CPUState *cpu, TranslationBlock *= tb, int *max_insns, ops->tb_start(db, cpu); tcg_debug_assert(db->is_jmp =3D=3D DISAS_NEXT); /* no early exit */ =20 - if (cflags & CF_MEMI_ONLY) { - /* We should only see CF_MEMI_ONLY for io_recompile. */ - assert(cflags & CF_LAST_IO); - plugin_enabled =3D plugin_gen_tb_start(cpu, db, true); - } else { - plugin_enabled =3D plugin_gen_tb_start(cpu, db, false); - } + plugin_enabled =3D plugin_gen_tb_start(cpu, db, cflags & CF_MEMI_ONLY); db->plugin_enabled =3D plugin_enabled; =20 while (true) { @@ -169,11 +163,13 @@ void translator_loop(CPUState *cpu, TranslationBlock = *tb, int *max_insns, plugin_gen_insn_start(cpu, db); } =20 - /* Disassemble one instruction. The translate_insn hook should - update db->pc_next and db->is_jmp to indicate what should be - done next -- either exiting this loop or locate the start of - the next instruction. */ - if (db->num_insns =3D=3D db->max_insns && (cflags & CF_LAST_IO)) { + /* + * Disassemble one instruction. The translate_insn hook should + * update db->pc_next and db->is_jmp to indicate what should be + * done next -- either exiting this loop or locate the start of + * the next instruction. + */ + if (db->num_insns =3D=3D db->max_insns) { /* Accept I/O on the last instruction. */ set_can_do_io(db, true); } diff --git a/system/watchpoint.c b/system/watchpoint.c index 45d1f12faf..ba5ad13352 100644 --- a/system/watchpoint.c +++ b/system/watchpoint.c @@ -179,8 +179,7 @@ void cpu_check_watchpoint(CPUState *cpu, vaddr addr, va= ddr len, */ if (!cpu->neg.can_do_io) { /* Force execution of one insn next time. */ - cpu->cflags_next_tb =3D 1 | CF_LAST_IO | CF_NOIRQ - | curr_cflags(cpu); + cpu->cflags_next_tb =3D 1 | CF_NOIRQ | curr_cflags(cpu= ); cpu_loop_exit_restore(cpu, ra); } /* @@ -212,8 +211,7 @@ void cpu_check_watchpoint(CPUState *cpu, vaddr addr, va= ddr len, cpu_loop_exit(cpu); } else { /* Force execution of one insn next time. */ - cpu->cflags_next_tb =3D 1 | CF_LAST_IO | CF_NOIRQ - | curr_cflags(cpu); + cpu->cflags_next_tb =3D 1 | CF_NOIRQ | curr_cflags(cpu); mmap_unlock(); cpu_loop_exit_noexc(cpu); } --=20 2.34.1 From nobody Wed Nov 27 06:49:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1699990063; cv=none; d=zohomail.com; s=zohoarc; b=cKsPoN8zkuLqeSxbPNilRjA4GWVHOWpJglXd790VcsxGRYpg95QJlsvpbqOuyaul9EkwT/bjhLJVc4aOeROkurTh8mmiaLWFlTHKcvZnFjKH4cLMflsZZ/IcRXx7C0+pddcPcJFTa0leyc20mQH9aIRzSOudf0hJoJYrt5wTOT4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699990063; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=JLKWYDsjkvpifTsfNAx+wzg8HUX4emgmt/2POiSK9Os=; b=K1sULO3j3uugWxiH7HkZhH6iL49UawNItdAMfa+u+pe0hGl1PMaBrikij3Gu2miVF5tm6DPKG6VYDRCPmSwBn3Kq/UTE9kiHP4Ttl6R6BgTbbQ0+KxxPyTNl+gjEVM03IyI43jPsuO6JwoD8Q2Npfk+7wcqZ0UR7zqbNr9haexI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1699990063950373.4930568223115; Tue, 14 Nov 2023 11:27:43 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r2z3w-0003tl-OA; Tue, 14 Nov 2023 14:27:04 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r2z3v-0003st-5N for qemu-devel@nongnu.org; Tue, 14 Nov 2023 14:27:03 -0500 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1r2z3t-00070Z-4b for qemu-devel@nongnu.org; Tue, 14 Nov 2023 14:27:02 -0500 Received: by mail-pg1-x535.google.com with SMTP id 41be03b00d2f7-565334377d0so4707674a12.2 for ; Tue, 14 Nov 2023 11:27:00 -0800 (PST) Received: from stoup.. ([71.212.149.95]) by smtp.gmail.com with ESMTPSA id j18-20020a170902c3d200b001c728609574sm6052643plj.6.2023.11.14.11.26.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Nov 2023 11:26:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1699990019; x=1700594819; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JLKWYDsjkvpifTsfNAx+wzg8HUX4emgmt/2POiSK9Os=; b=IrUj1vtl3lydx3pquErtIpRxF5qV9ufMkAsoWDpwfY9y4Z/aKDvNN3QHIGDNeQ2iIn gHr5zCzkVB1uRY8meJDJvWZMfu0THZk4PivtvC5kD2XvLW28oBoqJ1Fm+44PSdr3sR3T aUHZzh0ENKEcj1r4ze0beBH/ciK7uUBtqDJTW/ugn7UmJvh/SdQgS8kQGvvbeM5hZTCY eIFx9aGApo0poHDo/qMhc9lQ8cJBXoGEfsywh+sjA+/wsAGl39IQRFqip0ix7sBGxejX Ielt4iQJsnESeIKouWmE6OYm672zs5cmYtL5Ol+0yg63gGPcBl+Vr8sd1+LYdUN6CUhz 8Ecg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699990019; x=1700594819; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JLKWYDsjkvpifTsfNAx+wzg8HUX4emgmt/2POiSK9Os=; b=jmH+laqxZGUTFfx5CX8BHGdeylZzQ5nv+xkW7LCA4jyrwF7q7trTjdKbrOkSbtxYRK Okz1O73Pe63prhhB0+CXmFIdYXUVW1X/RayhCB+q8ppwuNvUi4z2+Z/usM99CwnJXCoU GhBsD8VG+HxmjkdsTUvxEw+t+jlAs6sdf5bPN590o9MLXgpYYPRid1jrw+jOlE5zc4IF MBuLc7G5lfc+iX3T1DpqQJa6T9C4LGt/LFzWzxzEYEbB89CnycIdgBqO2JLbe+zpQWCB g86v/JkNpU6g6/4h/2yWzO/gIbkZsjJ7Zvkbe7pyCEK8eSRVLynumFoEK5/aaJHtsRjB wu5Q== X-Gm-Message-State: AOJu0YwtLdcUh5nypOnK+n8EZ8u9rAJNsaxV+RfHplgs9k7L4ETaMawy e21K1rmJDrzpit+kzX4Zr4V7OLJlwqKdp8qw5SE= X-Google-Smtp-Source: AGHT+IFcVkJkDAbpWNkyJdSaHiohgPVk/R7Z0L2HQbaREh5LYfeUA7IzEp4KTTUod4i/dpXraWC2Tw== X-Received: by 2002:a17:902:6b88:b0:1cc:2eda:bde8 with SMTP id p8-20020a1709026b8800b001cc2edabde8mr3228989plk.24.1699990019599; Tue, 14 Nov 2023 11:26:59 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Jessica Clarke Subject: [PULL 2/3] accel/tcg: Forward probe size on to notdirty_write Date: Tue, 14 Nov 2023 11:26:55 -0800 Message-Id: <20231114192656.176451-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231114192656.176451-1-richard.henderson@linaro.org> References: <20231114192656.176451-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::535; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x535.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1699990065111100001 Content-Type: text/plain; charset="utf-8" From: Jessica Clarke Without this, we just dirty a single byte, and so if the caller writes more than one byte to the host memory then we won't have invalidated any translation blocks that start after the first byte and overlap those writes. In particular, AArch64's DC ZVA implementation uses probe_access (via probe_write), and so we don't invalidate the entire block, only the TB overlapping the first byte (and, in the unusual case an unaligned VA is given to the instruction, we also probe that specific address in order to get the right VA reported on an exception, so will invalidate a TB overlapping that address too). Since our IC IVAU implementation is a no-op for system emulation that relies on the softmmu already having detected self-modifying code via this mechanism, this means we have observably wrong behaviour when jumping to code that has been DC ZVA'ed. In practice this is an unusual thing for software to do, as in reality the OS will DC ZVA the page and the application will go and write actual instructions to it that aren't UDF #0, but you can write a test that clearly shows the faulty behaviour. For functions other than probe_access it's not clear what size to use when 0 is passed in. Arguably a size of 0 shouldn't dirty at all, since if you want to actually write then you should pass in a real size, but I have conservatively kept the implementation as dirtying the first byte in that case so as to avoid breaking any assumptions about that behaviour. Signed-off-by: Jessica Clarke Message-Id: <20231104031232.3246614-1-jrtc27@jrtc27.com> [rth: Move the dirtysize computation next to notdirty_write.] Reviewed-by: Richard Henderson Signed-off-by: Richard Henderson --- accel/tcg/cputlb.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/accel/tcg/cputlb.c b/accel/tcg/cputlb.c index 765805e70b..db3f93fda9 100644 --- a/accel/tcg/cputlb.c +++ b/accel/tcg/cputlb.c @@ -1479,7 +1479,8 @@ int probe_access_full(CPUArchState *env, vaddr addr, = int size, =20 /* Handle clean RAM pages. */ if (unlikely(flags & TLB_NOTDIRTY)) { - notdirty_write(env_cpu(env), addr, 1, *pfull, retaddr); + int dirtysize =3D size =3D=3D 0 ? 1 : size; + notdirty_write(env_cpu(env), addr, dirtysize, *pfull, retaddr); flags &=3D ~TLB_NOTDIRTY; } =20 @@ -1502,7 +1503,8 @@ int probe_access_full_mmu(CPUArchState *env, vaddr ad= dr, int size, =20 /* Handle clean RAM pages. */ if (unlikely(flags & TLB_NOTDIRTY)) { - notdirty_write(env_cpu(env), addr, 1, *pfull, 0); + int dirtysize =3D size =3D=3D 0 ? 1 : size; + notdirty_write(env_cpu(env), addr, dirtysize, *pfull, 0); flags &=3D ~TLB_NOTDIRTY; } =20 @@ -1524,7 +1526,8 @@ int probe_access_flags(CPUArchState *env, vaddr addr,= int size, =20 /* Handle clean RAM pages. */ if (unlikely(flags & TLB_NOTDIRTY)) { - notdirty_write(env_cpu(env), addr, 1, full, retaddr); + int dirtysize =3D size =3D=3D 0 ? 1 : size; + notdirty_write(env_cpu(env), addr, dirtysize, full, retaddr); flags &=3D ~TLB_NOTDIRTY; } =20 @@ -1560,7 +1563,7 @@ void *probe_access(CPUArchState *env, vaddr addr, int= size, =20 /* Handle clean RAM pages. */ if (flags & TLB_NOTDIRTY) { - notdirty_write(env_cpu(env), addr, 1, full, retaddr); + notdirty_write(env_cpu(env), addr, size, full, retaddr); } } =20 --=20 2.34.1 From nobody Wed Nov 27 06:49:27 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1699990050; cv=none; d=zohomail.com; s=zohoarc; b=LL5YpkIxlUY1Inr7xaBVBBaubIcYuHaPOL82nLI1J/2eareGC3Pd/XD5q5RyZxVcmShyNRdkY6WHbDWhoonXj/BtX/N0qhGjsHZ6de3gnMGRY24g8IkwHgfaw7z3R55oYYtb8E6XQuqaoyE/obt3gTCh8dUnt03cH1II7OubjYc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1699990050; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YU1go63PndchrVnK6DHWLmkVnDCLAEuAU/t//fUCSL8=; b=RZyqC2/hnogEfWKvIZ+FyooEBodhKG1HYCtEjWblzBQ+/k3SxLvuyj0TWeCxGdLRIBcAS922SS6aNNMmfYM39QCdR80Db5SW76a/yEZ8eSBbKPJKs8MHGB9oDNKNmZm6zTqbG9gtxvV9wY+FtWGPDvZV5RBxwTWa3JTsFmjw0qs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1699990050689756.88097839787; Tue, 14 Nov 2023 11:27:30 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1r2z3x-0003ts-JD; Tue, 14 Nov 2023 14:27:05 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1r2z3v-0003tW-RS for qemu-devel@nongnu.org; Tue, 14 Nov 2023 14:27:03 -0500 Received: from mail-pl1-x635.google.com ([2607:f8b0:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1r2z3u-00070e-Ac for qemu-devel@nongnu.org; Tue, 14 Nov 2023 14:27:03 -0500 Received: by mail-pl1-x635.google.com with SMTP id d9443c01a7336-1cc3542e328so45124915ad.1 for ; Tue, 14 Nov 2023 11:27:01 -0800 (PST) Received: from stoup.. ([71.212.149.95]) by smtp.gmail.com with ESMTPSA id j18-20020a170902c3d200b001c728609574sm6052643plj.6.2023.11.14.11.26.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 14 Nov 2023 11:27:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1699990020; x=1700594820; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YU1go63PndchrVnK6DHWLmkVnDCLAEuAU/t//fUCSL8=; b=apjY9uTQYnXdfj26MSngIfqL69GokTmwPbrjmLKVROSwvxol9MihKQNgrGalLVuRn8 crsTkfgh/tiZq12b0C6qmc6kyuCTpVdfV1eLtaJOUmeCNXPJ0nySum5cN6utoA+m/SGx +rf5YqHY7rcZJuv8F++XiCHDZp+rJA3DkWWBsq0vBAxY4uAlwu1ecNVRBAmINZoioA6D OixZqXZYPMVDEUvMbpHOCAZ6t/9MIaFck88Gst/D3TmxaQNa55vGcmnHa2wKTscOizV7 J4jDayVPpMWN3OQ9n4WwJzh9pJomWte0aoTRiQ6p6X1ciJCV476g+N+UWONZvFybrQLO FNNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699990020; x=1700594820; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YU1go63PndchrVnK6DHWLmkVnDCLAEuAU/t//fUCSL8=; b=DeSS9kjvQQIIpqWTs2+/GZQvlcB6JWZGglNk6UPdil3xNzuGeWTdRJpFEbo71is4gJ nl3z1XHQPdnakcEhoheV+lOhX+CFBxqwXxWniPOaPdhOoIVEcCTXyAupVjuGZN2PiYwH eclFjprXvjP0Pk0Vi1+eWVSo3eZUO4uxRXY940q045zPQaGJXi/PrIoSyzrPqE/jLNAy wEoHFDqZUy+a8ltpg8Vx70ngourgt7cUDFT1wzI2TX8V1eCC0xmkaxf1nU34N0GVYB6Y Us7PptSKaSJnGrIhTJtwTWiMtagnwsYdOPiElR0X8O8VKzaiZam538NLqV/4J7si/HW3 Rh7A== X-Gm-Message-State: AOJu0Yy6FwxpFxVwZq7uvyPqzg2oexly4q7qFdO+a5nQj7ZRggsOfH1a M9OP351LvnWR6M2IBd7noiNmkFtpyKCnM2F9N9I= X-Google-Smtp-Source: AGHT+IHAmf4TroXDJy7fnn9wm1607bIHkKVWNmmIsYJ4iKPRB/42/rC8IhBtWHXi5vZs8l98YMIVKA== X-Received: by 2002:a17:902:db0b:b0:1cc:5833:cf5e with SMTP id m11-20020a170902db0b00b001cc5833cf5emr3872457plx.27.1699990020403; Tue, 14 Nov 2023 11:27:00 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Cc: Mark Cave-Ayland , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PULL 3/3] target/sparc: Fix RETURN Date: Tue, 14 Nov 2023 11:26:56 -0800 Message-Id: <20231114192656.176451-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231114192656.176451-1-richard.henderson@linaro.org> References: <20231114192656.176451-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::635; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x635.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1699990051057100001 Perform window restore before pc update. Required in order to recognize any window underflow trap with the current pc. Fixes: 86b82fe021f4 ("target/sparc: Move JMPL, RETT, RETURN to decodetree") Reported-by: Mark Cave-Ayland Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Mark Cave-Ayland Acked-by: Mark Cave-Ayland Signed-off-by: Richard Henderson --- target/sparc/translate.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/sparc/translate.c b/target/sparc/translate.c index 6fc333a6b8..9387299559 100644 --- a/target/sparc/translate.c +++ b/target/sparc/translate.c @@ -4096,12 +4096,12 @@ TRANS(RETT, 32, do_add_special, a, do_rett) static bool do_return(DisasContext *dc, int rd, TCGv src) { gen_check_align(dc, src, 3); + gen_helper_restore(tcg_env); =20 gen_mov_pc_npc(dc); tcg_gen_mov_tl(cpu_npc, src); gen_address_mask(dc, cpu_npc); =20 - gen_helper_restore(tcg_env); dc->npc =3D DYNAMIC_PC_LOOKUP; return true; } --=20 2.34.1