[PATCH] RISC-V: Correct typo in RV32 perf counters

15 views
Skip to first unread message

Michael Clark

unread,
May 25, 2018, 2:26:21 AM5/25/18
to qemu-t...@nongnu.org, qemu-...@nongnu.org, pat...@groups.riscv.org, Richard Henderson, Michael Clark
This patch enables mhpmcounter3h through mhpmcounter31h on RV32.
Previously the RV32 h versions (high 32-bits of 64-bit counters)
of these counters would trap with an illegal instruction instead
of returning 0 as intended.

Reported-by: Richard Henderson <r...@twiddle.net>
Signed-off-by: Michael Clark <m...@sifive.com>
---
target/riscv/op_helper.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/target/riscv/op_helper.c b/target/riscv/op_helper.c
index 3abf52453cfc..1f6dc9a85852 100644
--- a/target/riscv/op_helper.c
+++ b/target/riscv/op_helper.c
@@ -406,7 +406,7 @@ target_ulong csr_read_helper(CPURISCVState *env, target_ulong csrno)
return 0;
}
#if defined(TARGET_RISCV32)
- if (csrno >= CSR_MHPMCOUNTER3 && csrno <= CSR_MHPMCOUNTER31) {
+ if (csrno >= CSR_MHPMCOUNTER3H && csrno <= CSR_MHPMCOUNTER31H) {
return 0;
}
#endif
--
2.7.0

Richard Henderson

unread,
May 25, 2018, 9:17:58 AM5/25/18
to Michael Clark, qemu-t...@nongnu.org, qemu-...@nongnu.org, pat...@groups.riscv.org
On 05/24/2018 11:24 PM, Michael Clark wrote:
> This patch enables mhpmcounter3h through mhpmcounter31h on RV32.
> Previously the RV32 h versions (high 32-bits of 64-bit counters)
> of these counters would trap with an illegal instruction instead
> of returning 0 as intended.
>
> Reported-by: Richard Henderson <r...@twiddle.net>
> Signed-off-by: Michael Clark <m...@sifive.com>
> ---
> target/riscv/op_helper.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)

Fixes: Coverity CID 1390849
Reviewed-by: Richard Henderson <richard....@linaro.org>


r~

Peter Maydell

unread,
Jul 30, 2018, 6:46:15 AM7/30/18
to Richard Henderson, Michael Clark, QEMU Trivial, QEMU Developers, RISC-V Patches
Ping -- Coverity is still complaining about this -- did this
patch get lost?

thanks
-- PMM

Michael Clark

unread,
Jul 30, 2018, 7:42:17 AM7/30/18
to Peter Maydell, QEMU Developers, QEMU Trivial, RISC-V Patches, Richard Henderson
Sort of. I assumed it would go into a trivial queue.

Feel free to apply, however it’s going to create (another) rebase conflict against my ‘for-upstream’ queue as this code has gone away, hence it is not in my queue.

The bug is fixed in my tree in an alternate way as we have overhauled the CSR system to support atomic read/modify/write CSRs, and the new code is table driven versus using jumbo switch statements.

When we transcribed this code to the new CSR system the bug disappeared as a consequence of the  nature of the new mechanism which matches the table listings in the RISC-V Privileged ISA manual which makes this type of bug much more obvious:


My tree is up-to-date as of 3.0-rc2, and has been rebased against Alistair’s changes but I have a feeling we are still missing reviews.

We also have additional CSR fixes (such as vectored interrupts) that depend on the context of the new CSR system and we don’t have enough bandwidth to maintain a backport to the old code in upstream QEMU.

I guess it is problematic going via my tree as last time I looked we didn’t have enough reviews.

I can include this change in my pull for 3.1, along with the patches in my tree that have Reviewed-by and fix the rebase conflicts for anything that depends on new context (hopefully not creating new bugs during that process).

I haven’t reposted the code that has not been reviewed as I’ll do that when I have a chance to reorder and split my queue based on what has been reviewed and what hasn’t. 

I’ve deferred that because i’m still working on new code that will be shipping from the SiFive tree (for which i’m currently writing test cases for).

Michael.

Peter Maydell

unread,
Jul 30, 2018, 8:00:42 AM7/30/18
to Michael Clark, QEMU Developers, QEMU Trivial, RISC-V Patches, Richard Henderson
On 30 July 2018 at 12:42, Michael Clark <m...@sifive.com> wrote:
>
>
> On Mon, 30 Jul 2018 at 10:46 PM, Peter Maydell <peter....@linaro.org>
> wrote:
>>
>> On 25 May 2018 at 14:17, Richard Henderson <r...@twiddle.net> wrote:
>> > On 05/24/2018 11:24 PM, Michael Clark wrote:
>> >> This patch enables mhpmcounter3h through mhpmcounter31h on RV32.
>> >> Previously the RV32 h versions (high 32-bits of 64-bit counters)
>> >> of these counters would trap with an illegal instruction instead
>> >> of returning 0 as intended.
>> >>
>> >> Reported-by: Richard Henderson <r...@twiddle.net>
>> >> Signed-off-by: Michael Clark <m...@sifive.com>
>> >> ---
>> >> target/riscv/op_helper.c | 2 +-
>> >> 1 file changed, 1 insertion(+), 1 deletion(-)
>> >
>> > Fixes: Coverity CID 1390849
>> > Reviewed-by: Richard Henderson <richard....@linaro.org>
>>
>> Ping -- Coverity is still complaining about this -- did this
>> patch get lost?
>
>
> Sort of. I assumed it would go into a trivial queue.

As a general rule of thumb, patches which apply to an area
of code which has a maintainer (especially when that area is
in active development, as riscv is), usually go through that
maintainer's tree. Picking up and shepherding patches like this
into master is one of the things maintainers do in QEMU's system.
The -trivial queue mostly exists for things which would otherwise
fall through the cracks between different subsystems.

> Feel free to apply, however it’s going to create (another) rebase conflict
> against my ‘for-upstream’ queue as this code has gone away, hence it is not
> in my queue.

That sort of possibility for conflicts is why it makes more sense
to put even fairly minor patches through maintainer trees rather
than via -trivial).

> I can include this change in my pull for 3.1, along with the patches in my
> tree that have Reviewed-by and fix the rebase conflicts for anything that
> depends on new context (hopefully not creating new bugs during that
> process).

If the code has been removed then you don't need to put this
patch in your pullrequest for 3.1, because you already have
changes that make it moot. (Given that Coverity spotted
it rather than an actual user it doesn't seem like a bug fix
urgent enough to put in 3.0.)

thanks
-- PMM
Reply all
Reply to author
Forward
0 new messages