.../devicetree/bindings/riscv/extensions.yaml | 6 ++++ MAINTAINERS | 7 ++++ arch/riscv/Kconfig | 17 +++++++++ arch/riscv/include/asm/csr.h | 8 +++++ arch/riscv/include/asm/hwcap.h | 1 + arch/riscv/include/asm/processor.h | 3 ++ arch/riscv/include/asm/qos.h | 41 ++++++++++++++++++++++ arch/riscv/include/asm/switch_to.h | 3 ++ arch/riscv/kernel/Makefile | 2 ++ arch/riscv/kernel/cpufeature.c | 1 + arch/riscv/kernel/qos/Makefile | 2 ++ arch/riscv/kernel/qos/qos.c | 5 +++ 12 files changed, 96 insertions(+)
This series adds support for the RISC-V Quality-of-Service Identifiers
(Ssqosid) extension [1] which adds the srmcfg register. This CSR
configures a hart with two identifiers: a Resource Control ID (RCID)
and a Monitoring Counter ID (MCID). These identifiers accompany each
request issued by the hart to shared resource controllers.
Background on RISC-V QoS:
The Ssqosid extension is used by the RISC-V Capacity and Bandwidth
Controller QoS Register Interface (CBQRI) specification [2]. QoS in
this context is concerned with shared resources on an SoC such as cache
capacity and memory bandwidth. Intel and AMD already have QoS features
on x86 and ARM has MPAM. There is an existing user interface in Linux:
the resctrl virtual filesystem [3].
The srmcfg CSR provides a mechanism by which a software workload (e.g.
a process or a set of processes) can be associated with an RCID and an
MCID. CBQRI defines operations to configure resource usage limits, in
the form of capacity or bandwidth. CBQRI also defines operations to
configure counters to track the resource utilization.
Goal for this series:
These patches are taken from the implementation of resctrl support for
RISC-V CBQRI. Please refer to the proof-of-concept RFC [4] for details
on the resctrl implementation. More recently, I have rebased the CBQRI
support on mainline [5]. Big thanks to James Morse for the tireless
work to extract resctrl from arch/x86 and make it available to all
architectures.
I think it makes sense to first focus on the detection of Ssqosid and
handling of srmcfg when switching tasks. It has been tested against a
QEMU branch that implements Ssqosid and CBQRI [6]. A test driver [7]
was used to set srmcfg for the current process. This allows switch_to
to be tested without resctrl.
[1] https://github.com/riscv/riscv-ssqosid/releases/tag/v1.0
[2] https://github.com/riscv-non-isa/riscv-cbqri/releases/tag/v1.0
[3] https://docs.kernel.org/filesystems/resctrl.html
[4] https://lore.kernel.org/linux-riscv/20230419111111.477118-1-dfustini@baylibre.com/
[5] https://git.kernel.org/pub/scm/linux/kernel/git/fustini/linux.git/log/?h=b4/cbqri
[6] https://github.com/tt-fustini/qemu/tree/riscv-cbqri-rqsc-pptt
[7] https://git.kernel.org/pub/scm/linux/kernel/git/fustini/linux.git/log/?h=b4/ssqosid-debug
Changes in v4:
- Rebase on riscv/for-next as of riscv-for-linus-6.18-mw2
- Add Conor's Acked-by to the yaml patch
- Link to v3: https://lore.kernel.org/all/20250920-ssqosid-v6-17-rc5-v3-0-5093162922d8@kernel.org/
Changes in v3:
- Fix parameter in __switch_to_srmcfg() when CONFIG_RISCV_ISA_SSQOSID
is not set to avoid error in clang. This does trigger checkpatch
warning about "Argument '__next' is not used in function-like macro"
but it seems that '__switch_to_srmcfg(__next)' is needed to avoid
the error that LKP reported. '__switch_to_srmcfg()' will trigger a
build error in clang.
https://lore.kernel.org/oe-kbuild-all/202509162355.wByessnb-lkp@intel.com/
- Improve description of ssqosid in extensions.xml
- Link to v2: https://lore.kernel.org/linux-riscv/20250915-ssqosid-v6-17-rc5-v2-0-2d4b0254dfd6@kernel.org/
Changes in v2:
- Restore the per-cpu fix from RFC v2 that was missed in v1:
change DEFINE_PER_CPU to DECLARE_PER_CPU in qos.h and move
DEFINE_PER_CPU to qos.c
- Introduce a patch that adds Ssqosid to riscv/extensions.yaml
- Link to v1: https://lore.kernel.org/r/20250910-ssqosid-v6-17-rc5-v1-0-72cb8f144615@kernel.org
Changes in v1:
- Rename all instances of the sqoscfg CSR to srmcfg to match the
ratified Ssqosid spec
- Link RFC v2: https://lore.kernel.org/linux-riscv/20230430-riscv-cbqri-rfc-v2-v2-0-8e3725c4a473@baylibre.com/
Changes in RFC v2:
- change DEFINE_PER_CPU to DECLARE_PER_CPU for cpu_sqoscfg in qos.h to
prevent linking error about multiple definition. Move DEFINE_PER_CPU
for cpu_sqoscfg into qos.c
- renamed qos prefix in function names to sqoscfg to be less generic
- handle sqoscfg the same way has_vector and has_fpu are handled in the
vector patch series
- Link to RFC v1: https://lore.kernel.org/linux-riscv/20230410043646.3138446-1-dfustini@baylibre.com/
Signed-off-by: Drew Fustini <fustini@kernel.org>
---
Drew Fustini (3):
dt-bindings: riscv: Add Ssqosid extension description
RISC-V: Detect the Ssqosid extension
RISC-V: Add support for srmcfg CSR from Ssqosid ext
.../devicetree/bindings/riscv/extensions.yaml | 6 ++++
MAINTAINERS | 7 ++++
arch/riscv/Kconfig | 17 +++++++++
arch/riscv/include/asm/csr.h | 8 +++++
arch/riscv/include/asm/hwcap.h | 1 +
arch/riscv/include/asm/processor.h | 3 ++
arch/riscv/include/asm/qos.h | 41 ++++++++++++++++++++++
arch/riscv/include/asm/switch_to.h | 3 ++
arch/riscv/kernel/Makefile | 2 ++
arch/riscv/kernel/cpufeature.c | 1 +
arch/riscv/kernel/qos/Makefile | 2 ++
arch/riscv/kernel/qos/qos.c | 5 +++
12 files changed, 96 insertions(+)
---
base-commit: 68247d45c045bb7dda923cf2c8d0937ce0e16394
change-id: 20251007-ssqosid-ddc87968b2d9
Best regards,
--
Drew Fustini <fustini@kernel.org>
Hi Drew, On Wed, Oct 8, 2025 at 2:22 PM Drew Fustini <fustini@kernel.org> wrote: > > This series adds support for the RISC-V Quality-of-Service Identifiers > (Ssqosid) extension [1] which adds the srmcfg register. This CSR > configures a hart with two identifiers: a Resource Control ID (RCID) > and a Monitoring Counter ID (MCID). These identifiers accompany each > request issued by the hart to shared resource controllers. > > Background on RISC-V QoS: > > The Ssqosid extension is used by the RISC-V Capacity and Bandwidth > Controller QoS Register Interface (CBQRI) specification [2]. QoS in > this context is concerned with shared resources on an SoC such as cache > capacity and memory bandwidth. Intel and AMD already have QoS features > on x86 and ARM has MPAM. There is an existing user interface in Linux: > the resctrl virtual filesystem [3]. > > The srmcfg CSR provides a mechanism by which a software workload (e.g. > a process or a set of processes) can be associated with an RCID and an > MCID. CBQRI defines operations to configure resource usage limits, in > the form of capacity or bandwidth. CBQRI also defines operations to > configure counters to track the resource utilization. > > Goal for this series: > > These patches are taken from the implementation of resctrl support for > RISC-V CBQRI. Please refer to the proof-of-concept RFC [4] for details > on the resctrl implementation. More recently, I have rebased the CBQRI > support on mainline [5]. Big thanks to James Morse for the tireless > work to extract resctrl from arch/x86 and make it available to all > architectures. > > I think it makes sense to first focus on the detection of Ssqosid and > handling of srmcfg when switching tasks. It has been tested against a > QEMU branch that implements Ssqosid and CBQRI [6]. A test driver [7] > was used to set srmcfg for the current process. This allows switch_to > to be tested without resctrl. Could we consider submitting the entire QoS functionality as a single integrated patchset (indicating the upstream branch that the patchset is based on)? This should include the content from https://lore.kernel.org/linux-riscv/20230419111111.477118-1-dfustini@baylibre.com/ > > [1] https://github.com/riscv/riscv-ssqosid/releases/tag/v1.0 > [2] https://github.com/riscv-non-isa/riscv-cbqri/releases/tag/v1.0 > [3] https://docs.kernel.org/filesystems/resctrl.html > [4] https://lore.kernel.org/linux-riscv/20230419111111.477118-1-dfustini@baylibre.com/ > [5] https://git.kernel.org/pub/scm/linux/kernel/git/fustini/linux.git/log/?h=b4/cbqri > [6] https://github.com/tt-fustini/qemu/tree/riscv-cbqri-rqsc-pptt > [7] https://git.kernel.org/pub/scm/linux/kernel/git/fustini/linux.git/log/?h=b4/ssqosid-debug > > Changes in v4: > - Rebase on riscv/for-next as of riscv-for-linus-6.18-mw2 > - Add Conor's Acked-by to the yaml patch > - Link to v3: https://lore.kernel.org/all/20250920-ssqosid-v6-17-rc5-v3-0-5093162922d8@kernel.org/ > > Changes in v3: > - Fix parameter in __switch_to_srmcfg() when CONFIG_RISCV_ISA_SSQOSID > is not set to avoid error in clang. This does trigger checkpatch > warning about "Argument '__next' is not used in function-like macro" > but it seems that '__switch_to_srmcfg(__next)' is needed to avoid > the error that LKP reported. '__switch_to_srmcfg()' will trigger a > build error in clang. > https://lore.kernel.org/oe-kbuild-all/202509162355.wByessnb-lkp@intel.com/ > - Improve description of ssqosid in extensions.xml > - Link to v2: https://lore.kernel.org/linux-riscv/20250915-ssqosid-v6-17-rc5-v2-0-2d4b0254dfd6@kernel.org/ > > Changes in v2: > - Restore the per-cpu fix from RFC v2 that was missed in v1: > change DEFINE_PER_CPU to DECLARE_PER_CPU in qos.h and move > DEFINE_PER_CPU to qos.c > - Introduce a patch that adds Ssqosid to riscv/extensions.yaml > - Link to v1: https://lore.kernel.org/r/20250910-ssqosid-v6-17-rc5-v1-0-72cb8f144615@kernel.org > > Changes in v1: > - Rename all instances of the sqoscfg CSR to srmcfg to match the > ratified Ssqosid spec > - Link RFC v2: https://lore.kernel.org/linux-riscv/20230430-riscv-cbqri-rfc-v2-v2-0-8e3725c4a473@baylibre.com/ > > Changes in RFC v2: > - change DEFINE_PER_CPU to DECLARE_PER_CPU for cpu_sqoscfg in qos.h to > prevent linking error about multiple definition. Move DEFINE_PER_CPU > for cpu_sqoscfg into qos.c > - renamed qos prefix in function names to sqoscfg to be less generic > - handle sqoscfg the same way has_vector and has_fpu are handled in the > vector patch series > - Link to RFC v1: https://lore.kernel.org/linux-riscv/20230410043646.3138446-1-dfustini@baylibre.com/ > > Signed-off-by: Drew Fustini <fustini@kernel.org> > --- > Drew Fustini (3): > dt-bindings: riscv: Add Ssqosid extension description > RISC-V: Detect the Ssqosid extension > RISC-V: Add support for srmcfg CSR from Ssqosid ext > > .../devicetree/bindings/riscv/extensions.yaml | 6 ++++ > MAINTAINERS | 7 ++++ > arch/riscv/Kconfig | 17 +++++++++ > arch/riscv/include/asm/csr.h | 8 +++++ > arch/riscv/include/asm/hwcap.h | 1 + > arch/riscv/include/asm/processor.h | 3 ++ > arch/riscv/include/asm/qos.h | 41 ++++++++++++++++++++++ > arch/riscv/include/asm/switch_to.h | 3 ++ > arch/riscv/kernel/Makefile | 2 ++ > arch/riscv/kernel/cpufeature.c | 1 + > arch/riscv/kernel/qos/Makefile | 2 ++ > arch/riscv/kernel/qos/qos.c | 5 +++ > 12 files changed, 96 insertions(+) > --- > base-commit: 68247d45c045bb7dda923cf2c8d0937ce0e16394 > change-id: 20251007-ssqosid-ddc87968b2d9 > > Best regards, > -- > Drew Fustini <fustini@kernel.org> > > Thanks, Yunhui
On Fri, Oct 10, 2025 at 08:23:50PM +0800, yunhui cui wrote: > Hi Drew, [snip] > > I think it makes sense to first focus on the detection of Ssqosid and > > handling of srmcfg when switching tasks. It has been tested against a > > QEMU branch that implements Ssqosid and CBQRI [6]. A test driver [7] > > was used to set srmcfg for the current process. This allows switch_to > > to be tested without resctrl. > > Could we consider submitting the entire QoS functionality as a single > integrated patchset (indicating the upstream branch that the patchset > is based on)? This should include the content from > https://lore.kernel.org/linux-riscv/20230419111111.477118-1-dfustini@baylibre.com/ Thanks for the feedback. I had thought that submitting Ssqosid separately would streamline the review of the parts that most affects existing arch/riscv code (like switch_to.h) before adding code for CBQRI and resctrl integration. But I have gotten similar feedback from another person too. I can post a complete series that adds Ssqosid and CBQRI support including the resctrl interface. I have a cbqri branch [1] on top of riscv/for-next. I need to clean up some of the code, and then I can send a series with ssqosid+cbqri. That cbqri branch just has device tree support in order to demonstrate the resctrl functionality. However, I did also work on support for the ACPI RQSC table earlier this year for a proof of concept [2]. I have been thinking that I will hold back the ACPI support until after Ssqosid and CBQRI support is reviewed. It also depends on some improvements regarding the ACPI PPTT table that James Morse is currently working on for ARM MPAM support [3]. Thanks, Drew [1] https://git.kernel.org/pub/scm/linux/kernel/git/fustini/linux.git/log/?h=b4/cbqri [2] https://lf-rise.atlassian.net/wiki/spaces/HOME/pages/433291272/ACPI+RQSC+Proof+of+Concept [3] https://lore.kernel.org/all/20250910204309.20751-1-james.morse@arm.com/
© 2016 - 2025 Red Hat, Inc.