TCG: 0.994 user-level: 0.945 architecture: 0.905 graphic: 0.799 peripherals: 0.785 performance: 0.749 mistranslation: 0.733 hypervisor: 0.595 device: 0.552 permissions: 0.517 arm: 0.494 PID: 0.456 x86: 0.447 ppc: 0.438 VMM: 0.424 semantic: 0.419 assembly: 0.408 register: 0.396 i386: 0.387 network: 0.333 debug: 0.325 files: 0.317 virtual: 0.312 socket: 0.311 vnc: 0.281 kernel: 0.275 boot: 0.243 KVM: 0.218 risc-v: 0.137 -------------------- TCG: 0.980 kernel: 0.815 x86: 0.431 debug: 0.229 files: 0.218 register: 0.197 virtual: 0.160 performance: 0.082 ppc: 0.067 i386: 0.056 architecture: 0.037 KVM: 0.037 user-level: 0.019 semantic: 0.017 hypervisor: 0.016 VMM: 0.015 permissions: 0.015 PID: 0.015 device: 0.014 arm: 0.012 assembly: 0.011 boot: 0.011 risc-v: 0.010 network: 0.008 peripherals: 0.005 socket: 0.005 graphic: 0.005 vnc: 0.004 mistranslation: 0.002 A code error in accel/tcg/user-exec.c Description of problem: accel/tcg/user-exec.c: ``` static int probe_access_internal(CPUArchState *env, vaddr addr, int fault_size, MMUAccessType access_type, bool nonfault, uintptr_t ra) { int acc_flag; bool maperr; switch (access_type) { case MMU_DATA_STORE: acc_flag = PAGE_WRITE_ORG; break; case MMU_DATA_LOAD: acc_flag = PAGE_READ; break; case MMU_INST_FETCH: acc_flag = PAGE_EXEC; break; default: g_assert_not_reached(); } if (guest_addr_valid_untagged(addr)) { int page_flags = page_get_flags(addr); if (page_flags & acc_flag) { if ((acc_flag == PAGE_READ || acc_flag == PAGE_WRITE) && cpu_plugin_mem_cbs_enabled(env_cpu(env))) { return TLB_MMIO; } return 0; /* success */ } maperr = !(page_flags & PAGE_VALID); } else { maperr = true; } if (nonfault) { return TLB_INVALID_MASK; } cpu_loop_exit_sigsegv(env_cpu(env), addr, access_type, maperr, ra); } ``` The conditional judgment "acc_flag == PAGE_WRITE" seems to have an issue, because acc_flag can only be PAGE_WRITE_ORG, PAGE_READ or PAGE_EXEC from the previous code.