On Wed, Mar 2, 2022 at 9:22 PM Alistair Francis <alistai...@gmail.com> wrote: > > On Sat, Feb 19, 2022 at 10:34 AM Atish Patra <ati...@rivosinc.com> wrote: > > > > From: Atish Patra <atish.pa...@wdc.com> > > > > The predicate function calculates the counter index incorrectly for > > hpmcounterx. Fix the counter index to reflect correct CSR number. > > > > Fixes: e39a8320b088 ("target/riscv: Support the Virtual Instruction fault") > > > > Reviewed-by: Alistair Francis <alistair.fran...@wdc.com> > > Reviewed-by: Bin Meng <bmeng...@gmail.com> > > Signed-off-by: Atish Patra <atish.pa...@wdc.com> > > Signed-off-by: Atish Patra <ati...@rivosinc.com> > > --- > > target/riscv/csr.c | 10 ++++++---- > > 1 file changed, 6 insertions(+), 4 deletions(-) > > > > diff --git a/target/riscv/csr.c b/target/riscv/csr.c > > index b16881615997..3799ee850087 100644 > > --- a/target/riscv/csr.c > > +++ b/target/riscv/csr.c > > @@ -94,8 +94,9 @@ static RISCVException ctr(CPURISCVState *env, int csrno) > > } > > break; > > case CSR_HPMCOUNTER3...CSR_HPMCOUNTER31: > > - if (!get_field(env->hcounteren, 1 << (csrno - > > CSR_HPMCOUNTER3)) && > > - get_field(env->mcounteren, 1 << (csrno - > > CSR_HPMCOUNTER3))) { > > + ctr_index = csrno - CSR_CYCLE; > > + if (!get_field(env->hcounteren, 1 << ctr_index) && > > + get_field(env->mcounteren, 1 << ctr_index)) { > > This fails to build: > > ../target/riscv/csr.c: In function ‘ctr’: > ../target/riscv/csr.c:99:13: error: ‘ctr_index’ undeclared (first use > in this function); did you mean ‘tlb_index’? > 99 | ctr_index = csrno - CSR_CYCLE; > | ^~~~~~~~~ > | tlb_index >
My bad. The ctr_index is defined in PATCH 2. I think I forgot to move it when I split this one from PATCH 2. I will send a v6 after addressing your comments on other patches in this series. > Alistair > > > return RISCV_EXCP_VIRT_INSTRUCTION_FAULT; > > } > > break; > > @@ -121,8 +122,9 @@ static RISCVException ctr(CPURISCVState *env, int csrno) > > } > > break; > > case CSR_HPMCOUNTER3H...CSR_HPMCOUNTER31H: > > - if (!get_field(env->hcounteren, 1 << (csrno - > > CSR_HPMCOUNTER3H)) && > > - get_field(env->mcounteren, 1 << (csrno - > > CSR_HPMCOUNTER3H))) { > > + ctr_index = csrno - CSR_CYCLEH; > > + if (!get_field(env->hcounteren, 1 << ctr_index) && > > + get_field(env->mcounteren, 1 << ctr_index)) { > > return RISCV_EXCP_VIRT_INSTRUCTION_FAULT; > > } > > break; > > -- > > 2.30.2 > > > >