Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
target/riscv: Use cpu_ld*_code_mmu for HLVX
Use the new functions to properly check execute permission
for the read rather than read permission.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Weiwei Li <liweiwei@iscas.ac.cn>
Tested-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com>
Message-Id: <20230325105429.1142530-10-richard.henderson@linaro.org>
Message-Id: <20230412114333.118895-10-richard.henderson@linaro.org>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
  • Loading branch information
rth7680 authored and alistair23 committed May 5, 2023
1 parent c8f8a99 commit a7f112c
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions target/riscv/op_helper.c
Expand Up @@ -427,18 +427,27 @@ void helper_hyp_gvma_tlb_flush(CPURISCVState *env)
helper_hyp_tlb_flush(env);
}

/*
* TODO: These implementations are not quite correct. They perform the
* access using execute permission just fine, but the final PMP check
* is supposed to have read permission as well. Without replicating
* a fair fraction of cputlb.c, fixing this requires adding new mmu_idx
* which would imply that exact check in tlb_fill.
*/
target_ulong helper_hyp_hlvx_hu(CPURISCVState *env, target_ulong address)
{
int mmu_idx = cpu_mmu_index(env, true) | MMU_HYP_ACCESS_BIT;
MemOpIdx oi = make_memop_idx(MO_TEUW, mmu_idx);

return cpu_lduw_mmuidx_ra(env, address, mmu_idx, GETPC());
return cpu_ldw_code_mmu(env, address, oi, GETPC());
}

target_ulong helper_hyp_hlvx_wu(CPURISCVState *env, target_ulong address)
{
int mmu_idx = cpu_mmu_index(env, true) | MMU_HYP_ACCESS_BIT;
MemOpIdx oi = make_memop_idx(MO_TEUL, mmu_idx);

return cpu_ldl_mmuidx_ra(env, address, mmu_idx, GETPC());
return cpu_ldl_code_mmu(env, address, oi, GETPC());
}

#endif /* !CONFIG_USER_ONLY */

0 comments on commit a7f112c

Please sign in to comment.