qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/6] target/riscv: Add support for Control Transfer Records Ext.
@ 2024-06-19 15:27 Rajnesh Kanwal
  2024-06-19 15:27 ` [PATCH v2 1/6] target/riscv: Remove obsolete sfence.vm instruction Rajnesh Kanwal
                   ` (7 more replies)
  0 siblings, 8 replies; 21+ messages in thread
From: Rajnesh Kanwal @ 2024-06-19 15:27 UTC (permalink / raw)
  To: qemu-riscv, qemu-devel
  Cc: alistair.francis, bin.meng, liweiwei, dbarboza, zhiwei_liu,
	atishp, apatel, rkanwal, beeman, tech-control-transfer-records,
	jason.chien

This series enables Control Transfer Records extension support on riscv
platform. This extension is similar to Arch LBR in x86 and BRBE in ARM.
The Extension has been stable and the latest release can be found here [0]

CTR extension depends on couple of other extensions:

1. S[m|s]csrind : The indirect CSR extension [1] which defines additional
   ([M|S|VS]IREG2-[M|S|VS]IREG6) register to address size limitation of
   RISC-V CSR address space. CTR access ctrsource, ctrtartget and ctrdata
   CSRs using sscsrind extension.

2. Smstateen: The mstateen bit[54] controls the access to the CTR ext to
   S-mode.

3. Sscofpmf: Counter overflow and privilege mode filtering. [2]

The series is based on Smcdeleg/Ssccfg counter delegation extension [3]
patches. CTR itself doesn't depend on counter delegation support. This
rebase is basically to include the Smcsrind patches.

Due to the dependency of these extensions, the following extensions must be
enabled to use the control transfer records feature.

"smstateen=true,sscofpmf=true,smcsrind=true,sscsrind=true,smctr=true,ssctr=true"

Here is the link to a quick guide [5] to setup and run a basic perf demo on
Linux to use CTR Ext.

The Qemu patches can be found here:
https://github.com/rajnesh-kanwal/qemu/tree/ctr_upstream_v2

The opensbi patch can be found here:
https://github.com/rajnesh-kanwal/opensbi/tree/ctr_upstream_v2

The Linux kernel patches can be found here:
https://github.com/rajnesh-kanwal/linux/tree/ctr_upstream_v2

[0]: https://github.com/riscv/riscv-control-transfer-records/release
[1]: https://github.com/riscv/riscv-indirect-csr-access
[2]: https://github.com/riscvarchive/riscv-count-overflow/tree/main
[3]: https://github.com/riscv/riscv-smcdeleg-ssccfg
[4]: https://lore.kernel.org/all/20240217000134.3634191-1-atishp@rivosinc.com/
[5]: https://github.com/rajnesh-kanwal/linux/wiki/Running-CTR-basic-demo-on-QEMU-RISC%E2%80%90V-Virt-machine

Changelog:

v2: Lots of improvements based on Jason Chien's feedback including:
  - Added CTR recording for cm.jalt, cm.jt, cm.popret, cm.popretz.
  - Fixed and added more CTR extension enable checks.
  - Fixed CTR CSR predicate functions.
  - Fixed external trap xTE bit checks.
  - One fix in freeze function for VS-mode.
  - Lots of minor code improvements.
  - Added checks in sctrclr instruction helper.

v1:
  - https://github.com/rajnesh-kanwal/qemu/tree/ctr_upstream


Rajnesh Kanwal (6):
  target/riscv: Remove obsolete sfence.vm instruction
  target/riscv: Add Control Transfer Records CSR definitions.
  target/riscv: Add support for Control Transfer Records extension CSRs.
  target/riscv: Add support to record CTR entries.
  target/riscv: Add CTR sctrclr instruction.
  target/riscv: Add support to access ctrsource, ctrtarget, ctrdata
    regs.

 target/riscv/cpu.c                            |   4 +
 target/riscv/cpu.h                            |  14 +
 target/riscv/cpu_bits.h                       | 154 ++++++++++
 target/riscv/cpu_cfg.h                        |   2 +
 target/riscv/cpu_helper.c                     | 265 +++++++++++++++++
 target/riscv/csr.c                            | 276 +++++++++++++++++-
 target/riscv/helper.h                         |   9 +-
 target/riscv/insn32.decode                    |   2 +-
 .../riscv/insn_trans/trans_privileged.c.inc   |  21 +-
 target/riscv/insn_trans/trans_rvi.c.inc       |  31 ++
 target/riscv/insn_trans/trans_rvzce.c.inc     |  20 ++
 target/riscv/op_helper.c                      | 159 +++++++++-
 target/riscv/tcg/tcg-cpu.c                    |   6 +
 target/riscv/translate.c                      |  10 +
 14 files changed, 960 insertions(+), 13 deletions(-)

-- 
2.34.1



^ permalink raw reply	[flat|nested] 21+ messages in thread

end of thread, other threads:[~2024-10-18 10:25 UTC | newest]

Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-06-19 15:27 [PATCH v2 0/6] target/riscv: Add support for Control Transfer Records Ext Rajnesh Kanwal
2024-06-19 15:27 ` [PATCH v2 1/6] target/riscv: Remove obsolete sfence.vm instruction Rajnesh Kanwal
2024-06-25  7:58   ` Jason Chien
2024-06-19 15:27 ` [PATCH v2 2/6] target/riscv: Add Control Transfer Records CSR definitions Rajnesh Kanwal
2024-06-26  0:07   ` Alistair Francis
2024-06-26  6:00   ` Jason Chien
2024-06-19 15:27 ` [PATCH v2 3/6] target/riscv: Add support for Control Transfer Records extension CSRs Rajnesh Kanwal
2024-06-25  8:28   ` Jason Chien
2024-08-27  9:28   ` Frank Chang
2024-10-17 11:18     ` Rajnesh Kanwal
2024-10-17 15:04       ` Frank Chang
2024-10-18 10:24         ` Rajnesh Kanwal
2024-06-19 15:27 ` [PATCH v2 4/6] target/riscv: Add support to record CTR entries Rajnesh Kanwal
2024-06-26  3:49   ` Jason Chien
2024-10-15 18:50     ` Rajnesh Kanwal
2024-06-19 15:27 ` [PATCH v2 5/6] target/riscv: Add CTR sctrclr instruction Rajnesh Kanwal
2024-06-25  9:05   ` Jason Chien
2024-06-19 15:27 ` [PATCH v2 6/6] target/riscv: Add support to access ctrsource, ctrtarget, ctrdata regs Rajnesh Kanwal
2024-06-25  9:48   ` Jason Chien
2024-06-26  0:01 ` [PATCH v2 0/6] target/riscv: Add support for Control Transfer Records Ext Alistair Francis
2024-06-26  6:18 ` Jason Chien

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).