From nobody Thu Oct 22 19:27:19 2026 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=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1791555421; cv=none; d=zohomail.com; s=zohoarc; b=S5WA4xYQpzmnF2BrIO1IM3kfjl0hj9i6fE47+eBiHFLMJ4X8dJV9JWVRCrBUd2jIVDn4ZPdQfJpWbdt+wnmE0uWKYuqwXnzX1YRaxkSq/vgUuXhxXEPfrmXOhw+EI27Uy4oLzwWNE4oLfWbHuwMVR3EDC9WRjybcsG2aiNbM+SY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791555421; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=G4q3w1GbxfDtauogl7QvFhXf4+K7SEEens2HfxEHj9M=; b=ZFTK1ONC9jIIEmT7mnweZdM5in20ESjnxQbUIufDNCITD27IGoaW9E7cvA5lnse+BYnYlBAzBKJprNx6CwNLLqdhunZUPCrG2h84kJtjitig99GIivvHqQCKu7MnZWwloLgsHwnE2cG3KHp5oH/6nw4mH7w/ngHmYNsy4b5WgOA= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 179155542181786.29063511599043; Fri, 9 Oct 2026 07:17:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xFBOP-0005Ea-Fs; Fri, 09 Oct 2026 10:16:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xFBGk-0003SM-QX for qemu-devel@nongnu.org; Fri, 09 Oct 2026 10:08:22 -0400 Received: from mail-lj1-x234.google.com ([2a00:1450:4864:20::234]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xFBGa-0007yM-2K for qemu-devel@nongnu.org; Fri, 09 Oct 2026 10:08:16 -0400 Received: by mail-lj1-x234.google.com with SMTP id 38308e7fff4ca-3a76ac0bdafso14879161fa.1 for ; Fri, 09 Oct 2026 07:08:07 -0700 (PDT) Received: from localhost (broadband-5-228-114-10.ip.moscow.rt.ru. [5.228.114.10]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-3a9c3cf5903sm7368481fa.42.2026.10.09.07.08.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Oct 2026 07:08:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791554886; x=1792159686; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=G4q3w1GbxfDtauogl7QvFhXf4+K7SEEens2HfxEHj9M=; b=rms3lzj/CIYrVO9s9qfdXjZeuDxUchQLjTL4HfWGMn6rsnuwY3N5j9pKxt7xs46fEf VMHySseQgBfVqBgEESoVugYQRknpVVYQVDOhpj+FsWbsDQuld09WFJl9s8nZMHWkkXec UgOcqK60RJqXAnf+VtRoN5bbPaI2t482u2gaDlp6QfZNohb5Q6DY6GD3gydxVlSY4hI1 jieiWaJ0XgrEmUMCAglv+YQEVSV3i/QyK8c/2KfVAhOJEqfmoJQ4wsc0FYSVgjkUhZwE +DByBiDPLZsb6JdOTIa0KOjtx0+VNuHafeCTCcBFeg6pXRPj7OqLSxud9E9Gg1gXnEl6 Ro6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791554886; x=1792159686; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=G4q3w1GbxfDtauogl7QvFhXf4+K7SEEens2HfxEHj9M=; b=q5nY4l/hfBgSUkSsgiwdEbFSPu6drlKVbreC9pO1k9+Ku0X4iCGLdlZGI5DuWbZVT1 LGFVimKsu01fDSWX0T7ag35F3lexiVxma7LOrn2OOlPvMqkKy14CcldzOzXc3lnSlkcT b8OYaw4yb6a9qjHhWrFog3w+b7/adaIyYufFafzoDznMDXwU9YGdWsk2m4fOX5BIdJCD m4dFU+kW0WwJnl7uNmtZh8+irJM6fcDTEpYbx7m+5xDOrnqYVHsO6ywp59Aoq59bjBFr yVA5gjQu93xZFuQF45VA8Msq86SS05w4XDDjwkGFv70E5NVrDpZbrOMxf+7qlaJaOcTX ZR1Q== X-Gm-Message-State: AFq9FYKDeC0vVWYyAQCrkvNIDwfuZ31+mSZPYzjhMAqflZ5XR5bfrYLl FMfBkzk/8HBlEspdnOsW+AymiWGF/x6nKmWnQ+P5n86xy4v+mGed/H13fzf/5jUfWyQ= X-Gm-Gg: AYBFou3N42MTv90LSHfNKvec5N5bSmC18G+2R9BB/024NDTCt+B2DK9jvm0CxTVqMbE ICUA/PsfDq0X7vLQHK5psGi+taBl3V82iV5gRhKi2rvOsXqrNym13dtxVS4DqNPxvv34agGBZ4g 504f7S5vqWIrvDjk7EHhjwRpUbYkg4DaehHuZX4pxD+Gc5VTuzR0Wr1yqDBRB+AsUzMNXCQu070 nZn2/Yg/ueHDB1cZYCW1DLvodbzgs1jG7af9DzQrk/V3XrcTNS0L0fDM23g6DP7TwkcHW/WR7N/ gSXMtuVvEA1zJD5InrLWIv2mPQuBMQ+tXxtu8kZT/KPOyuWx+9cTfDXscd1Ma/oz48WPKcUE4Sw CFnFZdgtfk0VNGoOoDNo6VBqHDJUkY6OuNHk3n8EPub/jLnM1UL7+YGF3WqOJFACAQE/uDpCdfC 3To4HGSlchWTRPVfCNBz3fHbIb85lFOZ6NbbrykRcz0ywXc29wNfihpKDupNBLE7ctzzB67zJHW WAMsUDBVG2RhgW7deWASfb/CPVKT1dixKfW9g== X-Received: by 2002:a2e:a585:0:b0:3a8:7db9:3b2b with SMTP id 38308e7fff4ca-3a9c4ebcd13mr3971881fa.1.1791554886346; Fri, 09 Oct 2026 07:08:06 -0700 (PDT) From: Konstantin Semichastnov Date: Fri, 09 Oct 2026 17:03:02 +0300 Subject: [PATCH 1/6] hw/riscv/trace-encoder.c: move trace_running setting location MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261009-upstream-ntrace_filter-v1-1-8f061c9b24da@gmail.com> References: <20261009-upstream-ntrace_filter-v1-0-8f061c9b24da@gmail.com> In-Reply-To: <20261009-upstream-ntrace_filter-v1-0-8f061c9b24da@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Alexei Filippov , Grigoriy Bereznyakov X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1589; i=antikostya2@gmail.com; h=from:subject:message-id; bh=gGeyDS2hFxpV5iufNNIMTw2ovv0h2LPsg5wL6NWTroo=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqyPQWG181IfDiseaFYPEyZPv/XjgHzpIN8UmC6 gWNsfI1v4uJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCasj0FgAKCRBIiqVupVDe dvwkD/9XMmCGBWEdCBPegg3WJIr8V2t9AOMf0iJapFAoDrG3IbDh2QjHMvSUxUYRZGDRpQ3JZGe dDxa6EhghQKqS0Kj/O64YyZVM+/Jd5E36RhMetM8mMv72i1u8Ze+Sqbp7YXFm3VQHhZdXd8B2gN XArlcrKKUB4vyK7F1fM/vzp+mcvaVdEN/ycFvkKwpTMS+HXYRUNjDXy2FC+mUq/DHK9F+wRKloo 1+jANuRKBgfGhgMtrUOHsxMepu5PDvLrqUTh+GqkteV3Etz71v6duZPVWRRRoRRkpLRjDIRfeLg sWSfio45ELl8fSdjjdkb1tC4gp698qwNDkCpYCRDoP2+6iLSJNhnnHxR6sdfUXXPqkJKAQz6MiX EEqvJFzmBT7TKoaHpC9lOzxbSw+dIJuIvozWp3xfz97/dqbLsFGItPzVOnFdhF+IwHbtsv87M7a 48D3FaMT0bPsJsFKu9PsEH4dwYyfxnUXDDmT/w6opQuJ/lKEJngIeKwXM63VOelaKzWR1/QmYQ/ T80/aW1U0etgtFrIyqdNtTiPxcGLRHpWOBrWhYtH6OMS+RbWibEs1yLguAN9AJp5zKmCkjZWMtu VkSI49C6j5/w2m8yUlfp5WrM0FQbc4OqqSWypec60iSVAa7PGLVr2mcSw0OQ/NJbniV7AdZ4wil BAjh/zvftBZ4MPw== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::234; envelope-from=antikostya2@gmail.com; helo=mail-lj1-x234.google.com X-Spam_score_int: -7 X-Spam_score: -0.8 X-Spam_bar: / X-Spam_report: (-0.8 / 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, FORGED_GMAIL_RCVD=1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1791555423356158500 Let's set trace_running to false after last trace emitted and to true before first trace message emitted. Signed-off-by: Alexei Filippov --- hw/riscv/trace-encoder.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index d83bc95f35..11b07b0f3d 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -350,6 +350,9 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg, = uint64_t val) trencoder_send_prog_trace_correlation(OBJECT(te), env->pc, ins= t_len, CORRELATION_TRACE_DISABL= ED); } + + te->trace_running =3D false; + env->trace_running =3D false; } =20 te->ntrace =3D (trTeFormat =3D=3D TR_TE_CONTROL_FORMAT_NTRACE); @@ -359,6 +362,9 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg, = uint64_t val) te->ramsink_ramstart =3D trencoder_read_ramsink_writep(te); te->ramsink_ramlimit =3D trencoder_read_ramsink_ramlimit(te); =20 + te->trace_running =3D true; + env->trace_running =3D true; + if (te->ntrace) { /* * N-Trace require to trace from very first instruction, @@ -373,9 +379,6 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg, = uint64_t val) te->trace_next_insn =3D true; } } - - te->trace_running =3D trTeInstTracing; - env->trace_running =3D trTeInstTracing; } =20 static RegisterAccessInfo trencoder_regs_info[] =3D { --=20 2.43.0 From nobody Thu Oct 22 19:27:19 2026 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=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1791555081; cv=none; d=zohomail.com; s=zohoarc; b=TCL6jOAcZxrc/ZlpuGza+76RaUTlo46+wggi2eJ6dNY3mTos0jW95/euK0oe0x9rnDZv9USEU9nxWw8GBmVXVbJwB7MPscXSWUtQAEcxLOk36GkqKJA1Yb7sCZ9Kyw9qM0v6WJWmT0l0bPT+9hIjMe2ZLgUggG1wvGhtg9mFVio= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791555081; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=wMt3f/k4K2cy70R7p3thxHF9lPBBoNSFVYlGu6oukQc=; b=iTC1foO72BoZkBAO5IVmuMrznHoS9/Au5ObpCAUgR4iuZ0W7se9CJRkQcMx6VrH6LaoAhTr4YHmgcM2xG+SPJPuXpfQCiKbbO9+rr2POP31uJbs5K3P97DZwf5dkIXHYd8gRfPgX+bR2n8iZdj+wj/HWMz2ZzByyTs8jgJxgv3Y= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791555081502915.8597817593873; Fri, 9 Oct 2026 07:11:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xFBJ6-0003n2-F8; Fri, 09 Oct 2026 10:10:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xFBGm-0003Sm-9T for qemu-devel@nongnu.org; Fri, 09 Oct 2026 10:08:27 -0400 Received: from mail-lf1-f54.google.com ([209.85.167.54]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xFBGi-0007yd-QQ for qemu-devel@nongnu.org; Fri, 09 Oct 2026 10:08:19 -0400 Received: by mail-lf1-f54.google.com with SMTP id 2adb3069b0e04-5ba357a1929so3999484e87.0 for ; Fri, 09 Oct 2026 07:08:15 -0700 (PDT) Received: from localhost (broadband-5-228-114-10.ip.moscow.rt.ru. [5.228.114.10]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5bcddeb627fsm663755e87.68.2026.10.09.07.08.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Oct 2026 07:08:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791554893; x=1792159693; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=wMt3f/k4K2cy70R7p3thxHF9lPBBoNSFVYlGu6oukQc=; b=smtkmgmpBx9vOhngeWDA7mw6F/P9VSuM41cAUqQpIzvXTma3XSVKyvCQK7LQU+Qf0w SRgpiDFQtkySa3VCCyaKqAYTawV7FuX0TXpwuF0TFl4wLSWfO3azYuaRb2shnrHefHnZ WMH2QiUU68MBqZ+BReCrA7fxMtOuqzuMkSUUay4U1BomD5mCCs2MBw/gTJZmeudU2Phj xQSFFzMjSHJnCJs6NQCSGCFvpy+WOFM6rW08wy2V4K2amH8CsQeJVNMCA015NQioE1Ct 3Oo9+CcEGYbRhBjdp8t7aqbsPXxB8AO0SwQMl5bAxzxQrhRtKJeebKFljAsxquJ6xsQA EYmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791554893; x=1792159693; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=wMt3f/k4K2cy70R7p3thxHF9lPBBoNSFVYlGu6oukQc=; b=RnLouvwjxZPvGM5Y4O5NCcDMcMl++NYlFj06A8Yf/9HW/z9TdqZA8BcPwgPYDgpw+o P2HvaikPTI78DTY/3depOFLq4JfzKx5JEL6priqf6qIkplhC0ZT/ARm1HKfwcELUQCK0 YTip+lk6A2MeH6b/XpGYmcuZrKnArkGaIircwySjFeJOLE+PY0bYH9KPPVJuvdi+8+TM pIy1xYGEj8eI4fRGqdJ+xe8qybQZdzu1KFmdRHa2Mux6gjhVCyPmzFAgcYcSdhzJlWOq S3cloqrCRfTKfRpH1PeBT4QOq448y888vYRx2hyH/K3o2Z1tx+r5lo1eO2wcJ/QHNja1 RSpw== X-Gm-Message-State: AFq9FYKVMhSrSz30sQseN4Ccy2cUQyLusF4wznvT5/OtfH5PYuCfaDxn y5qHZyOORKHNTnOoi64CCpxclPxZF7Zi9KlpmVVgvEMvZqB9+V6y/RM2sF05VG21Euo= X-Gm-Gg: AYBFou2kfm9vgmkCEba3a4YeTbCoR6w+EvXjkZnruZB3aKNF6nXn0HpbXEP+KYDA78s Ez6zTrn4OD6fSDMnpGqa+c4iKU5b6vkeK9j0X8WKpkm+Yp0LUuXsS4RwHT4JP/k+I7KZAIKigK0 KkAwYHn09QWArcc6vjKCQSf1AeUctWF9/xhUU1VlseAhyPWZcGUIz7Ji/eDkSCz9SJgPFGgZ/YW t69/R0T7bINg0UmtmDhwle+qo6Kj2Z9PxLsnw47OZAO90ouTYItTpC86aA0nYgjAFkB6MkgAQUm t7zp7KTqfJWS00OLOmrazD2yY1oElyqNTQoWsmP9E1McLI+W5mIqzJuvhCftiGxqXYWjmjFE0v0 cUPCD0Sb5Eto9XrTrLlU24fFd992xvDK7BNY6EQhcVvyOlcQAJVWub4kJoyS6dj9rqCZ/rxcFZp QDnfBzPxBsRMjeCV0VwSCpvWDgp4/4V44RzqS+nawRsiSPC7Z71mBvB2mV5xWYi8s8Ui5hphhju dl/OjdUhp8gKyOrO4oqe9HKrietai0D/8JVng== X-Received: by 2002:a05:6512:138d:b0:5b9:8480:88c7 with SMTP id 2adb3069b0e04-5bcde6c26famr809518e87.27.1791554892891; Fri, 09 Oct 2026 07:08:12 -0700 (PDT) From: Konstantin Semichastnov Date: Fri, 09 Oct 2026 17:03:03 +0300 Subject: [PATCH 2/6] hw/riscv/trace-encoder.c: encapsulate icnt counting MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261009-upstream-ntrace_filter-v1-2-8f061c9b24da@gmail.com> References: <20261009-upstream-ntrace_filter-v1-0-8f061c9b24da@gmail.com> In-Reply-To: <20261009-upstream-ntrace_filter-v1-0-8f061c9b24da@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Alexei Filippov , Grigoriy Bereznyakov X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=1228; i=antikostya2@gmail.com; h=from:subject:message-id; bh=BPxFIzeIxLIrqlEuJ4+89kKoS4OSW4gwNkRUZNfp5tw=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqyPQWaTvRAOA20eXSoDT6GzOyqrH+dFKhyaVlh +uXe84eryKJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCasj0FgAKCRBIiqVupVDe dmtmEACuXRh1saQfw4SKudpB+IxXvL32pRliTUqKISOZWALTciogmvp2+x+MypTmC42z2+eJC/D gvgkJG+MtgdCvXXgu/HyOimN/jul1+SuYHiPRgO1hG3yraffuc6x+9NPBOKzl2G0r70NXfjrqZE zr0XftuXRhz2aQxKIeJp0J2BXgSmUPDH3VnVRFUaWw0GW+dVVsY3nxU18YrD/QhPw0WHEPJwY1t M6G9Y3iNO7Yz9edw9Ilcj4jH0imE9iArZ1E3T3QNhhkSuGZc91WCiWhj8rYyVXQ2qbim6fkz8Is GDYafB64nwrwe934syBgb8kd0FQIkS3eQm3IVuxkUMgewP2ewHG0hU/jhC4KCkfqPJ1hwXKdlsj z8VkMRS8Sdy5szzIFe/8a4n3W18maqbEUilHH751GksYVNz1XSZNlMthnfL3MltcEY/OpjNRApE 2Dhy+R6wo6bw7Byz99puios0XrOmAexJDWyAFarIPUgvO4ahuFwK+7pFzjAgvG9aqUDYYaf6jB+ q+2hmCegO0gCoNMz6oU/zWdPtQOLmwq/Qf2HVOtHKfEtTFdFffCCoGMIkQiyAWRmTdyXqFc6r6e 4QQ2kLGiAyp0+4Yve5JfirK7Z7DIt6PQ8IpVHS0f2PZnOsCOQRd7/RTO47qRRmO0RxO69Do4sGb 94NgOEVLTjXbR7A== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=lists1p.gnu.org; Received-SPF: pass client-ip=209.85.167.54; envelope-from=antikostya2@gmail.com; helo=mail-lf1-f54.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1791555083431158500 Lets hide icnt inside message emitting function, to handle it easier Signed-off-by: Alexei Filippov --- hw/riscv/trace-encoder.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 11b07b0f3d..50d971336b 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -373,8 +373,6 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg, = uint64_t val) * using te->trace_next_insn */ trencoder_send_prog_trace_sync(OBJECT(te), env->pc); - te->last_icnt_reset =3D env->pc; - te->icnt_accumulated =3D 0; } else { te->trace_next_insn =3D true; } @@ -811,6 +809,9 @@ void trencoder_send_prog_trace_sync(Object *trencoder_o= bj, uint64_t pc) =20 trencoder_send_message_smem(trencoder, msg, msg_size); =20 + trencoder->last_icnt_reset =3D pc; + trencoder->icnt_accumulated =3D 0; + if (ARRAY_FIELD_EX32(trencoder->regs, TR_TE_CONTROL, CONTEXT)) { trencoder_send_ownership_msg(trencoder, FORMAT_SYNC_HCONTEXT, trencoder->cpu->env.priv); --=20 2.43.0 From nobody Thu Oct 22 19:27:19 2026 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=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1791555153; cv=none; d=zohomail.com; s=zohoarc; b=dc6oYJi/6CN2DYZRaX5DM2nQVCr8XojaqTFqElpjoNN+cvap3JaFjstQUR0YvABmQhyZyRiB+Qs7JtFv6WSfDLU/hKBmEekx9slVTritB3rt0ewaklF5zs9sGEqt6aH9Q8YCanqIg0FrDEuWeovmB1CgZ/X8+oCdRS2jFET5FQw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791555153; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=9MWlePecrx9LZo7UifxQd1oGav0EgMKJo7fKfwDqlJ8=; b=I6g3VJVSbYWu6CzbSVPVVmFbJ4S0yVWGScwPXJ83L/ur3ujPX8bdh4O4Ty/ngPParAicXAhxDXXiCjpdeOI3qwKQ/WbB7nolm6kQT30tK31vRezik6VpAxAJS2nxFhDUtbNNJ9U6fJNddgBvilLpUoLikTues5TIhVyxE3Zlpv0= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791555153529777.877865654677; Fri, 9 Oct 2026 07:12:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xFBK7-00044G-KZ; Fri, 09 Oct 2026 10:12:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xFBGs-0003TD-9b for qemu-devel@nongnu.org; Fri, 09 Oct 2026 10:08:31 -0400 Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xFBGm-0007zC-B3 for qemu-devel@nongnu.org; Fri, 09 Oct 2026 10:08:25 -0400 Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-5bcb2eceb3eso505388e87.0 for ; Fri, 09 Oct 2026 07:08:19 -0700 (PDT) Received: from localhost (broadband-5-228-114-10.ip.moscow.rt.ru. [5.228.114.10]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5bcddebc900sm656664e87.69.2026.10.09.07.08.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Oct 2026 07:08:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791554898; x=1792159698; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=9MWlePecrx9LZo7UifxQd1oGav0EgMKJo7fKfwDqlJ8=; b=pxolG/VsXAziuz1+PBle9qlsvwVtqXdYdhxSbzykV+6FwkbbW4BXdDU8md72RI2rnU rbKSAbod7mo8B7b20YAfzn5VEYV62vEXu+pTKazHR19wc3z3GwwRurrOHFKH+OLU08Fb vaUDMEirjl/eu8r0w2rNPsPQp1eaYar1lb+NTOLxSWqOppHy0QPPvO8MWX3DOUkTotxp IY+G1N/EaQzhU08As13KTuMoQwfIddjWyFcJ7p2Rvw27bUt2tzn2ng7208A5RKD+/MxC uJXipLQHQjOp05Wxlsy4rrIr4I2a75Wu3ipPK6OtKTXJt9289yfSV3K4XZj1QH6iwy9r QHcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791554898; x=1792159698; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=9MWlePecrx9LZo7UifxQd1oGav0EgMKJo7fKfwDqlJ8=; b=A6naKPrlASD7YCTHNj4lV7icVpH5SEfRzQ1ivgivt25zP+WC2TEkpG+Vp881w0OWp/ UAPJavQuHPbN1nvIUXVa003WoJW/ZVplxPgS0lh7zaJcUb/aH/aDh3xPFL+rnu56KRYl zkIjygqDWAXnGGDG1ZEue/v6h7+8btLPe9ipu/iQ3YbfyDqN8kMUlJMNA1NlRplKxsDx jz6qEYmw3gz8APxjMII5MfTgvjBj8M/7iZNGcRxMj0YNMimCB/1RCMzXJrs/JQ16lTKT SBxYIK8zWRhhDUJeFu0sZXLgDBkbqAQo4MDb2p+OP2gDS8t5sj2RBD4rqWJElaJa7IuD Z3YA== X-Gm-Message-State: AFq9FYILxtWvXt5YazCcHr1jSVfCVG2JQrLFmc/rwdJx+TKCo7m551jQ 3fCcb0kp+KTcNAiQl4GdKeAKGM1g2m6z0cR+Mf8syWW2+9NfrtVBFvYLvVypWEjzdjk= X-Gm-Gg: AYBFou3kwWJGs+0+/2Dfk11oWMR9T3IRHTvn2y+i0MdCkHitnGGAXUG1MayRkVarbWl zMy3WifgN7Msu4BIOWKee1uyKE3dMNhYxNQ+A33ODahtCHlPy+x5hd+Mc2Trmnmk91NJlFoYL6P XbLgYK+TKdK05dpBqilYmefdVUQ/ZKBvAdDG8ESeb2AxVjWNJksgzo/GZBXBmwzpVdL12WYn9/X KjB40jrpLRv8zDqnJiMRa6FMvQ6thpTsWzfD0+U2lGE1KUpq/FmbbeQTRiXVSdWkmBRL/graBJ4 HjoHjPzzSkDJNk9D1pk7JQldksmT0eOCbGRhgEDOlZ3LhBIeMb/3jbJc/UAOXzva4ITIj/YSjtH MDjnk3IFBUr1sbFJTAPp7UlIFbAIUSCu3En1C1qiiqPCMOr27r4x1GbepNrI3S6yHeX1WPnvRCi N6cyexE7rgTYIMkY1geVS6sMs7rL+arqrPhKXsi7NPWm8rel4MSA3+xBGTGCqHQOuFg/PqEWc+R 9zx2bAroYzz8eGhDK33Nn1UUN8+8/N5pf2Hqg== X-Received: by 2002:a05:6512:3d8d:b0:5b6:172a:c36e with SMTP id 2adb3069b0e04-5bcde3582bfmr715221e87.8.1791554898277; Fri, 09 Oct 2026 07:08:18 -0700 (PDT) From: Konstantin Semichastnov Date: Fri, 09 Oct 2026 17:03:04 +0300 Subject: [PATCH 3/6] hw/riscv/ntrace: do not use gen_updiscon to gen IndirectBranch message MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261009-upstream-ntrace_filter-v1-3-8f061c9b24da@gmail.com> References: <20261009-upstream-ntrace_filter-v1-0-8f061c9b24da@gmail.com> In-Reply-To: <20261009-upstream-ntrace_filter-v1-0-8f061c9b24da@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Alexei Filippov , Grigoriy Bereznyakov X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=7955; i=antikostya2@gmail.com; h=from:subject:message-id; bh=lqHuEKvKTq4MTvSOUlNDACwTXLoA9TplPIssPbZSIcs=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqyPQWtY9q/LnOwavImmphd7hbjygXHIPJ8ZxML UgegELHpgKJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCasj0FgAKCRBIiqVupVDe dvPyD/9pF3dRyPuYvCdpmenJ9nb9YrLzzi9I7BWEqD7ElhSuDts5ixR3gyHRifUBAzTh0SJgHUH oF7c/1W7CEFF5+c22moGyI6nr4sPG8QnrcoKw/UKHflYSXdGGwfRlc0pXOHrR/3XQS2usDaPEdY 9HTh/tbKGftfu1AgREC8CJzKMNbqY6mGWn3sEx7kNmhqzjTUgEmf7bvViQQuI8aXapv90S5nU3z WfgF7BQwVFNIP2FxKFuFmgThPLsmtI2673dPtTsOOTQPDR5BUIGLWWs7YSuPP9pNGTPztSeqyra IH4YOQJUbOxJ92/taPbCdDjbuhuA6+JViXdPM4fbgU2gAtYIUYR4a2YWXK92UZ/cTQUdO7CN8pz BhfzfDtfhrnxHIul9xDY1cGkFjT//uM4HskvIL3OTuE7AOWGOqBIUFHNZIjQf0AyE4pNRSd+Mwc asOkMxZgsiX1FmhtsGKk56PMnxyrcs3Q+fk0nZWkIjL0dYJxPrbVi8LjJLdRfiD/vHIX53Ymgqc PjChfJIJgiyuDms+oUOsW/JbVO2SVEuoC5uJsEP2xNKLlyOQ06m/HxTVvQrS0HTHHPmaBWKXJLH 70QWyxTFfwzMTF+PBZYQQhhFgyVzLzpQH/iUFktSVcjYxaYnsB32C3/g1a3UMTnYJR6yvjtQM8X 8OFhdf/SuRluleA== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::130; envelope-from=antikostya2@gmail.com; helo=mail-lf1-x130.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1791555156358158500 According to Table 3 RISCV Ntrace Spec 1.0 IndirectBranch messages should be emitted on next ingress port cycle, cz we can't know target pc earlier. So, lets generate indirectBranchHist on next instruction after indirect branch will happened. Also, we should aply same rule to all interrupt, exceptions, mret, sret instructuion. So, we can't use gen_updiscon as we would generate two messages instead of 1. So, we will create separate helper to deal with indirectBranchHist. Signed-off-by: Alexei Filippov --- hw/riscv/trace-encoder.c | 20 ++++++++++++++------ hw/riscv/trace-encoder.h | 18 ++++++++++++------ target/riscv/helper.h | 1 + target/riscv/insn_trans/trans_rvi.c.inc | 1 + target/riscv/op_helper.c | 2 ++ target/riscv/trace_helper.c | 27 +++++++++++++++++++++++---- target/riscv/translate.c | 10 ++++++++++ 7 files changed, 63 insertions(+), 16 deletions(-) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index 50d971336b..cfe6d5f7c8 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -771,7 +771,15 @@ void trencoder_set_first_trace_insn(Object *trencoder_= obj, uint64_t pc) uint8_t msg_size; bool is_branch_taken; =20 - g_assert(!trencoder->ntrace); + if (trencoder->ntrace) { + trencoder_send_indirect_branch_hist( + trencoder, + trencoder->pending_branch_trace.source_pc, + get_inst_len_at(trencoder->pending_branch_trace.source_pc), + trencoder->pending_branch_trace.target_pc, + trencoder->pending_branch_trace.type); + return; + } =20 if (trencoder->updiscon_pending) { trencoder_send_updiscon(trencoder, pc); @@ -942,11 +950,11 @@ void trencoder_trace_trap_insn(Object *trencoder_obj,= uint64_t curr_pc, uint8_t msg_size; =20 if (trencoder->ntrace) { - uint32_t curr_inst_len =3D get_inst_len_at(curr_pc); - uint32_t btype =3D is_interrupt ? BTYPE_INTERRUPT : BTYPE_EXCEPTIO= N; - - trencoder_send_indirect_branch_hist(trencoder, curr_pc, curr_inst_= len, - target_pc, btype); + trencoder->pending_branch_trace.type =3D is_interrupt ? BTYPE_INTE= RRUPT : + BTYPE_EXCEPT= ION; + trencoder->pending_branch_trace.source_pc =3D curr_pc; + trencoder->pending_branch_trace.target_pc =3D target_pc; + trencoder->trace_next_insn =3D true; return; } =20 diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index 9d2f1c162e..cb792a6c46 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -16,6 +16,17 @@ #include "cpu.h" =20 #define TRACE_R_MAX (0xFFF / 4) +typedef enum { + BTYPE_CONTROL_FLOW =3D 0, + BTYPE_EXCEPTION =3D 2, + BTYPE_INTERRUPT =3D 3, +} TraceBranchType; + +typedef struct NtraceIndirectBranch { + TraceBranchType type; + hwaddr source_pc; + hwaddr target_pc; +} NtraceIndirectBranch; =20 struct TraceEncoder { /*< private >*/ @@ -50,6 +61,7 @@ struct TraceEncoder { uint64_t last_addr_reported; uint64_t last_icnt_reset; uint64_t icnt_accumulated; + NtraceIndirectBranch pending_branch_trace; =20 uint64_t sync_cnt; }; @@ -60,12 +72,6 @@ typedef enum { BRANCH_TAKEN_UNCONDITIONAL =3D 2, } TraceBranchRes; =20 -typedef enum { - BTYPE_CONTROL_FLOW =3D 0, - BTYPE_EXCEPTION =3D 2, - BTYPE_INTERRUPT =3D 3, -} TraceBranchType; - typedef enum { CORRELATION_TRACE_DISABLED =3D 4, } TraceStopReason; diff --git a/target/riscv/helper.h b/target/riscv/helper.h index dcf2b74cb6..056a8abcf9 100644 --- a/target/riscv/helper.h +++ b/target/riscv/helper.h @@ -133,6 +133,7 @@ DEF_HELPER_6(csrrw_i128, tl, env, int, tl, tl, tl, tl) DEF_HELPER_2(trace_insn, void, env, i64) DEF_HELPER_3(trace_updiscon, void, env, tl, tl) DEF_HELPER_5(trace_branch, void, env, tl, tl, tl, int) +DEF_HELPER_3(trace_indirect_branch, void, env, tl, tl) =20 #ifndef CONFIG_USER_ONLY DEF_HELPER_1(sret, tl, env) diff --git a/target/riscv/insn_trans/trans_rvi.c.inc b/target/riscv/insn_tr= ans/trans_rvi.c.inc index 06fba108a8..cf8dc4a5f4 100644 --- a/target/riscv/insn_trans/trans_rvi.c.inc +++ b/target/riscv/insn_trans/trans_rvi.c.inc @@ -184,6 +184,7 @@ static bool trans_jalr(DisasContext *ctx, arg_jalr *a) } =20 gen_trace_updiscon(ctx); + gen_trace_indirect_branch(ctx, target_pc); =20 lookup_and_goto_ptr(ctx); =20 diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index 12fb0209f6..ded6d79193 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -354,6 +354,7 @@ target_ulong helper_sret(CPURISCVState *env) } =20 trencoder_trace_priv_change(cpu->trencoder, env->pc, prev_priv); + helper_trace_indirect_branch(env, env->pc, retpc); riscv_cpu_set_mode(env, prev_priv, prev_virt); =20 /* @@ -444,6 +445,7 @@ target_ulong helper_mret(CPURISCVState *env) } =20 trencoder_trace_priv_change(cpu->trencoder, env->pc, prev_priv); + helper_trace_indirect_branch(env, env->pc, retpc); riscv_cpu_set_mode(env, prev_priv, prev_virt); /* * If forward cfi enabled for new priv, restore elp status diff --git a/target/riscv/trace_helper.c b/target/riscv/trace_helper.c index d7763a998f..af36c01a02 100644 --- a/target/riscv/trace_helper.c +++ b/target/riscv/trace_helper.c @@ -35,10 +35,7 @@ void helper_trace_updiscon(CPURISCVState *env, target_ul= ong curr_pc, RISCVCPU *cpu =3D env_archcpu(env); TraceEncoder *te =3D TRACE_ENCODER(cpu->trencoder); =20 - if (te->ntrace) { - trencoder_send_indirect_branch_hist(te, curr_pc, curr_inst_len, en= v->pc, - BTYPE_CONTROL_FLOW); - } else { + if (!te->ntrace) { te->updiscon_pending =3D true; te->trace_next_insn =3D true; } @@ -51,6 +48,21 @@ void helper_trace_branch(CPURISCVState *env, target_ulon= g pc, =20 trencoder_report_branch(cpu->trencoder, pc, insn_len, offset, taken); } + +void helper_trace_indirect_branch(CPURISCVState *env, target_ulong curr_pc, + target_ulong target_pc) +{ + RISCVCPU *cpu =3D env_archcpu(env); + TraceEncoder *te =3D TRACE_ENCODER(cpu->trencoder); + + if (te->ntrace) { + te->pending_branch_trace.target_pc =3D target_pc; + te->pending_branch_trace.source_pc =3D curr_pc; + te->pending_branch_trace.type =3D BTYPE_CONTROL_FLOW; + te->trace_next_insn =3D true; + } +} + #else /* #ifndef CONFIG_USER_ONLY */ void helper_trace_insn(CPURISCVState *env, uint64_t pc) { @@ -68,4 +80,11 @@ void helper_trace_branch(CPURISCVState *env, target_ulon= g pc, { return; } + +void helper_trace_indirect_branch(CPURISCVState *env, hwaddr curr_pc, + hwaddr target_pc) +{ + return; +} + #endif /* #ifndef CONFIG_USER_ONLY*/ diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 781068ad84..3496c2a3d5 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -628,6 +628,16 @@ static void gen_trace_updiscon(DisasContext *ctx) gen_set_label(skip); } =20 +static void gen_trace_indirect_branch(DisasContext *ctx, TCGv target_pc) +{ + TCGLabel *skip =3D gen_new_label(); + TCGv curr_pc =3D tcg_constant_tl(ctx->base.pc_next); + + tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_trace_running, 0, skip); + gen_helper_trace_indirect_branch(tcg_env, curr_pc, target_pc); + gen_set_label(skip); +} + static void gen_trace_branch(int taken, target_ulong imm, target_ulong cur= _insn_len) { TCGLabel *skip =3D gen_new_label(); --=20 2.43.0 From nobody Thu Oct 22 19:27:19 2026 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=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1791555298; cv=none; d=zohomail.com; s=zohoarc; b=XpmCbIS+XpUIXYLF7+/DLdxy70tAAj57too88atuY7wFVdVDGNlMaZszz/+g9SCn76qG3K0HqsV88ucPMjF+sMXb7WU6wg3NUh5ECo9AkFpocDc/RizUgsPKgH3PzdWY+Hz1JF+UC1QUgLkl6ncAaWuBJ1WL2XTJ1H3lWdgq76o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791555298; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=4pGgxN+Tw3UJP0aDMKMF0q0oaqXAnf2qEf90fn7N98w=; b=By8WkxNByDOnqtgiJHi6S2kmMbz/KGTOxuW6PpCsi+y3Z1KpGyTNS14DdjdYbncNRCUvAXY3xWzzkhp4xxvWbBKUXB7wm/UqNGKArzMXAxQqgfzKZNKYGWSJcYjX0CZ/z//o4iXIhcNtPAMTh6QGOn4rw9lHZgCcos4b8gre/xI= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791555298898760.159518817834; Fri, 9 Oct 2026 07:14:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xFBMf-0004dv-Fv; Fri, 09 Oct 2026 10:14:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xFBH2-0003Ue-3U for qemu-devel@nongnu.org; Fri, 09 Oct 2026 10:08:41 -0400 Received: from mail-lf1-x135.google.com ([2a00:1450:4864:20::135]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xFBGv-0007zh-HW for qemu-devel@nongnu.org; Fri, 09 Oct 2026 10:08:33 -0400 Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-5ba35c0df4fso4283858e87.0 for ; Fri, 09 Oct 2026 07:08:28 -0700 (PDT) Received: from localhost (broadband-5-228-114-10.ip.moscow.rt.ru. [5.228.114.10]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5bcddeb5136sm653616e87.61.2026.10.09.07.08.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Oct 2026 07:08:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791554907; x=1792159707; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=4pGgxN+Tw3UJP0aDMKMF0q0oaqXAnf2qEf90fn7N98w=; b=d9Iye2ohst1q+TFj7BdgJ4P734DvXkJYPd9EAmWUVb9tVyyuwCl45icdmlZU6BRxji IyaM6ffIAK5Qab2/sPZ/QtD+HLK1XQuZOR3KsAYIl9noTjQL26xrpR6TbvsqPQ1+4L9Y SMrW+lzSnor9YHA7j9nmkpeyecgeU2GEoIrhj0SsgO14fE9dq0kb/0DXT6NSwmDSHlLy OdXY7hu+yz0Z8/CGAk3CUP1iBckHd+Ds5WZi6xolMCt79RaLbw5Yeeql8dyc5w0pb6x2 iZP5PaOhpkTaww5FuoGRKxnYz0vfCMsGtuv2M9AuuUpOdMGr4tU+/x0iCunDiQG+sexc fe2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791554907; x=1792159707; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=4pGgxN+Tw3UJP0aDMKMF0q0oaqXAnf2qEf90fn7N98w=; b=q42GpGSxt5bXpHmxYz9v4RiMbKzbfWlnC7ytX3xErPEP8TK7SXTpe7XhugMYJxRbf/ PHtXbN5rcC/VRfzkOfexDGf4coId58E7c4llU9l2lARQmR8lBP7oK+hQs6eq/ULNMJvJ 2+n1LMcRtV46PQ1u13iCYGl68VQOMi3Rd2+Vmh0eL5JgFYKVaVt9/ngLtBt9VxFaT7fX W6bDEB0lcL+XhWiSC+wzMPWUUkq0iwG/6lPEMtG5QODlHSUJwG4pmaVdp7hPJr7UwJe8 kGt6bfUz25Vd8kXik4jsyEtH0TK6Fc938Sn3k7Dtgh6k6AHZ0jDKsEsoZBMWv6xQf/NW UZZQ== X-Gm-Message-State: AFq9FYJyrzv7QQnwbna+vx2A1ZFb+aqPnyTsZpFrDreSsIxhUMTA5Ks3 Zqo/Om1lokDeYVTKOYBW4Qb7j2ZfXAr26NQ7zcJtVEC6WSIWM7YZJdb7N5R6GiRzAgM= X-Gm-Gg: AYBFou1JSeusfchtf0eEQbp3SFOxS3LFyihwoRlDlEhEmB0wTDbB6bPI7/lFzFiAoFE xqlpY1Fk+9fQmotoAcsGqTSLYFDC5Ioeki8O8+q5Qjt1K3YN4seqwxLcdzm85O8Igm4AEgbOU0d +fapaPTFLOae3fIt0KYVj4RK2sf+5NKISJJSYQm6mICrYkdQN6Zr4zjR5OrQLkO8AHU/E+mhjOu q9DGAhxGq6ubMB8uonSjH2KP10KiHOjHg5eCgDwwJ9c5ASGoDxEv44Yz8B77luvC1oIYTm5kWmy g3zjkDenl/3NUMM9boGsirypXGdNjBIHMfunaYgAsFpl4+ntsY3br2TZsCQ/dnayotQRES6fJcQ WMIcfOAECFRN/95ZFBfBz3kAuT+XInlljL55/UwVT7rmXXUecRU/qGkuwiZLaNmZUtP9wphtBJD +jdNxzL+0QaEzN8zY4dQy/h7idps5mRa/pnXyKcc68NjN3rxj7eQJSLYiT9tIQwFmB+QzpNHpWj 1+Lz1h0jqWXixfEHnLjWo5/dolnlNQiwST0rg== X-Received: by 2002:a05:6512:308b:b0:5bc:b0f3:8a40 with SMTP id 2adb3069b0e04-5bcde6bf6a5mr700877e87.11.1791554907132; Fri, 09 Oct 2026 07:08:27 -0700 (PDT) From: Konstantin Semichastnov Date: Fri, 09 Oct 2026 17:03:05 +0300 Subject: [PATCH 4/6] hw/riscv/trace-encoder.c: add N-trace filtering definitions MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261009-upstream-ntrace_filter-v1-4-8f061c9b24da@gmail.com> References: <20261009-upstream-ntrace_filter-v1-0-8f061c9b24da@gmail.com> In-Reply-To: <20261009-upstream-ntrace_filter-v1-0-8f061c9b24da@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Alexei Filippov , Grigoriy Bereznyakov , Konstantin Semichastnov X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=13030; i=antikostya2@gmail.com; h=from:subject:message-id; bh=otevDC+oicUZMI73k4N4L3NEd6TZrB4pu4+a+jRjCZU=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqyPQWTQA/XjuFlxBGGnlBPtSg+aD9qYe8Mix8o FUmv2bbkqWJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCasj0FgAKCRBIiqVupVDe drsmD/9cnR5RDit7xofW8iwvRKYwsomOEeIyAyY4g5wO66Xk4LLmxtQTKL0/NeihrSnsjlJzRdm 1mVHsuIu3TWFgammvJHxk5hiPpXvQyKAG2luMiuTVEImYFJVJhS7ehag43ovZg7m9out7LtYwr5 hXIvsfyjdgM0IRAG+8+IyiJHGuhqlCoePulh/hWl3FQESJ2iOt4BPWXfEXvfjeGK5J+BjVJ6tmh Je+xFp0HwS1jHyR+rTBwUjmVlI/II4sSSMSAooiNSNnBa0s2RL63uR2AxWHZ7kgT5Di+qtzjoPZ JPgz2r2o4R4vuA9HgCaKTr0Hjx/UPbimpPP6/w2un9NjUGXdrIqpzcCUyYBFQ6uLcBh8xqRvchE 2a8kzThxQrRbUtJ2i5mLZCC5QdljvKq+/mauBJdGYH4UjAE2ki0fajlJOrPZerH/QlUy82ZRtew 01G/dQ6V0YG4jEFR/Q9z845aK4ZG8sagrEpNdNAafGaEoA3YXMqMrRRyVEyScmd8pAs76MRMFnV ELg3uLuLldh1WtoD6S4lVEhMjp8S+fxAEc0DJNBaYF28tFBr0LtDLQlr2LTcjOJLHenfq4AZNq3 PKVcBXDU2KAvGbsGKgO82gfHOi59NMWCp1cwazRy/Mefcr+kyooXVnw2ez7byBVzfTHk6wvLQZr tiUR6tF7VW0gMEg== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::135; envelope-from=antikostya2@gmail.com; helo=mail-lf1-x135.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1791555301079158500 Implemented N-Trace filtering registers definitions: trTeInstFilters, trTeFilterEnable, trTeFilterMatchPrivilege, trTeFilterMatchEcause, trTeFilterMatchInterrupt, trTeFilterMatchChoicePrivilege, trTeFilterMatchValueInterrupt, trTeFilterMatchChoiceEcauseLow, trTeFilterMatchChoiceEcauseHigh. Also implemented macroses to let life easier with filters because each filter and comporator, which could be 16 of each of them, could exist. Signed-off-by: Konstantin Semichastnov Signed-off-by: Alexei Filippov --- hw/riscv/trace-encoder.c | 232 +++++++++++++++++++++++++++++++++++++++++++= +++- hw/riscv/trace-encoder.h | 38 ++++++++ 2 files changed, 269 insertions(+), 1 deletion(-) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index cfe6d5f7c8..e3286400b0 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -147,6 +147,76 @@ REG32(TR_TE_INST_FEATURES, 0x8) #define R_TR_TE_INST_FEATURES_RSVP_BITS (MAKE_64BIT_MASK(32, 32) | \ R_TR_TE_INST_FEATURES_RSVP1_MASK) =20 +/* + * trTeInstFilters register fields + */ +REG32(TR_TE_INST_FILTERS, 0xc) + FIELD(TR_TE_INST_FILTERS, INST_FILTERS, 0, 16) + FIELD(TR_TE_INST_FILTERS, RSVP, 16, 16) + +#define R_TR_TE_INST_FILTERS_RSVP_BITS (MAKE_64BIT_MASK(32, 32) | \ + R_TR_TE_INST_FILTERS_RSVP_MASK) + +/* + * trTeFilterControl register fields + */ +REG32(TR_TE_FILTER_CONTROL, 0x400) + FIELD(TR_TE_FILTER_CONTROL, ENABLE, 0, 1) + FIELD(TR_TE_FILTER_CONTROL, MATCH_PRIVILEGE, 1, 1) + FIELD(TR_TE_FILTER_CONTROL, MATCH_ECAUSE, 2, 1) + FIELD(TR_TE_FILTER_CONTROL, MATCH_INTERRUPT, 3, 1) + FIELD(TR_TE_FILTER_CONTROL, MATCH_COMP1, 4, 1) + FIELD(TR_TE_FILTER_CONTROL, COMP1, 5, 3) + FIELD(TR_TE_FILTER_CONTROL, MATCH_COMP2, 8, 1) + FIELD(TR_TE_FILTER_CONTROL, COMP2, 9, 3) + FIELD(TR_TE_FILTER_CONTROL, MATCH_COMP3, 12, 1) + FIELD(TR_TE_FILTER_CONTROL, COMP3, 13, 3) + FIELD(TR_TE_FILTER_CONTROL, MATCH_IMPDEF, 16, 1) + FIELD(TR_TE_FILTER_CONTROL, RSVP1, 17, 7) + FIELD(TR_TE_FILTER_CONTROL, MATCH_DTYPE, 24, 1) + FIELD(TR_TE_FILTER_CONTROL, MATCH_DSIZE, 25, 1) + FIELD(TR_TE_FILTER_CONTROL, RSVP2, 26, 6) + +#define R_TR_TE_FILTER_CONTROL_RSVP_BITS (MAKE_64BIT_MASK(32, 32) | = \ + R_TR_TE_FILTER_CONTROL_RSVP1_MAS= K | \ + R_TR_TE_FILTER_CONTROL_RSVP2_MAS= K) + +/* + * trTeFilterMatchInst register fields + */ +REG32(TR_TE_FILTER_MATCH_INST, 0x404) + FIELD(TR_TE_FILTER_MATCH_INST, CHOICE_PRIVILEGE, 0, 8) + FIELD(TR_TE_FILTER_MATCH_INST, VALUE_INTERRUPT, 8, 1) + FIELD(TR_TE_FILTER_MATCH_INST, RSVP1, 9, 23) + +#define R_TR_TE_FILTER_MATCH_INST_RSVP_BITS (MAKE_64BIT_MASK(32, 32) | \ + R_TR_TE_FILTER_MATCH_INST_RSV= P1_MASK) + +/* + * trTeFilterMatchEcause register fields + */ +REG32(TR_TE_FILTER_MATCH_ECAUSE_LOW, 0x408) + FIELD(TR_TE_FILTER_MATCH_ECAUSE_LOW, CHOICE_ECAUSE_LOW, 0, 32) + +REG32(TR_TE_FILTER_MATCH_ECAUSE_HIGH, 0x40c) + FIELD(TR_TE_FILTER_MATCH_ECAUSE_HIGH, CHOICE_ECAUSE_HIGH, 0, 32) + +/* + * trace encoder filter register access macros + */ +#define FILTER_FIELD_EX32(value, filter, reg, field) ({ \ + g_assert((filter) >=3D 0 && (filter) < TRACE_FILTERS_MAX); \ + FIELD_EX32(value + (filter) * 0x20, reg, field); \ +}) + +#define FILTER_FIELD_DP32(value, filter, reg, field) ({ \ + g_assert((filter) >=3D 0 && (filter) < TRACE_FILTERS_MAX); \ + FIELD_DP32(value + (filter) * 0x20, reg, field); \ +}) + +#define GET_FILTER_IDX(addr, name) \ + ((addr - A_ ## name) / 0x20) + static uint32_t trencoder_read_reg(TraceEncoder *te, uint32_t reg_addr) { hwaddr addr =3D te->dest_baseaddr + reg_addr; @@ -379,6 +449,119 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg= , uint64_t val) } } =20 +static uint64_t trencoder_te_inst_filters_prew(RegisterInfo *reg, uint64_t= val) +{ + TraceEncoder *te =3D TRACE_ENCODER(reg->opaque); + te->inst_filters_mask =3D FIELD_EX32(val, TR_TE_INST_FILTERS, INST_FIL= TERS); + + return te->inst_filters_mask; +} + +static uint64_t trencoder_te_filters_control_hardwired_vals(uint64_t val, + uint32_t reg_i= dx) +{ + val =3D FIELD_DP32(val, TR_TE_FILTER_CONTROL, MATCH_COMP1, 0); + val =3D FIELD_DP32(val, TR_TE_FILTER_CONTROL, COMP1, 0); + val =3D FIELD_DP32(val, TR_TE_FILTER_CONTROL, MATCH_COMP2, 0); + val =3D FIELD_DP32(val, TR_TE_FILTER_CONTROL, COMP2, 0); + val =3D FIELD_DP32(val, TR_TE_FILTER_CONTROL, MATCH_COMP3, 0); + val =3D FIELD_DP32(val, TR_TE_FILTER_CONTROL, COMP3, 0); + val =3D FIELD_DP32(val, TR_TE_FILTER_CONTROL, MATCH_IMPDEF, 0); + val =3D FIELD_DP32(val, TR_TE_FILTER_CONTROL, MATCH_DTYPE, 0); + val =3D FIELD_DP32(val, TR_TE_FILTER_CONTROL, MATCH_DSIZE, 0); + + return val; +} + +static uint64_t trencoder_te_filters_control_prew(RegisterInfo *reg, + uint64_t val) +{ + TraceEncoder *te =3D TRACE_ENCODER(reg->opaque); + uint32_t idx =3D GET_FILTER_IDX(reg->access->addr, TR_TE_FILTER_CONTRO= L); + + val =3D trencoder_te_filters_control_hardwired_vals(val, idx); + + te->filters_info[idx].enabled =3D FIELD_EX32(val, TR_TE_FILTER_CONTROL= , ENABLE); + + te->filters_info[idx].match_priv =3D FIELD_EX32(val, + TR_TE_FILTER_CONTROL, + MATCH_PRIVILEGE); + te->filters_info[idx].match_ecause =3D FIELD_EX32(val, + TR_TE_FILTER_CONTROL, + MATCH_ECAUSE); + te->filters_info[idx].match_int =3D FIELD_EX32(val, + TR_TE_FILTER_CONTROL, + MATCH_INTERRUPT); + + return val; +} + +static uint64_t trencoder_te_filters_match_inst_prew(RegisterInfo *reg, + uint64_t val) +{ + TraceEncoder *te =3D TRACE_ENCODER(reg->opaque); + uint32_t idx =3D GET_FILTER_IDX(reg->access->addr, TR_TE_FILTER_MATCH_= INST); + + te->filters_info[idx].match_choice_priv =3D FIELD_EX32(val, + TR_TE_FILTER_MATC= H_INST, + CHOICE_PRIVILEGE); + te->filters_info[idx].match_value_int =3D FIELD_EX32(val, + TR_TE_FILTER_MATCH_= INST, + VALUE_INTERRUPT); + + return val; +} + +static uint64_t trencoder_te_filters_match_ecause_low_prew(RegisterInfo *r= eg, + uint64_t val) +{ + TraceEncoder *te =3D TRACE_ENCODER(reg->opaque); + uint32_t idx =3D GET_FILTER_IDX(reg->access->addr, TR_TE_FILTER_MATCH_= ECAUSE_LOW); + + te->filters_info[idx].match_choice_ecause =3D + deposit64(te->filters_info[idx].match_choice_ecause, 0, 32, val); + + return val; +} + +static uint64_t trencoder_te_filters_match_ecause_high_prew(RegisterInfo *= reg, + uint64_t val) +{ + TraceEncoder *te =3D TRACE_ENCODER(reg->opaque); + uint32_t idx =3D GET_FILTER_IDX(reg->access->addr, TR_TE_FILTER_MATCH_= ECAUSE_HIGH); + + te->filters_info[idx].match_choice_ecause =3D + deposit64(te->filters_info[idx].match_choice_ecause, 32, 32, val); + + return val; +} + +#define DEFINE_FILTER_RAI(_name, _filter, ...) \ +{ \ + .name =3D # _name # _filter, \ + .addr =3D A_ ## _name + 0x20 * (_filter), \ + __VA_ARGS__ \ +} + +#define DEFINE_FILTER_ARRAY_RAI(_name, ...) \ + DEFINE_FILTER_RAI(_name, 0, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 1, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 2, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 3, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 4, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 5, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 6, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 7, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 8, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 9, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 10, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 11, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 12, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 13, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 14, __VA_ARGS__), \ + DEFINE_FILTER_RAI(_name, 15, __VA_ARGS__) + + static RegisterAccessInfo trencoder_regs_info[] =3D { { .name =3D "TR_TE_CONTROL", .addr =3D A_TR_TE_CONTROL, .rsvd =3D R_TR_TE_CONTROL_RSVP_BITS, @@ -395,8 +578,36 @@ static RegisterAccessInfo trencoder_regs_info[] =3D { { .name =3D "TR_TE_INST_FEATURES", .addr =3D A_TR_TE_INST_FEATURES, .rsvd =3D R_TR_TE_INST_FEATURES_RSVP_BITS, .reset =3D R_TR_TE_INST_FEATURES_NO_ADDR_DIFF_MASK, - .pre_write =3D trencoder_te_inst_feature_prew, + .pre_write =3D &trencoder_te_inst_feature_prew, + }, + { + .name =3D "TR_TE_INST_FILTERS", .addr =3D A_TR_TE_INST_FILTERS, + .rsvd =3D R_TR_TE_INST_FILTERS_RSVP_BITS, + .reset =3D 0x0, + .pre_write =3D &trencoder_te_inst_filters_prew, }, + DEFINE_FILTER_ARRAY_RAI( + TR_TE_FILTER_CONTROL, + .rsvd =3D R_TR_TE_FILTER_CONTROL_RSVP_BITS, + .reset =3D 0x0, + .pre_write =3D &trencoder_te_filters_control_prew, + ), + DEFINE_FILTER_ARRAY_RAI( + TR_TE_FILTER_MATCH_INST, + .rsvd =3D R_TR_TE_FILTER_MATCH_INST_RSVP_BITS, + .reset =3D 0x0, + .pre_write =3D &trencoder_te_filters_match_inst_prew, + ), + DEFINE_FILTER_ARRAY_RAI( + TR_TE_FILTER_MATCH_ECAUSE_LOW, + .reset =3D 0x0, + .pre_write =3D &trencoder_te_filters_match_ecause_low_prew, + ), + DEFINE_FILTER_ARRAY_RAI( + TR_TE_FILTER_MATCH_ECAUSE_HIGH, + .reset =3D 0x0, + .pre_write =3D &trencoder_te_filters_match_ecause_high_prew, + ), }; =20 static uint64_t trencoder_read(void *opaque, hwaddr addr, unsigned size) @@ -436,6 +647,17 @@ static const MemoryRegionOps trencoder_ops =3D { }, }; =20 +static void trencoder_reset_filter(FiltersInfo *filter) +{ + filter->enabled =3D 0; + filter->match_priv =3D 0; + filter->match_ecause =3D 0; + filter->match_int =3D 0; + filter->match_choice_priv =3D 0; + filter->match_value_int =3D 0; + filter->match_choice_ecause =3D 0; +} + static void trencoder_reset(DeviceState *dev) { TraceEncoder *te =3D TRACE_ENCODER(dev); @@ -454,6 +676,14 @@ static void trencoder_reset(DeviceState *dev) te->branch_map =3D 0; te->branches =3D 0; te->sync_cnt =3D 0; + te->inst_filters_mask =3D 0; + + te->filter_state =3D IDLE_FILTER; + te->exec_state =3D DEFAULT_EXEC; + + for (int i =3D 0; i < ARRAY_SIZE(te->filters_info); i++) { + trencoder_reset_filter(&te->filters_info[i]); + } } =20 static void trencoder_realize(DeviceState *dev, Error **errp) diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index cb792a6c46..f4196e7208 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -15,7 +15,35 @@ #include "qom/object.h" #include "cpu.h" =20 +#include "rv-trace-messages.h" + +typedef enum { + DEFAULT_EXEC =3D 0, + INTERRUPT_EXEC =3D 1, + EXCPTION_EXEC =3D 2, +} FilterExecutionState; + +typedef enum { + IDLE_FILTER =3D 0, + PROG_TRACE_SYNC_PENDING =3D 1, + PROG_TRACE_CORRELATION_PENDING =3D 2, +} FilterTracingState; + +typedef struct FiltersInfo { + bool enabled; + bool match_priv; + bool match_ecause; + bool match_int; + + uint8_t match_choice_priv; + uint8_t match_value_int; + + uint64_t match_choice_ecause; +} FiltersInfo; + #define TRACE_R_MAX (0xFFF / 4) +#define TRACE_FILTERS_MAX (16) + typedef enum { BTYPE_CONTROL_FLOW =3D 0, BTYPE_EXCEPTION =3D 2, @@ -64,8 +92,18 @@ struct TraceEncoder { NtraceIndirectBranch pending_branch_trace; =20 uint64_t sync_cnt; + /* only instruction filters supported by now */ + uint16_t inst_filters_mask; + FiltersInfo filters_info[TRACE_FILTERS_MAX]; + FilterTracingState filter_state; + FilterExecutionState exec_state; }; =20 +typedef enum { + INSTRUCTION_FILTERING =3D 0, + DATA_FILTERING =3D 1, +} FilteringType; + typedef enum { BRANCH_NOT_TAKEN =3D 0, BRANCH_TAKEN_CONDITIONAL =3D 1, --=20 2.43.0 From nobody Thu Oct 22 19:27:19 2026 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=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1791555318; cv=none; d=zohomail.com; s=zohoarc; b=YPJ0HBkHYJE/vegmSMRV29ShT8V7p6D9SeoCh7yF6Yzil/QVH6OZYTP8f5XQvnMkfndgE+hizSyi7Z3cENVHD7JiZqQHnMOiCGoW9bRuYZgf/jzFSVoUubKDg+R41lYDzBuxtU77Ci2iUemFK4lhhWXZNHPkRDB4vEFBEnJJWWg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791555318; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YmasiWDHokpTxAYFq7EtqMBhrRWY6Yp/YR8Vpb+J6Mk=; b=EPme6MD4rVSZJSldkdiuQaiVnc/RpYsgl7c1nOuPbFpYT6NKTGNklgqh7zZTYhfxgWSKboO9ZSVx2Li4kCgrgkIDdBgU52Cb38knsE/Bz0LYBytSwyyka7F7AzzmgwbLaIz17ADNJF+4Lhilq4obwkEBZj3Jt50VgDFGHUw9ptg= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791555318011677.7928402298389; Fri, 9 Oct 2026 07:15:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xFBN6-0004mT-Ev; Fri, 09 Oct 2026 10:14:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xFBH6-0003Ur-10 for qemu-devel@nongnu.org; Fri, 09 Oct 2026 10:08:47 -0400 Received: from mail-lf1-x131.google.com ([2a00:1450:4864:20::131]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xFBH1-0007zt-US for qemu-devel@nongnu.org; Fri, 09 Oct 2026 10:08:39 -0400 Received: by mail-lf1-x131.google.com with SMTP id 2adb3069b0e04-5bcbb82dbadso4059326e87.2 for ; Fri, 09 Oct 2026 07:08:35 -0700 (PDT) Received: from localhost (broadband-5-228-114-10.ip.moscow.rt.ru. [5.228.114.10]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5bcddeced0bsm658820e87.83.2026.10.09.07.08.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Oct 2026 07:08:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791554914; x=1792159714; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YmasiWDHokpTxAYFq7EtqMBhrRWY6Yp/YR8Vpb+J6Mk=; b=k04bB1bJ4hjnqbCwzWCROpeCBco3QhH1ikeDRhsf5mzJrgxi1RUfz+EdzPKExn9IV8 9RMY/1N5nGM406TZ5eiC23iiCpuhwEsX2u0olePZFSsJQmFRwWpt4wgDaLR3NN5iKjLe 3AKK3/oN0pENS8M2MiEjLV/AYj7lBAczy/uL38ntNYoXbrOwkCa5Jn7wXzuyghGTTKJr xntc9St+TvMjPmVGQloK3UNgc7eHrc7ci6bWCt4l1DNkEesSkj3vf7ynucCiIom2rclK gYfnOACPSJyIQKyH4Dnby7tHP403dFx1n0Uctw4yjIV4lbuJ8WAqRWbwLCp20rnNNBYL txCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791554914; x=1792159714; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=YmasiWDHokpTxAYFq7EtqMBhrRWY6Yp/YR8Vpb+J6Mk=; b=jk3MqgwFW4QOe2E5GKrBU3qBOxrPwvGNl82c/cpWn7QdBosJFEIqv+CqPgrmHE9nxv LB3GXQfjIjfkhIiUjbeaedSFTW02e96Oo330Zf3K17qB31UC1NbnyyjwbwX+dM8SKZNh euHhExh8esPSoCFWLjjj4zL1OaS4W17YcSHuEFeWmLNdIJru12Jgi95gTi8jw8cHRpDg YCvZA0ONhZfWzN4R7d2W4+t1qORGEX1IF1Nha3Sedlp2dr5XftQ4n12bh2Om+P9FNtzt RyFiPwJ1Yzd/0BEthoRAzkOEYvp7QGqybaRpuNR2r2XzSi/+lo+jCjS4YeDmOqmv7Wjs NPUA== X-Gm-Message-State: AFq9FYIewE2JksmAp83/+spKjgIDdWjmh8wbVQlxM1WWrC7HliJaD+PH OXFN4xH4MYNn6+wntAM2cnbeH/3ROmGOEUcNlMx+GLSV75sYRqgrXRfzxX202NDQgoA= X-Gm-Gg: AYBFou0nAQKLBnqowosfzZMYIzSoRIUS32XR0t5631WWgLxruQf+AXkhpbAywGQSL38 2+41fuMW5Ygn4Qc1PWYgxm8NpnyBed3y7Xi/x3rM5hxWnywcodrvyqcCkHJ0E622iVJqNP8b+VG /2UqaAGGj8BA+oNlQ+3oskIRGbs+DFLXGKOsr3Y/m/mMQUciSQc2TW+iQGfNNBGh9ZUv10P6ocx fbidr5XlW4zrngZ63huJAb2GM6KZxc7gRhI4vCxZw5KwjZdJtaKCUdjk87VBTy1KHu0I0tvNuN7 IlslMjVIQKe6a+kQqBwYz0X1bWCQ7tXfGA8tCaEl4pMdAkbvL8npvzu9UzPPZ31ONqmEVGhHvST iZAJjTvRjDifN974nKFOgMTPu9uPJ5jmVLtFje1J/ZxHcRdwlKEbIxEQCwnqMwgBWWwAfcOSanr 5UuZcezgi2FeiX2iM5bbPHnRVfn8cTw1TDzzCbLOvhp/L3MO+j0BLW3KLqo6AHXR3qo/Z/XaIZm BdjadOGXjIqf7/45KmvjSrXDOLicdmOxj2NEdnxdSJn/ffn X-Received: by 2002:a05:6512:110e:b0:5bc:c447:abe with SMTP id 2adb3069b0e04-5bcde6c9f20mr874796e87.25.1791554913999; Fri, 09 Oct 2026 07:08:33 -0700 (PDT) From: Konstantin Semichastnov Date: Fri, 09 Oct 2026 17:03:06 +0300 Subject: [PATCH 5/6] hw/riscv, target/riscv: support initial N-trace filtering MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261009-upstream-ntrace_filter-v1-5-8f061c9b24da@gmail.com> References: <20261009-upstream-ntrace_filter-v1-0-8f061c9b24da@gmail.com> In-Reply-To: <20261009-upstream-ntrace_filter-v1-0-8f061c9b24da@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Alexei Filippov , Grigoriy Bereznyakov X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=16951; i=antikostya2@gmail.com; h=from:subject:message-id; bh=XewiYyTAUTfzV7L6+/1sQn06Jf6ZmUCGa/wbBHMzzcY=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqyPQWgECmCeD5obJ+y6YwTP4T+9iIw4oIHPGhh FgJYAhpS1SJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCasj0FgAKCRBIiqVupVDe dqhgD/9fVYs/Luo+T2t9fUIjtewjzakvBmsDqk3OZL/Qzu9d2Y0KJ8Fn0mVr65RmzfStbqjPLpM jXekqPZZcVNaLQ4GBLM+bJ4SVBpDZcO5HvzcUS8FuRNvOj+oIsF7MVKvYJXfyjwNlM7F7S43SUD pC8r7tFFWgDWc4gnLqBHJi2R2FPTBHPpVovMguojCmg/gYAwgzKz/VEkwwFxNsgx97Gl1DmoU48 6Zi9WWY7xENDsAXgvtFklIWjdTx+RkFbli+NqqUC8Fdi2tZkKoTqdrq/Mw3j8CoNL+I05Sx4Q/g 8FPb17uJupsYhlylg2PiCsnm+701mvxUlRVzLdnZT3kY2OHFRDx8UT+aa9v/AeKr3A/pOf6AAtE QAG6rMz0tKon6ozJOZOnw9OzpFDYOgfyJCvgB+udCLbvNqgS5DEVPfGBewj/TE5mLLffN+mhoNy 1gmaC2EWrs/K2fZcGMKINUYzaQHx51UnxNGPT1ia8Ehs+aR/z5vdiyWZ4F9M9JJIlE+gD+GTyOl Tlyh28J9U/gv4em+2IUcb2uQSiDZMj1th5CqvDefexdL6FQyvB4lDa+8g5h+Qw93czkNV8w7UKD NRsCO6KN/EHeFdVEOi2mmI3lD0MSH5AP+tLU1lS1Oce7jea/r7DKh6UOEjVnY4ONVeUbirFI1ao +1J5PWMCUmY5+WA== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::131; envelope-from=antikostya2@gmail.com; helo=mail-lf1-x131.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1791555321559158500 Signed-off-by: Alexei Filippov Signed-off-by: Bereznyakov Grigoriy --- hw/riscv/trace-encoder.c | 209 ++++++++++++++++++++++++++++++++++++++++= +--- hw/riscv/trace-encoder.h | 7 +- target/riscv/cpu_helper.c | 8 +- target/riscv/op_helper.c | 6 +- target/riscv/trace_helper.c | 11 ++- 5 files changed, 222 insertions(+), 19 deletions(-) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index e3286400b0..e42c92d03a 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -416,9 +416,13 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg,= uint64_t val) te->trace_next_insn =3D false; =20 if (te->ntrace) { - uint32_t inst_len =3D get_inst_len_at(env->pc); - trencoder_send_prog_trace_correlation(OBJECT(te), env->pc, ins= t_len, - CORRELATION_TRACE_DISABL= ED); + if (trencoder_filters_match(te, INSTRUCTION_FILTERING, + env->pc, env->pc)) { + uint32_t inst_len =3D get_inst_len_at(env->pc); + trencoder_send_prog_trace_correlation(OBJECT(te), env->pc, + inst_len, + CORRELATION_TRACE_DI= SABLED); + } } =20 te->trace_running =3D false; @@ -442,7 +446,10 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg,= uint64_t val) * like E-Trace. So we need to send message here, instead of * using te->trace_next_insn */ - trencoder_send_prog_trace_sync(OBJECT(te), env->pc); + if (trencoder_filters_match(te, INSTRUCTION_FILTERING, + env->pc, env->pc)) { + trencoder_send_prog_trace_sync(OBJECT(te), env->pc); + } } else { te->trace_next_insn =3D true; } @@ -1002,13 +1009,32 @@ void trencoder_set_first_trace_insn(Object *trencod= er_obj, uint64_t pc) bool is_branch_taken; =20 if (trencoder->ntrace) { - trencoder_send_indirect_branch_hist( - trencoder, - trencoder->pending_branch_trace.source_pc, - get_inst_len_at(trencoder->pending_branch_trace.source_pc), - trencoder->pending_branch_trace.target_pc, - trencoder->pending_branch_trace.type); - return; + if (trencoder->filter_state =3D=3D PROG_TRACE_SYNC_PENDING) { + if (trencoder_filters_match(trencoder, INSTRUCTION_FILTERING, + pc, pc)) { + trencoder_send_prog_trace_sync(OBJECT(trencoder), pc); + return; + } + } + + if (trencoder->filter_state =3D=3D PROG_TRACE_CORRELATION_PENDING)= { + if (!trencoder_filters_match(trencoder, INSTRUCTION_FILTERING, + pc, pc)) { + trencoder_send_prog_trace_correlation(OBJECT(trencoder), + trencoder->pending_branch_trace.source_pc, + get_inst_len_at(trencoder->pending_branch_trace.so= urce_pc), + CORRELATION_TRACE_DISABLED); + return; + } + + trencoder_send_indirect_branch_hist( + trencoder, + trencoder->pending_branch_trace.source_pc, + get_inst_len_at(trencoder->pending_branch_trace.source= _pc), + trencoder->pending_branch_trace.target_pc, + trencoder->pending_branch_trace.type); + return; + } } =20 if (trencoder->updiscon_pending) { @@ -1029,6 +1055,146 @@ static uint64_t rv_ntrace_encode_faddr(uint64_t pc) return pc >> 1ul; } =20 +void riscv_trencoder_set_filter_exec_state(CPURISCVState *env, FilterExecu= tionState state) +{ + RISCVCPU *cpu =3D env_archcpu(env); + + if (!cpu->trencoder) { + return; + } + + TraceEncoder *te =3D TRACE_ENCODER(cpu->trencoder); + + te->exec_state =3D state; +} + +static uint64_t xcause_as_bitmask(TraceEncoder *te, TracePrivLevel priv, b= ool *async) +{ + RISCVCPU *cpu =3D te->cpu; + CPURISCVState *env =3D &cpu->env; + + uint64_t xcause =3D priv =3D=3D PRV_M ? env->mcause : env->scause; + uint64_t mxlen =3D 16 << riscv_cpu_mxl(env); + + /* extract interrupt bit from cause value */ + *async =3D xcause >> (mxlen - 1); + + /* remove interrupt bit from cause value */ + xcause &=3D ~BIT(mxlen - 1); + + /* convert cause index to bitmask */ + xcause =3D 1 << xcause; + + return xcause; +} + +static bool trencoder_ntrace_filter_match(TraceEncoder *te, FiltersInfo *f= ilter, + TracePrivLevel priv) +{ + /* If filter disabled - act like we do not filter anything */ + if (!filter->enabled) { + return true; + } + + if (filter->match_priv) { + if (!(filter->match_choice_priv & (1 << priv))) { + return false; + } + } + + if (filter->match_ecause) { + /* VU, VS, D modes are not supported by now */ + bool async =3D false; + uint64_t xcause_bit =3D xcause_as_bitmask(te, priv, &async); + if (!async && (!(filter->match_choice_ecause & xcause_bit) || + te->exec_state !=3D EXCPTION_EXEC)) { + return false; + } + } + + if (filter->match_int) { + /* RISC-V-Trace-Control-Interface Table25: + * When trTeFilterMatchInterrupt field for filter #i is set, + * match itype of 2 or 1 depending on whether this bit is 1 + * or 0 respectively. + * itype 2 =3D=3D Interrupt + * itype 1 =3D=3D Exception + */ + if (filter->match_value_int) { + if (te->exec_state !=3D INTERRUPT_EXEC) { + return false; + } + } else { + if (te->exec_state !=3D EXCPTION_EXEC) { + return false; + } + } + } + + return true; +} + +static bool trencoder_ntrace_filters_match(TraceEncoder *te, FilteringType= type, + TracePrivLevel priv, hwaddr pc) +{ + uint16_t mask =3D te->inst_filters_mask; + + /* Only Instruction Filtering supported for now */ + g_assert(!type); + + for (int i =3D 0; i < ARRAY_SIZE(te->filters_info); i++) { + if (mask & BIT(i)) { + /* Accorfing to RISC-V Trace Control Interface spec 1.0 chapte= r 6.3, + * if more than one bit set in trTeInstFilters than condition = inside + * filters applies as logical AND but between filters as logic= al OR. + */ + if (!trencoder_ntrace_filter_match(te, &te->filters_info[i], p= riv)) { + return false; + } + } + } + + return true; +} + +/* Return falue determine we should or shouldn't emit message */ +bool trencoder_filters_match(TraceEncoder *te, FilteringType type, + hwaddr curr_pc, hwaddr target_pc) +{ + RISCVCPU *cpu =3D te->cpu; + CPURISCVState *env =3D &cpu->env; + + if (!te->trace_running) { + return false; + } + + if (te->ntrace) { + + if (trencoder_ntrace_filters_match(te, type, env->priv, curr_pc)) { + return true; + } + + /* We split Filter state into 3 states, so: + * IDLE_FILTER when no trace messages should be emitted, + * PROG_TRACE_SYNC_PENDING when control flow changes, system state= changes + * and we should check does we realy need to start tracing on sour= ce pc + * (from where control flow changes) and target_pc(to where we cha= nge control + * flow). + * PROG_TRACE_CORRELATION_PENDING its state means that tracing alr= eady started + * and we should check, does a control flow disable trace or not. + */ + if (target_pc !=3D curr_pc && te->filter_state =3D=3D IDLE_FILTER)= { + te->filter_state =3D PROG_TRACE_SYNC_PENDING; + te->trace_next_insn =3D true; + } + + return false; + } + + /* Only N-trace filtering supported by now */ + return true; +} + void trencoder_send_prog_trace_sync(Object *trencoder_obj, uint64_t pc) { TraceEncoder *trencoder =3D TRACE_ENCODER(trencoder_obj); @@ -1050,6 +1216,8 @@ void trencoder_send_prog_trace_sync(Object *trencoder= _obj, uint64_t pc) trencoder->last_icnt_reset =3D pc; trencoder->icnt_accumulated =3D 0; =20 + trencoder->filter_state =3D PROG_TRACE_CORRELATION_PENDING; + if (ARRAY_FIELD_EX32(trencoder->regs, TR_TE_CONTROL, CONTEXT)) { trencoder_send_ownership_msg(trencoder, FORMAT_SYNC_HCONTEXT, trencoder->cpu->env.priv); @@ -1168,6 +1336,8 @@ void trencoder_send_prog_trace_correlation(Object *tr= encoder_obj, uint64_t pc, src_msg, s= rc_width); =20 trencoder_send_message_smem(trencoder, msg, msg_size); + + trencoder->filter_state =3D IDLE_FILTER; } =20 void trencoder_trace_trap_insn(Object *trencoder_obj, uint64_t curr_pc, @@ -1179,6 +1349,11 @@ void trencoder_trace_trap_insn(Object *trencoder_obj= , uint64_t curr_pc, g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); uint8_t msg_size; =20 + if (!trencoder_filters_match(trencoder, INSTRUCTION_FILTERING, + curr_pc, target_pc)) { + return; + } + if (trencoder->ntrace) { trencoder->pending_branch_trace.type =3D is_interrupt ? BTYPE_INTE= RRUPT : BTYPE_EXCEPT= ION; @@ -1227,6 +1402,11 @@ void trencoder_report_branch(Object *trencoder_obj, = uint64_t pc, { TraceEncoder *te =3D TRACE_ENCODER(trencoder_obj); =20 + if (!trencoder_filters_match(te, INSTRUCTION_FILTERING, pc, + pc + offset)) { + return; + } + if (te->ntrace && taken !=3D BRANCH_NOT_TAKEN) { uint64_t icnt =3D (pc + insn_len - te->last_icnt_reset) / 2; te->icnt_accumulated +=3D icnt; @@ -1269,7 +1449,7 @@ static void trencoder_trace_ppccd(Object *trencoder_o= bj, uint64_t pc) } =20 void trencoder_trace_priv_change(Object *trencoder_obj, hwaddr curr_pc, - uint8_t newpiv) + hwaddr target_pc, uint8_t newpiv) { if (!trencoder_obj) { return; @@ -1282,6 +1462,11 @@ void trencoder_trace_priv_change(Object *trencoder_o= bj, hwaddr curr_pc, return; } =20 + if (!trencoder_filters_match(trencoder, INSTRUCTION_FILTERING, + curr_pc, target_pc)) { + return; + } + if (trencoder->ntrace && ARRAY_FIELD_EX32(trencoder->regs, TR_TE_CONTR= OL, CONTEXT)) { trencoder_send_ownership_msg(trencoder, FORMAT_PRIV_CHANGE, newpiv= ); } else if (!trencoder->ntrace) { diff --git a/hw/riscv/trace-encoder.h b/hw/riscv/trace-encoder.h index f4196e7208..e3f813062a 100644 --- a/hw/riscv/trace-encoder.h +++ b/hw/riscv/trace-encoder.h @@ -146,7 +146,7 @@ void trencoder_trace_trap_insn(Object *trencoder_obj, u= int64_t curr_pc, uint64_t target_pc, uint32_t ecause, bool is_interrupt, uint64_t tval); void trencoder_trace_priv_change(Object *trencoder_obj, hwaddr curr_pc, - uint8_t newpiv); + hwaddr target_pc, uint8_t newpiv); void trencoder_report_updiscon(Object *trencoder_obj); void trencoder_report_branch(Object *trencoder_obj, uint64_t pc, uint64_t insn_len, uint64_t offset, @@ -154,4 +154,9 @@ void trencoder_report_branch(Object *trencoder_obj, uin= t64_t pc, void trencoder_send_ownership_msg(TraceEncoder *trencoder, NTraceOwnershipFormat value, uint8_t new= piv); void trencoder_send_ownership_scontext_msg(Object *trencoder_obj); +bool trencoder_filters_match(TraceEncoder *te, FilteringType type, + hwaddr curr_pc, hwaddr target_pc); +void riscv_trencoder_set_filter_exec_state(CPURISCVState *env, + FilterExecutionState state); + #endif diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 8aac23b400..7ae68c0400 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -2377,9 +2377,11 @@ void riscv_cpu_do_interrupt(CPUState *cs) if (cpu->trencoder && TRACE_ENCODER(cpu->trencoder)->trace_running= ) { trencoder_trace_trap_insn(cpu->trencoder, env->sepc, env->pc, env->scause, async, env->stval); + riscv_trencoder_set_filter_exec_state(env, async ? + INTERRUPT_EXEC : EXCPTIO= N_EXEC); } =20 - trencoder_trace_priv_change(cpu->trencoder, env->sepc, PRV_S); + trencoder_trace_priv_change(cpu->trencoder, env->sepc, env->pc, PR= V_S); riscv_cpu_set_mode(env, PRV_S, virt); =20 src =3D env->sepc; @@ -2470,9 +2472,11 @@ void riscv_cpu_do_interrupt(CPUState *cs) if (cpu->trencoder && TRACE_ENCODER(cpu->trencoder)->trace_running= ) { trencoder_trace_trap_insn(cpu->trencoder, env->mepc, env->pc, env->mcause, async, env->mtval); + riscv_trencoder_set_filter_exec_state(env, async ? + INTERRUPT_EXEC : EXCPTIO= N_EXEC); } =20 - trencoder_trace_priv_change(cpu->trencoder, env->mepc, PRV_M); + trencoder_trace_priv_change(cpu->trencoder, env->mepc, env->pc, PR= V_M); riscv_cpu_set_mode(env, PRV_M, virt); src =3D env->mepc; } diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c index ded6d79193..5171d1dc31 100644 --- a/target/riscv/op_helper.c +++ b/target/riscv/op_helper.c @@ -353,7 +353,7 @@ target_ulong helper_sret(CPURISCVState *env) } } =20 - trencoder_trace_priv_change(cpu->trencoder, env->pc, prev_priv); + trencoder_trace_priv_change(cpu->trencoder, env->pc, retpc, prev_priv); helper_trace_indirect_branch(env, env->pc, retpc); riscv_cpu_set_mode(env, prev_priv, prev_virt); =20 @@ -370,6 +370,7 @@ target_ulong helper_sret(CPURISCVState *env) riscv_ctr_add_entry(env, env->pc, retpc, CTRDATA_TYPE_EXCEP_INT_RE= T, src_priv, src_virt); } + riscv_trencoder_set_filter_exec_state(env, DEFAULT_EXEC); =20 return retpc; } @@ -444,7 +445,7 @@ target_ulong helper_mret(CPURISCVState *env) riscv_cpu_swap_hypervisor_regs(env); } =20 - trencoder_trace_priv_change(cpu->trencoder, env->pc, prev_priv); + trencoder_trace_priv_change(cpu->trencoder, env->pc, retpc, prev_priv); helper_trace_indirect_branch(env, env->pc, retpc); riscv_cpu_set_mode(env, prev_priv, prev_virt); /* @@ -460,6 +461,7 @@ target_ulong helper_mret(CPURISCVState *env) riscv_ctr_add_entry(env, env->pc, retpc, CTRDATA_TYPE_EXCEP_INT_RE= T, PRV_M, false); } + riscv_trencoder_set_filter_exec_state(env, DEFAULT_EXEC); =20 return retpc; } diff --git a/target/riscv/trace_helper.c b/target/riscv/trace_helper.c index af36c01a02..b0c91ecedc 100644 --- a/target/riscv/trace_helper.c +++ b/target/riscv/trace_helper.c @@ -55,11 +55,18 @@ void helper_trace_indirect_branch(CPURISCVState *env, t= arget_ulong curr_pc, RISCVCPU *cpu =3D env_archcpu(env); TraceEncoder *te =3D TRACE_ENCODER(cpu->trencoder); =20 + if (!te) { + return; + } + if (te->ntrace) { + if (trencoder_filters_match(te, INSTRUCTION_FILTERING, + curr_pc, target_pc)) { te->pending_branch_trace.target_pc =3D target_pc; te->pending_branch_trace.source_pc =3D curr_pc; te->pending_branch_trace.type =3D BTYPE_CONTROL_FLOW; te->trace_next_insn =3D true; + } } } =20 @@ -81,8 +88,8 @@ void helper_trace_branch(CPURISCVState *env, target_ulong= pc, return; } =20 -void helper_trace_indirect_branch(CPURISCVState *env, hwaddr curr_pc, - hwaddr target_pc) +void helper_trace_indirect_branch(CPURISCVState *env, target_ulong curr_pc, + target_ulong target_pc) { return; } --=20 2.43.0 From nobody Thu Oct 22 19:27:19 2026 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=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1791555451; cv=none; d=zohomail.com; s=zohoarc; b=BC0g1CzDu+I7JNye2NuedwixmNsbpq4n1kSba3jWDhCF385rh/bwYHpjLLDVrtSKiDXjOUPZdr+pgWZHIajQmg9QR1jrY3lWRroohVtk7XFyiU17Tuaj6XFIxUB6x2uEUX0UVniXYbDvAhANAQdxSVqSLuapLB+TdSO1kTCCjvw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791555451; 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:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ft0tcGu2gGawbMzaoRRdiqTE5DGODgbTUY11kMyRl2g=; b=eUb8q1BmBBC8ZcC3YeNERfMuGywmxt2wwRjijvJBOVzdXVmg999HnNV1s43bN+y/3rDSXuY0OJ+7FmQSy4C1RVAGPyP7StVcH0Owt9iJ4KfwTk/Cahwjm8NtFV4g1PQoJN6mnNqfxcIv6sgh1Hu8gQHu05E3+5WzFFBLLEI6mxI= 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 lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1791555451837105.32618290286928; Fri, 9 Oct 2026 07:17:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1xFBOy-0005Rq-4K; Fri, 09 Oct 2026 10:16:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1xFBH8-0003Uy-HH for qemu-devel@nongnu.org; Fri, 09 Oct 2026 10:08:47 -0400 Received: from mail-lj1-x232.google.com ([2a00:1450:4864:20::232]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1xFBH6-00080O-FS for qemu-devel@nongnu.org; Fri, 09 Oct 2026 10:08:41 -0400 Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-3a49a022221so30720361fa.3 for ; Fri, 09 Oct 2026 07:08:40 -0700 (PDT) Received: from localhost (broadband-5-228-114-10.ip.moscow.rt.ru. [5.228.114.10]) by smtp.gmail.com with ESMTPSA id 2adb3069b0e04-5bcddecfc20sm655991e87.84.2026.10.09.07.08.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Oct 2026 07:08:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791554919; x=1792159719; darn=nongnu.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=ft0tcGu2gGawbMzaoRRdiqTE5DGODgbTUY11kMyRl2g=; b=fTWz6pSE43s3kcESoIbdmuchF0boc/PVypAoP2KqOVTRFwsL7xGyuGQ9UH50umZnk+ 3WWDiJSFKV/h6jvuSnxDNRVkYJnKvtnrr4GuMJUtRXtkXFyqxRKz4RzJoQTiQ8DODdHl y/7zBptxk2F/2wXqyEFx5rysqPy38bC9vzulV3oTabyGRFRnkT0sarXns8rX7Z/cTaCU YGJVQ+YG3F+RpoAwQ7v4lqJnn4F3DDg62KVKrXf1KmN4bM8VBY3eIM7ZreVm18qZvJbl MnLME+/CZbCn+D1i6Knu5EtJhTkT2f24mNicTv3WwpTa9fMiAMBdFaBf3dYiYAx5GkOw ZQeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791554919; x=1792159719; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=ft0tcGu2gGawbMzaoRRdiqTE5DGODgbTUY11kMyRl2g=; b=uQeCOk/ch0nKNXYSr1zyN/X2FkfaDX54ikC4JHmrJUaOY0Cfz/UZT68+pyRf/79Sw5 Ywh5bGTUgWC6qW545HqPPkRpBWs0VWS7Tvrl6p1ess4yTnXxm49ENwm71VEo6ZpBFRHg SKQNahhekfDGtt+v/NRU0mIZTSEG1LJ+qHe8ybAv1x4qH7krpQexQQ84Fk/glD/lc/eX jMTjRSry+sJJOfonQy/9i5zGmj3vt29e4xHsQhCgDOLeLfBBlyGA+EhObZrRA8OpLOQg i0nanqZbdjYDz5m/jW0xiML3VeABQfFkhTuO9z8H3ndO50zbPPh0LHqmVqY2CAOJxXm8 i4zw== X-Gm-Message-State: AFq9FYKZmT130z7oDKRNUkPO4GqtkJH5BroJ+YkMSx1V3p7S2+z8DQx1 xwNpUVMOo0wsBvcvdsGtXi0FytCXxYn4ofXBUmHeS6UvZI7N74+yVAw/UbFYrAfPNes= X-Gm-Gg: AYBFou2Ew83r8TN71ZCT52y2/4ZPWItmhC3jEXkdZgt6lsnZGCVpSwmBisaA+kqnDeR h98UQveGENGMGz4PCF50hESUY6UHwUulGmvjTiE4XFlIrGeLJfEDxdhzqbMmSQ5iJGla2YUbOkj Mk7vnZP5Iwt7maR6B/OQdKW3Vct1C+eOXcu0Ik1eLA3P9+L3nM0yUvnaESkQ60qGziiGmZ7UGpX 8dLumiafuKm+y9akJTzmD5fkeaXAIXfPh+OW+gozZpmOr0mJfnXvqqABKZRN0eXlJQOTKSut2EF 26d+83Z7yrX+HcVTS4vZtF2H4yHVKXculqyGO4IV6kD9/Yi+Tfvhp7xmHHjgUTcgHUWyTEu5pCW kIB1IQRxZWQrC8wv0kPM0evov6Hx6CFXDFCKeRT6dhlwceHUAMiUDRbahzE3srkjXJng5b8ffCi 8SrzWNrHV/ZotFZsAYzJC9w+tA/ucsVFEahseowcvSea90g3JgnvMr28Oa7GrhGLtIGHdGdAdzF Qw+jXuMuDjf/niFZ2Ea83WMvPF+nhprWd/zsVrb9PfNYIj8 X-Received: by 2002:a05:6512:3c90:b0:5bc:b531:51d7 with SMTP id 2adb3069b0e04-5bcde6b3fbemr697761e87.12.1791554918479; Fri, 09 Oct 2026 07:08:38 -0700 (PDT) From: Konstantin Semichastnov Date: Fri, 09 Oct 2026 17:03:07 +0300 Subject: [PATCH 6/6] hw/riscv/trace-encoder.c: emit PTC message when trace started disabled MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20261009-upstream-ntrace_filter-v1-6-8f061c9b24da@gmail.com> References: <20261009-upstream-ntrace_filter-v1-0-8f061c9b24da@gmail.com> In-Reply-To: <20261009-upstream-ntrace_filter-v1-0-8f061c9b24da@gmail.com> To: qemu-devel@nongnu.org Cc: Palmer Dabbelt , Alistair Francis , Weiwei Li , Daniel Henrique Barboza , Liu Zhiwei , qemu-riscv@nongnu.org, Alexei Filippov , Grigoriy Bereznyakov X-Mailer: b4 0.16.0 X-Developer-Signature: v=1; a=openpgp-sha256; l=2352; i=antikostya2@gmail.com; h=from:subject:message-id; bh=hmvihcwYPu69+wUJJkFwl77m6Awy3R/i9UzfXrnluqQ=; b=owEBbQKS/ZANAwAKAUiKpW6lUN52AcsmYgBqyPQWFssTDmJO68YDYwr34WnSfp+ZM60PtMaCA SZmQpRXhHKJAjMEAAEKAB0WIQRMBWLx2o+linEPEBhIiqVupVDedgUCasj0FgAKCRBIiqVupVDe drIkEAC+eP50uXN994TEd5F1mJPa5oxIxYxHqebs5IXniaFN77Dg3KV8Iv0uTkmSLamcIVYfBZt P6hNHPvwipS5cb9Wqhm3eWR6HIX8nTWlqjXRfDzjrbMU4BxyMidQ5hIK6gCobtZ9EoV1fphIQvn Nrvh1j5TJOWD8B2TB9Hh/ImKYwYg+QgxlSsj0UoYRBafZd9bXtpCTroyH9x+NehcqLs+7R9Mod4 X3UwIol6XnQOuUcBUI/CD6Pssq6ZEKYwJusTYxCs+YYgdC7yk/qkn2ewFyPI2OWyGTNeGwgsl5x Xd8ioTMbQJMEzMEDgqu3ISGv6lN/SANkhknklnQlh6K9W/tO4wEOOcDCEVfvtaa3KyRPTu7g2+y VbaPpt4MUC47p6urhrYyToHb5dokNan1Ag37ED6nCGF8KIilaIXrrEk5p/DuIsCWFsqaSuZZHXW wsygMfdcVdtIi5WML6aCPMMqem8HDvO+psCjzYXTlKc1O6P5oYRQ1Yeng5KDbIUm3VRFreOIbIQ uW7rVREvAgy+i5wsHKhiIoxcJmjpeeBSQtsgUK7q/5aU8qbEDLN03ZqZ+BXKRgaxbetP7uta6+J +FOZwQhL3PDcWbEI+m5vW4nxpIWzDwHEi4mrTO6SVPdTQA2dHu23fIHF5al6kTO/37d+GI/zIIw RtYmmWAr4atxjEg== X-Developer-Key: i=antikostya2@gmail.com; a=openpgp; fpr=4C0562F1DA8FA58A710F1018488AA56EA550DE76 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=lists1p.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::232; envelope-from=antikostya2@gmail.com; helo=mail-lj1-x232.google.com X-Spam_score_int: -17 X-Spam_score: -1.8 X-Spam_bar: - X-Spam_report: (-1.8 / 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, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 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: qemu development 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 @gmail.com) X-ZM-MESSAGEID: 1791555453922158500 If we will enable filtering and enable tracing, we will see nothing, but according to RISC-V N-Trace (Nexus-based Trace) Specification v 1.0 p.8.6 Table 26 - if Trace starts disabled ProgTraceCorrelation with EVCODE=3D4(Trace Disabled) should be emitted. So, lets do that. Signed-off-by: Alexei Filippov --- hw/riscv/trace-encoder.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/hw/riscv/trace-encoder.c b/hw/riscv/trace-encoder.c index e42c92d03a..71feefecd9 100644 --- a/hw/riscv/trace-encoder.c +++ b/hw/riscv/trace-encoder.c @@ -43,6 +43,7 @@ static void rv_ntrace_update_sync_msg_cnt(TraceEncoder *t= rencoder); static void rv_ntrace_update_sync_icnt(TraceEncoder *trencoder, uint64_t i= cnt); static uint32_t rv_ntrace_get_source_transmission_msg(TraceEncoder *trenco= der, uint32_t *src); +static void trencoder_send_empty_prog_trace_correlation(TraceEncoder *te); =20 static TracePrivLevel trencoder_get_curr_priv_level(TraceEncoder *te) { @@ -449,6 +450,8 @@ static void trencoder_te_ctrl_postw(RegisterInfo *reg, = uint64_t val) if (trencoder_filters_match(te, INSTRUCTION_FILTERING, env->pc, env->pc)) { trencoder_send_prog_trace_sync(OBJECT(te), env->pc); + } else { + trencoder_send_empty_prog_trace_correlation(te); } } else { te->trace_next_insn =3D true; @@ -1317,6 +1320,19 @@ static uint32_t rv_ntrace_get_and_reset_icnt(TraceEn= coder *trencoder, return icnt; } =20 +static void trencoder_send_empty_prog_trace_correlation(TraceEncoder *te) +{ + uint32_t src_msg; + uint8_t msg_size; + g_autofree uint8_t *msg =3D g_malloc0(TRACE_MSG_MAX_SIZE); + uint32_t src_width =3D rv_ntrace_get_source_transmission_msg(te, &src_= msg); + + msg_size =3D rv_ntrace_gen_encoded_prog_trace_correlation_msg( + msg, CORRELATION_TRACE_DISABLED, 0, 1, src_msg, src_width); + + trencoder_send_message_smem(te, msg, msg_size); +} + void trencoder_send_prog_trace_correlation(Object *trencoder_obj, uint64_t= pc, uint32_t inst_len, TraceStopReason evcode) --=20 2.43.0