From nobody Sat Feb 7 06:49:17 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1769427836; cv=none; d=zohomail.com; s=zohoarc; b=bK82EAqiEkliUcRmCkDav+wI+adDUBRmu44Z3lVVKNs2XLgNTYqafVKN4jIx1V4/fUQgCV/Qd/QZ57u3uHZ936SnQ245v4S9i4/jVDAfFGagHYhENfSn5/RF74S0Eo/zG3WrxDKCpPCENQ9ykTB8oTU6oOJkk5nQ2LI3Abm+ivU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769427836; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=dg+tlIS5x3Bb6EkLB8EnYXAV8JB5eiuq9+HSsZDnooQ=; b=Hl9lJr7zAFsu3nJY96Rv1SwEfTzKMKHQcRnydl44V/1K2PabbopCxsIkPhdJcKEUgYnccsZVdP7VZ2u0jaox3Kgsl3rO8gPCGHZAi4DNwunyV7mckKOvoLlm6v7SeYS+4Q1YMPGBeDzvKDIY/b7A7UNv3IVmJbciy1nlk1HMj9s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1769427836541362.4743848888702; Mon, 26 Jan 2026 03:43:56 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1213631.1524083 (Exim 4.92) (envelope-from ) id 1vkL0O-0002yf-GD; Mon, 26 Jan 2026 11:43:40 +0000 Received: by outflank-mailman (output) from mailman id 1213631.1524083; Mon, 26 Jan 2026 11:43:40 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vkL0O-0002yY-DS; Mon, 26 Jan 2026 11:43:40 +0000 Received: by outflank-mailman (input) for mailman id 1213631; Mon, 26 Jan 2026 11:43:38 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1vkL0M-0002yN-Kn for xen-devel@lists.xenproject.org; Mon, 26 Jan 2026 11:43:38 +0000 Received: from mail-ej1-x635.google.com (mail-ej1-x635.google.com [2a00:1450:4864:20::635]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4062a77e-faac-11f0-b15f-2bf370ae4941; Mon, 26 Jan 2026 12:43:37 +0100 (CET) Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-b884ad1026cso688484166b.2 for ; Mon, 26 Jan 2026 03:43:37 -0800 (PST) Received: from fedora (user-109-243-67-101.play-internet.pl. [109.243.67.101]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b886048e808sm605636566b.9.2026.01.26.03.43.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jan 2026 03:43:35 -0800 (PST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 4062a77e-faac-11f0-b15f-2bf370ae4941 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769427816; x=1770032616; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=dg+tlIS5x3Bb6EkLB8EnYXAV8JB5eiuq9+HSsZDnooQ=; b=fJ5kTAjp+GTKwlGMuuH7OCXxBmI/4FtMmzdTZWX3CbYXrieglbCJQCLRElkfsvoZ0B bW1fgLd5RXIp1XP73wvAbZ09257LrDyfAtqilKn14ovlwwDEaKy7riqHfTrVEP/sMUrK j/Ti3vnPxwi/0SpkDMl/wUoe/AQkXAQHJKf+MzAVZ5JranOe5AwbMNXRsu7VQzPB40RW i2PUSIhI12URF7kcyLNuxGxwcMTY+JdgnK0dqVyo0hkajotOkryYECS7s08RJTIygMgt /907Q0hx5WEljG426Y73Ma5dQSYehAW5197IrSXwvopwDR0B0H3w15RNpyAVIBQtHYrN tLjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769427816; x=1770032616; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=dg+tlIS5x3Bb6EkLB8EnYXAV8JB5eiuq9+HSsZDnooQ=; b=prf7HSyai1wZA9gdWAv085LY5ZONz6EsZInL6i/rePXdG9ihT3ys42+MHVwtAjCFUU BOuIi5VZYxzqMxAEu6HnjsfnQfa3VbWOwdu3rq+xKXeBahFJU3DzzAEfWGUTfeuK2iEc ZP39CCT0gS9XTxNW1yaM2lusWbJhl8KSEo/2JfYopIKIYRiMALsqCte42R9yEF0ET9ZS q30i67w0Bcgcc2y79eikBkn6rIyuDQW1aQM/8ozkKp8aDwnB6ejNlNTAXpJm/2SPS5JN xAaUO/9e7PhZkOPMERkYjqgcPuk9H66SuJvjEudGCyzYm2BnJ4ZHEXPdFbCYFq7axdLh feXw== X-Gm-Message-State: AOJu0YzwsUH9nI7Bhz+b9jWn91KqAZ/t1Ab/K0vEcY0W/YZE+gbhBnsy mUy6hrvVkbCbiurr6w3tUVOpQQ9AIxXdJ/7T49HxRyQTU9HQmmS6B64oy5yatw== X-Gm-Gg: AZuq6aKskZTHofmYiymlv5a2F2wTPZ91do7Eza8TWsGDhvb4dINT5555+k9NE2GyikA 5fDrdqtyea1/aZlcV2qcFVo3X9GDTiGpTTEM9d7WYuwn7i9T6P1whZ+eTC0SKx5kbHfDnTyczYi kXOFNTUYqwjXUorbVmbm97oByTag2TX1gX+PNj3LMh9pV9fpC44CFWrMwVvczYN+DrwxpKo2snQ qhsSDdEymBTJ9P4Y+bZ6E4DHftqyw9xloqHLgED7oaAibmsVPPFDvyYTOLrEjyyXSCi6D5YeHt4 8U8SdP9f5ELFWAwgLgpvhTyRThidEId/28QpLF/f3iJaQTLjecup1riKb5VJdVhtWkQz295aNIq CEuBrNiOccUsGGYPndLMS3Uyu0AXLUXaWR76sjIt+XiWHMrkjipadzBcoYz4WUxm/h+EdJplZ7g +WRhAYwRSwWF7OZkxWXpRZBGgT/PLsrrvRJtpldkKNDt57l9U5jqwhcw== X-Received: by 2002:a17:906:c151:b0:b87:1d79:bef4 with SMTP id a640c23a62f3a-b8cfedfcaf5mr276192766b.9.1769427816036; Mon, 26 Jan 2026 03:43:36 -0800 (PST) From: Oleksii Kurochko To: xen-devel@lists.xenproject.org Cc: Oleksii Kurochko , Alistair Francis , Connor Davis , Andrew Cooper , Anthony PERARD , Michal Orzel , Jan Beulich , Julien Grall , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Stefano Stabellini , Romain Caritey Subject: [PATCH v4] xen/riscv: dump GPRs and CSRs on unexpected traps Date: Mon, 26 Jan 2026 12:43:25 +0100 Message-ID: <27ab0f8eb6fd6ecef1eeefa4a05e4fe1f43acbbe.1769427484.git.oleksii.kurochko@gmail.com> X-Mailer: git-send-email 2.52.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1769427837957154100 Content-Type: text/plain; charset="utf-8" Provide additional context when an unexpected exception occurs by dumping the relevant Supervisor, Virtual Supervisor (VS), and Hypervisor CSRs, along with the general-purpose registers associated with the trap. Dumping VS-mode CSRs in addition to host CSRs is beneficial when analysing VS-mode traps. VSCAUSE, VSEPC, VSTVAL, and related VS state are required to properly diagnose unexpected guest traps and potential hypervisor misconfiguration. For example, on an illegal-instruction exception the hardware may record the faulting instruction in VSTVAL. If VSTVAL is zero, VSEPC should always be inspected, and can be used together with objdump to identify the faulting instruction. Dumping VSCAUSE is also useful when the guest does not report it, or when the hypervisor redirects a trap to the guest using VSCAUSE, VSTATUS, and VSTVEC, allowing verification that a subsequent trap is not caused by incorrect VS state. Signed-off-by: Oleksii Kurochko Acked-by: Jan Beulich --- Changes in v4: - Drop macros GPR_LIST and CSR_LIST. - Drop leading tab identation in printk() inside X macros. - Drop semicolon after printk in X macros. - Group print of htval and htinst, and HEDELEG and HIDELEG. - Put printing of hypervisor register first. - Add printing of missing GPRs: t5, t6, sepc. --- Changes in v3: - Refactor the code dumping of CSRs and GPRs: - Introduce new macros - Re-group some registers when values are displayed. - Print all registers name in lower case. - Drop unnessary "Dumping CSRs", "Dumping GSRs" as it is clear based on names. - Update the commit message: add justification of dumping of some VS* registers. - Drop printing of VSSATP as I don't know usecase for now where it could be needed. --- Changes in v2: - Address coments about print_csr() macros and dump_csrs(). - Add dumping of GPRs pertaining to the trap. --- xen/arch/riscv/traps.c | 58 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/xen/arch/riscv/traps.c b/xen/arch/riscv/traps.c index e9c967786312..da74f77ecc90 100644 --- a/xen/arch/riscv/traps.c +++ b/xen/arch/riscv/traps.c @@ -99,12 +99,70 @@ static const char *decode_cause(unsigned long cause) return decode_trap_cause(cause); } =20 +static void dump_general_regs(const struct cpu_user_regs *regs) +{ +#define X(regs, name, delim) \ + printk("%-4s: %016lx" delim, #name, (regs)->name) + + X(regs, ra, " "); X(regs, sp, "\n"); + X(regs, gp, " "); X(regs, tp, "\n"); + X(regs, t0, " "); X(regs, t1, "\n"); + X(regs, t2, " "); X(regs, s0, "\n"); + X(regs, s1, " "); X(regs, a0, "\n"); + X(regs, a1, " "); X(regs, a2, "\n"); + X(regs, a3, " "); X(regs, a4, "\n"); + X(regs, a5, " "); X(regs, a6, "\n"); + X(regs, a7, " "); X(regs, s2, "\n"); + X(regs, s3, " "); X(regs, s4, "\n"); + X(regs, s5, " "); X(regs, s6, "\n"); + X(regs, s7, " "); X(regs, s8, "\n"); + X(regs, s9, " "); X(regs, s10, "\n"); + X(regs, s11, " "); X(regs, t3, "\n"); + X(regs, t4, " "); X(regs, t5, "\n"); + X(regs, t6, " "); X(regs, sepc, "\n"); + +#undef X +} + +static void dump_csrs(unsigned long cause) +{ +#define X(name, csr, fmt, ...) \ + v =3D csr_read(csr); \ + printk("%-10s: %016lx" fmt, #name, v, ##__VA_ARGS__) + + unsigned long v; + + X(htval, CSR_HTVAL, " "); X(htinst, CSR_HTINST, "\n"); + X(hedeleg, CSR_HEDELEG, " "); X(hideleg, CSR_HIDELEG, "\n"); + X(hstatus, CSR_HSTATUS, " [%s%s%s%s%s%s ]\n", + (v & HSTATUS_VTSR) ? " VTSR" : "", + (v & HSTATUS_VTVM) ? " VTVM" : "", + (v & HSTATUS_HU) ? " HU" : "", + (v & HSTATUS_SPVP) ? " SPVP" : "", + (v & HSTATUS_SPV) ? " SPV" : "", + (v & HSTATUS_GVA) ? " GVA" : ""); + X(hgatp, CSR_HGATP, "\n"); + X(hstateen0, CSR_HSTATEEN0, "\n"); + X(stvec, CSR_STVEC, " "); X(vstvec, CSR_VSTVEC, "\n"); + X(sepc, CSR_SEPC, " "); X(vsepc, CSR_VSEPC, "\n"); + X(stval, CSR_STVAL, " "); X(vstval, CSR_VSTVAL, "\n"); + X(status, CSR_SSTATUS, " "); X(vsstatus, CSR_VSSTATUS, "\n"); + X(satp, CSR_SATP, "\n"); + X(scause, CSR_SCAUSE, " [%s]\n", decode_cause(v)); + X(vscause, CSR_VSCAUSE, " [%s]\n", decode_cause(v)); + +#undef X +} + static void do_unexpected_trap(const struct cpu_user_regs *regs) { unsigned long cause =3D csr_read(CSR_SCAUSE); =20 printk("Unhandled exception: %s\n", decode_cause(cause)); =20 + dump_csrs(cause); + dump_general_regs(regs); + die(); } =20 --=20 2.52.0