From: Ben Horgan <ben.horgan@arm.com>
To: Reinette Chatre <reinette.chatre@intel.com>,
james.morse@arm.com, Dave.Martin@arm.com, fenghuay@nvidia.com
Cc: tony.luck@intel.com, yu.c.chen@intel.com, babu.moger@amd.com,
fustini@kernel.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, patches@lists.linux.dev
Subject: Re: [RFC PATCH v2 03/10] arm_mpam: resctrl: Do not fail CPU online when domain setup fails
Date: Tue, 3 Nov 2026 15:38:42 +0000 [thread overview]
Message-ID: <2008960d-b5d3-41e5-b9c8-29c5d54c2c3e@arm.com> (raw)
In-Reply-To: <660ffee2c7d069aed25c2757c51e12b28318bbc7.1792443633.git.reinette.chatre@intel.com>
Hi Reinette,
Thanks for addressing this.
On 19/10/2026 23:07, Reinette Chatre wrote:
> When a CPU comes online, mpam_resctrl_online_cpu() adds it to the resctrl
> domains of each resource in use, and sets up a new domain when the CPU
> is the first of its domain to come online. A failure to set up a domain
> is returned as the failure of MPAM's CPU hotplug startup callback.
>
> The CPU hotplug core does not run the teardown callback for a CPU whose
> startup callback failed, so everything done for the CPU before the
> failure stays in place: the CPU remains in the domains of the resources
> that were handled before the failing one, and MPAM's per-MSC state for
> the CPU is not undone. If the failure happens when MPAM installs its
> CPU hotplug callbacks during enabling, the hotplug core discards the
> callbacks, leaving MPAM enabled and resctrl initialized but MPAM no
> longer notified of CPU hotplug. If it happens when a CPU comes online
> later, the CPU fails to come online.
>
> Setting up a domain only fails if a memory allocation fails or if a
> class unexpectedly has no component for the CPU. For such rare failures
> losing a resctrl domain is a smaller cost than failing CPU online or
> leaving MPAM in an inconsistent state.
>
> Do not report domain setup failures from mpam_resctrl_online_cpu() and
> leave the CPU without a domain for that resource. Make
> mpam_resctrl_alloc_domain() return nothing since its failures are no
> longer reported. Keep adding the CPU to resctrl's default group even
> when a domain could not be set up, since the CPU is online and runs
> tasks regardless, and resctrl expects every online CPU to belong to a
> resource group. Drop the warning when a CPU going offline has no domain,
> since a missing domain is now expected.
>
> Only domains that were set up are exposed through resctrl and torn down
> when their CPUs go offline. When another CPU of the same domain comes
> online, it sets up the domain again, and if that succeeds the domain
> does not include the CPU for which setup failed.
>
> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
> ---
> drivers/resctrl/mpam_devices.c | 2 +-
> drivers/resctrl/mpam_internal.h | 4 ++--
> drivers/resctrl/mpam_resctrl.c | 31 +++++++++++++++----------------
> 3 files changed, 18 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/resctrl/mpam_devices.c b/drivers/resctrl/mpam_devices.c
> index 48adc49b833c..d17d7a72dba1 100644
> --- a/drivers/resctrl/mpam_devices.c
> +++ b/drivers/resctrl/mpam_devices.c
> @@ -2249,7 +2249,7 @@ static int mpam_cpu_online(unsigned int cpu)
> }
>
> if (mpam_resctrl_enabled)
> - return mpam_resctrl_online_cpu(cpu);
> + mpam_resctrl_online_cpu(cpu);
>
> return 0;
> }
> diff --git a/drivers/resctrl/mpam_internal.h b/drivers/resctrl/mpam_internal.h
> index 1f86cc158100..84c7adbb1a40 100644
> --- a/drivers/resctrl/mpam_internal.h
> +++ b/drivers/resctrl/mpam_internal.h
> @@ -525,13 +525,13 @@ int mpam_get_cpumask_from_cache_id(unsigned long cache_id, u32 cache_level,
> #ifdef CONFIG_RESCTRL_FS
> int mpam_resctrl_setup(void);
> void mpam_resctrl_exit(void);
> -int mpam_resctrl_online_cpu(unsigned int cpu);
> +void mpam_resctrl_online_cpu(unsigned int cpu);
> void mpam_resctrl_offline_cpu(unsigned int cpu);
> void mpam_resctrl_teardown_class(struct mpam_class *class);
> #else
> static inline int mpam_resctrl_setup(void) { return 0; }
> static inline void mpam_resctrl_exit(void) { }
> -static inline int mpam_resctrl_online_cpu(unsigned int cpu) { return 0; }
> +static inline void mpam_resctrl_online_cpu(unsigned int cpu) { }
> static inline void mpam_resctrl_offline_cpu(unsigned int cpu) { }
> static inline void mpam_resctrl_teardown_class(struct mpam_class *class) { }
> #endif /* CONFIG_RESCTRL_FS */
> diff --git a/drivers/resctrl/mpam_resctrl.c b/drivers/resctrl/mpam_resctrl.c
> index b07e5dd895dd..dc442851fd7e 100644
> --- a/drivers/resctrl/mpam_resctrl.c
> +++ b/drivers/resctrl/mpam_resctrl.c
> @@ -1615,8 +1615,8 @@ static struct mpam_component *find_component(struct mpam_class *class, int cpu)
> return NULL;
> }
>
> -static struct mpam_resctrl_dom *
> -mpam_resctrl_alloc_domain(unsigned int cpu, struct mpam_resctrl_res *res)
> +static void mpam_resctrl_alloc_domain(unsigned int cpu,
> + struct mpam_resctrl_res *res)
> {
> int err;
> struct mpam_resctrl_dom *dom;
> @@ -1631,11 +1631,11 @@ mpam_resctrl_alloc_domain(unsigned int cpu, struct mpam_resctrl_res *res)
> comp = find_component(class, cpu);
> /* class has no component for this CPU */
> if (WARN_ON_ONCE(!comp))
> - return ERR_PTR(-EINVAL);
> + return;
>
> dom = kzalloc_node(sizeof(*dom), GFP_KERNEL, cpu_to_node(cpu));
> if (!dom)
> - return ERR_PTR(-ENOMEM);
> + return;
Do you think a warning is warranted here?
>
> if (r->alloc_capable) {
> dom->ctrl_comp = comp;
> @@ -1678,7 +1678,6 @@ mpam_resctrl_alloc_domain(unsigned int cpu, struct mpam_resctrl_res *res)
> }
> if (!any_mon_comp) {
> WARN_ON_ONCE(0);
I think you could fold in your patch 7 here.
arm_mpam: resctrl: Warn when no monitoring component is found for a CPU
Thanks,
Ben
> - err = -EFAULT;
> goto offline_ctrl_domain;
> }
>
> @@ -1694,7 +1693,7 @@ mpam_resctrl_alloc_domain(unsigned int cpu, struct mpam_resctrl_res *res)
> pr_debug("Skipped monitor domain online - no monitors\n");
> }
>
> - return dom;
> + return;
>
> offline_ctrl_domain:
> if (r->alloc_capable) {
> @@ -1703,9 +1702,6 @@ mpam_resctrl_alloc_domain(unsigned int cpu, struct mpam_resctrl_res *res)
> }
> free_domain:
> kfree(dom);
> - dom = ERR_PTR(err);
> -
> - return dom;
> }
>
> /*
> @@ -1757,7 +1753,7 @@ mpam_resctrl_get_domain_from_cpu(int cpu, struct mpam_resctrl_res *res)
> return mpam_resctrl_get_mon_domain_from_cpu(cpu);
> }
>
> -int mpam_resctrl_online_cpu(unsigned int cpu)
> +void mpam_resctrl_online_cpu(unsigned int cpu)
> {
> struct mpam_resctrl_res *res;
> enum resctrl_res_level rid;
> @@ -1772,9 +1768,13 @@ int mpam_resctrl_online_cpu(unsigned int cpu)
>
> dom = mpam_resctrl_get_domain_from_cpu(cpu, res);
> if (!dom) {
> - dom = mpam_resctrl_alloc_domain(cpu, res);
> - if (IS_ERR(dom))
> - return PTR_ERR(dom);
> + /*
> + * On failure the CPU is left without a domain for this
> + * resource, which mpam_resctrl_offline_cpu() tolerates.
> + * resctrl_online_cpu() still adds the CPU to the default
> + * group because the CPU is online and runs tasks.
> + */
> + mpam_resctrl_alloc_domain(cpu, res);
> } else {
> if (r->alloc_capable) {
> struct rdt_ctrl_domain *ctrl_d = &dom->resctrl_ctrl_dom;
> @@ -1790,8 +1790,6 @@ int mpam_resctrl_online_cpu(unsigned int cpu)
> }
>
> resctrl_online_cpu(cpu);
> -
> - return 0;
> }
>
> void mpam_resctrl_offline_cpu(unsigned int cpu)
> @@ -1812,8 +1810,9 @@ void mpam_resctrl_offline_cpu(unsigned int cpu)
> if (!res->class)
> continue; // dummy resource
>
> + /* The domain may be missing if its setup failed. */
> dom = mpam_resctrl_get_domain_from_cpu(cpu, res);
> - if (WARN_ON_ONCE(!dom))
> + if (!dom)
> continue;
>
> if (r->alloc_capable) {
next prev parent reply other threads:[~2026-11-03 15:38 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-19 22:07 [RFC PATCH v2 00/10] arm_mpam: resctrl: Separate MPAM domains Reinette Chatre
2026-10-19 22:07 ` [RFC PATCH v2 01/10] arm_mpam: resctrl: Use find_component() when allocating a domain Reinette Chatre
2026-10-23 8:07 ` Jinjie Ruan
2026-10-23 8:07 ` Jinjie Ruan
2026-10-23 14:52 ` Reinette Chatre
2026-11-03 15:01 ` Ben Horgan
2026-11-03 17:48 ` Ben Horgan
2026-11-03 18:13 ` Reinette Chatre
2026-11-03 18:44 ` Ben Horgan
2026-10-19 22:07 ` [RFC PATCH v2 02/10] arm_mpam: resctrl: Rename ctrl_comp in mpam_resctrl_alloc_domain() Reinette Chatre
2026-10-23 8:08 ` Jinjie Ruan
2026-10-23 14:53 ` Reinette Chatre
2026-11-03 15:14 ` Ben Horgan
2026-10-19 22:07 ` [RFC PATCH v2 03/10] arm_mpam: resctrl: Do not fail CPU online when domain setup fails Reinette Chatre
2026-10-26 9:51 ` Jinjie Ruan
2026-11-03 15:38 ` Ben Horgan [this message]
2026-10-19 22:07 ` [RFC PATCH v2 04/10] arm_mpam: resctrl: Split control and monitoring domain setup into helpers Reinette Chatre
2026-10-26 11:49 ` Jinjie Ruan
2026-11-02 5:41 ` Shaopeng Tan (Fujitsu)
2026-11-02 17:20 ` Reinette Chatre
2026-11-03 16:00 ` Ben Horgan
2026-10-19 22:07 ` [RFC PATCH v2 05/10] arm_mpam: resctrl: Give the monitoring domain its own structure Reinette Chatre
2026-10-26 12:14 ` Jinjie Ruan
2026-10-26 16:55 ` Reinette Chatre
2026-10-27 1:12 ` Jinjie Ruan
2026-10-19 22:07 ` [RFC PATCH v2 06/10] arm_mpam: resctrl: Rename struct mpam_resctrl_dom to mpam_resctrl_ctrl_dom Reinette Chatre
2026-10-26 12:40 ` Jinjie Ruan
2026-10-19 22:07 ` [RFC PATCH v2 07/10] arm_mpam: resctrl: Warn when no monitoring component is found for a CPU Reinette Chatre
2026-10-26 13:14 ` Jinjie Ruan
2026-10-19 22:07 ` [RFC PATCH v2 08/10] arm_mpam: resctrl: Require a component for each monitoring event Reinette Chatre
2026-11-03 16:38 ` Ben Horgan
2026-10-19 22:07 ` [RFC PATCH v2 09/10] arm_mpam: resctrl: Require monitoring components to cover the same CPUs Reinette Chatre
2026-10-19 22:07 ` [RFC PATCH v2 10/10] arm_mpam: resctrl: Update the comment on monitoring domain setup Reinette Chatre
2026-11-03 16:27 ` Ben Horgan
2026-10-22 10:45 ` [RFC PATCH v2 00/10] arm_mpam: resctrl: Separate MPAM domains Ben Horgan
2026-10-22 15:43 ` Reinette Chatre
2026-10-27 3:42 ` Jinjie Ruan
2026-10-27 14:23 ` Reinette Chatre
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2008960d-b5d3-41e5-b9c8-29c5d54c2c3e@arm.com \
--to=ben.horgan@arm.com \
--cc=Dave.Martin@arm.com \
--cc=babu.moger@amd.com \
--cc=fenghuay@nvidia.com \
--cc=fustini@kernel.org \
--cc=james.morse@arm.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=patches@lists.linux.dev \
--cc=reinette.chatre@intel.com \
--cc=tony.luck@intel.com \
--cc=yu.c.chen@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®