Re: [PATCH RFC v3 06/11] RISC-V: QoS: add resctrl setup and domain management
Drew Fustini <[email protected]>
| Newsgroups | dev.linux.lists.acpica-devel,org.infradead.lists.linux-riscv,org.kernel.vger.linux-acpi,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <aeP_KJz07WnkqVTP@gen8> |
On Fri, Apr 17, 2026 at 06:52:27PM +0800, [email protected] wrote: > Hi Drew, > > On Wed, Apr 15, 2026 at 9:57 AM Drew Fustini <[email protected]> wrote: > > > Add the setup and domain management layer: domain allocation > > (qos_new_domain), controller value initialization > > (qos_init_domain_ctrlval), resource struct initialization for cache and > > bandwidth resources, domain registration with the resctrl filesystem > > (qos_resctrl_add_controller_domain), and the top-level setup function > > (qos_resctrl_setup) that probes all controllers and calls resctrl_init(). > > > > Also add qos_resctrl_online_cpu() and qos_resctrl_offline_cpu() for CPU > > hotplug integration. > > > > Co-developed-by: Adrien Ricciardi <[email protected]> > > Signed-off-by: Adrien Ricciardi <[email protected]> > > Signed-off-by: Drew Fustini <[email protected]> > > --- > > arch/riscv/kernel/qos/qos_resctrl.c | 295 +++++++++++++++++++++++++++++++++++- > > 1 file changed, 294 insertions(+), 1 deletion(-) > > > > diff --git a/arch/riscv/kernel/qos/qos_resctrl.c b/arch/riscv/kernel/qos/qos_resctrl.c > > index a4a120f89840..8d7e3b0abb75 100644 > > --- a/arch/riscv/kernel/qos/qos_resctrl.c > > +++ b/arch/riscv/kernel/qos/qos_resctrl.c > > @@ -675,7 +675,23 @@ void resctrl_arch_reset_rmid_all(struct rdt_resource *r, struct rdt_l3_mon_domai > > > > void resctrl_arch_reset_all_ctrls(struct rdt_resource *r) > > { > > - /* not implemented for the RISC-V resctrl implementation */ > > + struct cbqri_resctrl_res *hw_res; > > + struct rdt_ctrl_domain *d; > > + enum resctrl_conf_type t; > > + u32 default_ctrl; > > + int i; > > + > > + lockdep_assert_cpus_held(); > > + > > + hw_res = container_of(r, struct cbqri_resctrl_res, resctrl_res); > > + default_ctrl = resctrl_get_default_ctrl(r); > > + > > + list_for_each_entry(d, &r->ctrl_domains, hdr.list) { > > + for (i = 0; i < hw_res->max_rcid; i++) { > > + for (t = 0; t < CDP_NUM_TYPES; t++) > > + resctrl_arch_update_one(r, d, i, t, default_ctrl); > > For the bw controller, default_ctrl = max_bw, and > resctrl_arch_update_one will set the rbwb of all RCIDs to max_bw. > According to the spec: The sum of Rbwb allocated across all rcids must > not exceed MRBWB value. > > Does this conflict with the spec? Good point. Yeah, this is not being done correctly. I had been doing similar to what is done on x86 but the big difference is that CBQRI is reservation based. Each RCID must have at least 1 Rbwb, and the remainder should be assigned to default group, RCID 0. It'll update the implementation. Thanks, Drew