From 9550219649910f3c099c8cfd1097e086b07cd8d0 Mon Sep 17 00:00:00 2001 From: Yanfeng Liu Date: Sun, 12 Jul 2026 16:45:53 +0800 Subject: [PATCH] uftrace: riscv privilege level This adds RiscV virtual user and supervisor privilege levels to uftrace plugin to avoid crashing with H extension guests. Signed-off-by: Yanfeng Liu Reviewed-by: Alistair Francis Reviewed-by: Pierrick Bouvier Link: https://lore.kernel.org/qemu-devel/tencent_E17E8F6494EE130F71527C6BCE481AF33E08@qq.com Signed-off-by: Pierrick Bouvier --- contrib/plugins/uftrace.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/contrib/plugins/uftrace.c b/contrib/plugins/uftrace.c index 9b0a4963ae..063e32220b 100644 --- a/contrib/plugins/uftrace.c +++ b/contrib/plugins/uftrace.c @@ -109,6 +109,8 @@ typedef enum { RISCV64_SUPERVISOR, RISCV64_RESERVED, RISCV64_MACHINE, + RISCV64_VUSER, + RISCV64_VSUPERVISOR, RISCV64_PRIVILEGE_LEVEL_MAX, } Riscv64PrivilegeLevel; @@ -153,8 +155,10 @@ static void uftrace_write_map(bool system_emulation) const char *path = "./uftrace.data/sid-0.map"; if (system_emulation && access(path, F_OK) == 0) { - /* do not erase existing map in system emulation, as a custom one might - * already have been generated by uftrace_symbols.py */ + /* + * do not erase existing map in system emulation, as a custom one might + * already have been generated by uftrace_symbols.py + */ return; } @@ -706,6 +710,8 @@ static const char *riscv64_get_privilege_level_name(uint8_t pl) case RISCV64_SUPERVISOR: return "Supervisor"; case RISCV64_RESERVED: return "Unknown"; case RISCV64_MACHINE: return "Machine"; + case RISCV64_VUSER: return "VUser"; + case RISCV64_VSUPERVISOR: return "VSupervisor"; default: g_assert_not_reached(); } @@ -986,7 +992,8 @@ QEMU_PLUGIN_EXPORT int qemu_plugin_install(qemu_plugin_id_t id, score = qemu_plugin_scoreboard_new(sizeof(Cpu)); qemu_plugin_register_vcpu_init_cb(id, vcpu_init, NULL); - qemu_plugin_register_atexit_cb(id, at_exit, (void *) info->system_emulation); + qemu_plugin_register_atexit_cb(id, at_exit, + (void *) info->system_emulation); qemu_plugin_register_vcpu_tb_trans_cb(id, vcpu_tb_trans, NULL); return 0;