[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL v2 24/27] target/riscv: rvzicbo: Fixup CBO extension register calc
From: |
Alistair Francis |
Subject: |
[PULL v2 24/27] target/riscv: rvzicbo: Fixup CBO extension register calculation |
Date: |
Mon, 3 Jun 2024 21:16:40 +1000 |
From: Alistair Francis <alistair23@gmail.com>
When running the instruction
```
cbo.flush 0(x0)
```
QEMU would segfault.
The issue was in cpu_gpr[a->rs1] as QEMU does not have cpu_gpr[0]
allocated.
In order to fix this let's use the existing get_address()
helper. This also has the benefit of performing pointer mask
calculations on the address specified in rs1.
The pointer masking specificiation specifically states:
"""
Cache Management Operations: All instructions in Zicbom, Zicbop and Zicboz
"""
So this is the correct behaviour and we previously have been incorrectly
not masking the address.
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
Reported-by: Fabian Thomas <fabian.thomas@cispa.de>
Fixes: e05da09b7cfd ("target/riscv: implement Zicbom extension")
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Cc: qemu-stable <qemu-stable@nongnu.org>
Message-ID: <20240514023910.301766-1-alistair.francis@wdc.com>
Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
---
target/riscv/insn_trans/trans_rvzicbo.c.inc | 16 ++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)
diff --git a/target/riscv/insn_trans/trans_rvzicbo.c.inc
b/target/riscv/insn_trans/trans_rvzicbo.c.inc
index d5d7095903..15711c3140 100644
--- a/target/riscv/insn_trans/trans_rvzicbo.c.inc
+++ b/target/riscv/insn_trans/trans_rvzicbo.c.inc
@@ -31,27 +31,35 @@
static bool trans_cbo_clean(DisasContext *ctx, arg_cbo_clean *a)
{
REQUIRE_ZICBOM(ctx);
- gen_helper_cbo_clean_flush(tcg_env, cpu_gpr[a->rs1]);
+ TCGv src = get_address(ctx, a->rs1, 0);
+
+ gen_helper_cbo_clean_flush(tcg_env, src);
return true;
}
static bool trans_cbo_flush(DisasContext *ctx, arg_cbo_flush *a)
{
REQUIRE_ZICBOM(ctx);
- gen_helper_cbo_clean_flush(tcg_env, cpu_gpr[a->rs1]);
+ TCGv src = get_address(ctx, a->rs1, 0);
+
+ gen_helper_cbo_clean_flush(tcg_env, src);
return true;
}
static bool trans_cbo_inval(DisasContext *ctx, arg_cbo_inval *a)
{
REQUIRE_ZICBOM(ctx);
- gen_helper_cbo_inval(tcg_env, cpu_gpr[a->rs1]);
+ TCGv src = get_address(ctx, a->rs1, 0);
+
+ gen_helper_cbo_inval(tcg_env, src);
return true;
}
static bool trans_cbo_zero(DisasContext *ctx, arg_cbo_zero *a)
{
REQUIRE_ZICBOZ(ctx);
- gen_helper_cbo_zero(tcg_env, cpu_gpr[a->rs1]);
+ TCGv src = get_address(ctx, a->rs1, 0);
+
+ gen_helper_cbo_zero(tcg_env, src);
return true;
}
--
2.45.1
- [PULL v2 13/27] target/riscv: Fix the element agnostic function problem, (continued)
- [PULL v2 13/27] target/riscv: Fix the element agnostic function problem, Alistair Francis, 2024/06/03
- [PULL v2 17/27] target/riscv: rvv: Fix Zvfhmin checking for vfwcvt.f.f.v and vfncvt.f.f.w instructions, Alistair Francis, 2024/06/03
- [PULL v2 09/27] trans_privileged.c.inc: set (m|s)tval on ebreak breakpoint, Alistair Francis, 2024/06/03
- [PULL v2 18/27] target/riscv: rvv: Check single width operator for vector fp widen instructions, Alistair Francis, 2024/06/03
- [PULL v2 16/27] riscv: thead: Add th.sxstatus CSR emulation, Alistair Francis, 2024/06/03
- [PULL v2 19/27] target/riscv: rvv: Check single width operator for vfncvt.rod.f.f.w, Alistair Francis, 2024/06/03
- [PULL v2 20/27] target/riscv: rvv: Remove redudant SEW checking for vector fp narrow/widen instructions, Alistair Francis, 2024/06/03
- [PULL v2 22/27] target/riscv: do not set mtval2 for non guest-page faults, Alistair Francis, 2024/06/03
- [PULL v2 23/27] target/riscv: Remove experimental prefix from "B" extension, Alistair Francis, 2024/06/03
- [PULL v2 21/27] target/riscv: prioritize pmp errors in raise_mmu_exception(), Alistair Francis, 2024/06/03
- [PULL v2 24/27] target/riscv: rvzicbo: Fixup CBO extension register calculation,
Alistair Francis <=
- [PULL v2 26/27] riscv, gdbstub.c: fix reg_width in ricsv_gen_dynamic_vector_feature(), Alistair Francis, 2024/06/03
- [PULL v2 27/27] disas/riscv: Decode all of the pmpcfg and pmpaddr CSRs, Alistair Francis, 2024/06/03
- [PULL v2 25/27] target/riscv/kvm.c: Fix the hart bit setting of AIA, Alistair Francis, 2024/06/03
- Re: [PULL v2 00/27] riscv-to-apply queue, Philippe Mathieu-Daudé, 2024/06/03
- Re: [PULL v2 00/27] riscv-to-apply queue, Richard Henderson, 2024/06/04