Re: [PATCH v2 2/2] target/riscv: Legalize MPP value in write_mstatus

2023-04-06 Thread liweiwei
On 2023/4/7 03:33, Richard Henderson wrote: On 4/6/23 00:25, Weiwei Li wrote: +static target_ulong legalize_mpp(CPURISCVState *env, target_ulong old_mpp, + target_ulong val) +{ +    target_ulong new_mpp = get_field(val, MSTATUS_MPP); +    bool mpp_invalid = (ne

Re: [PATCH v2 2/2] target/riscv: Legalize MPP value in write_mstatus

2023-04-06 Thread liweiwei
On 2023/4/7 03:28, Richard Henderson wrote: On 4/6/23 00:25, Weiwei Li wrote:   void riscv_cpu_set_mode(CPURISCVState *env, target_ulong newpriv)   { -    if (newpriv > PRV_M) { +    if (newpriv > PRV_M || newpriv == PRV_H) {   g_assert_not_reached();   } Nit: if (test) { assert_

Re: [PATCH v2 2/2] target/riscv: Legalize MPP value in write_mstatus

2023-04-06 Thread Richard Henderson
On 4/6/23 00:25, Weiwei Li wrote: +static target_ulong legalize_mpp(CPURISCVState *env, target_ulong old_mpp, + target_ulong val) +{ +target_ulong new_mpp = get_field(val, MSTATUS_MPP); +bool mpp_invalid = (new_mpp == PRV_S && !riscv_has_ext(env, RVS)) || +

Re: [PATCH v2 2/2] target/riscv: Legalize MPP value in write_mstatus

2023-04-06 Thread Richard Henderson
On 4/6/23 00:25, Weiwei Li wrote: void riscv_cpu_set_mode(CPURISCVState *env, target_ulong newpriv) { -if (newpriv > PRV_M) { +if (newpriv > PRV_M || newpriv == PRV_H) { g_assert_not_reached(); } Nit: if (test) { assert_not_reached } -> assert(!test). which emits a

[PATCH v2 2/2] target/riscv: Legalize MPP value in write_mstatus

2023-04-06 Thread Weiwei Li
mstatus.MPP field is a WARL field since priv version 1.11, so we remain it unchanged if an invalid value is written into it. And after this, RVH shouldn't be passed to riscv_cpu_set_mode(). Signed-off-by: Weiwei Li Signed-off-by: Junqiang Wang --- target/riscv/cpu_helper.c | 5 + target/ri