On 1/28/26 4:17 PM, Jan Beulich wrote:
On 28.01.2026 13:53, Oleksii Kurochko wrote:--- a/xen/arch/riscv/traps.c +++ b/xen/arch/riscv/traps.c @@ -99,11 +99,65 @@ static const char *decode_cause(unsigned long cause) return decode_trap_cause(cause); }-static void do_unexpected_trap(const struct cpu_user_regs *regs)+static void dump_general_regs(const struct cpu_user_regs *regs) { - unsigned long cause = csr_read(CSR_SCAUSE); +#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, " ");DYM "\n" here?
Oh, right, it should be "\n".
+#undef X +} + +static void dump_csrs(const char *ctx) +{ +#define X(name, csr, fmt, ...) \ + v = 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[%s]\n", ctx, decode_cause(v));For it, in particular the "ctx" string, to stand out, perhaps this wants moving first in the function?
I would be grateful for this.
With the adjustments (happy to carry out while committing, so long as you agree): Acked-by: Jan Beulich <[email protected]>
Thanks a lot. ~ Oleksii
