Forum | Documentation | Website | Blog

Skip to content
Snippets Groups Projects
Unverified Commit 5d5fc33c authored by Anton Blanchard's avatar Anton Blanchard Committed by Palmer Dabbelt
Browse files

riscv: Improve exception and system call latency


Many CPUs implement return address branch prediction as a stack. The
RISCV architecture refers to this as a return address stack (RAS). If
this gets corrupted then the CPU will mispredict at least one but
potentally many function returns.

There are two issues with the current RISCV exception code:

- We are using the alternate link stack (x5/t0) for the indirect branch
  which makes the hardware think this is a function return. This will
  corrupt the RAS.

- We modify the return address of handle_exception to point to
  ret_from_exception. This will also corrupt the RAS.

Testing the null system call latency before and after the patch:

Visionfive2 (StarFive JH7110 / U74)
baseline: 189.87 ns
patched:  176.76 ns

Lichee pi 4a (T-Head TH1520 / C910)
baseline: 666.58 ns
patched:  636.90 ns

Just over 7% on the U74 and just over 4% on the C910.

Signed-off-by: default avatarAnton Blanchard <antonb@tenstorrent.com>
Signed-off-by: default avatarCyril Bur <cyrilbur@tenstorrent.com>
Tested-by: default avatarJisheng Zhang <jszhang@kernel.org>
Reviewed-by: default avatarJisheng Zhang <jszhang@kernel.org>
Link: https://lore.kernel.org/r/20240607061335.2197383-1-cyrilbur@tenstorrent.com


Signed-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
parent 8d22d0db
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment