From: Reinette Chatre <reinette.chatre@intel.com>
To: Chen Yu <chen.yu@linux.dev>
Cc: Chen Yu <yu.c.chen@intel.com>, <tony.luck@intel.com>,
<tglx@kernel.org>, <bp@alien8.de>, <mingo@redhat.com>,
<dave.hansen@linux.intel.com>, <hpa@zytor.com>,
<fenghuay@nvidia.com>, <babu.moger@amd.com>, <x86@kernel.org>,
<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v6 3/9] x86/resctrl: Parse ACPI ERDT table and save CACD cpumask for RMDD domains
Date: Mon, 24 Aug 2026 08:54:28 -0700 [thread overview]
Message-ID: <9229fbc4-812d-4747-8d2f-f5db3179037f@intel.com> (raw)
In-Reply-To: <ao1NEdfiUt5OYMQ0@three-body>
Hi Chenyu,
On 8/25/26 1:06 AM, Chen Yu wrote:
> On Wed, Aug 19, 2026 at 04:01:33PM -0700, Reinette Chatre wrote:
>> On 7/25/26 2:22 AM, Chen Yu wrote:
>>> static __init bool get_rdt_resources(void)
>>> {
>>> + erdt_init();
>>> rdt_alloc_capable = get_rdt_alloc_resources();
>>> rdt_mon_capable = get_rdt_mon_resources();
>>>
>>
>> Functions are not expected to leave dangling state when they return failure. get_rdt_resources()
>> returning false is considered a failure and now the caller is left to clean up the dangling
>> state which is not a familiar pattern to use and thus something that can/will trip people.
>>
>> On top of this this implementation pushes the cleanup very far from even the caller making
>> this unfamiliar pattern even harder to recognize.
>>
>> Please let get_rdt_resources() clean up after itself on failure to find any resources.
>>
>
> The original intent was to encapsulate the cleanup logic as a helper function (erdt_exit()),
> since it is needed in multiple places across the code. All other call sites invoke this function
> when necessary. If we place the cleanup call directly inside resctrl_arch_late_init(), it would
> only execute erdt_exit() once within that function. Alternatively, if we let get_rdt_resources()
> handle cleanup via erdt_exit(), then we would need to add explicit erdt_exit() calls in
> __resctrl_arch_late_init() for each failure path - for example, when cpuhp_setup_state() fails or
> when resctrl_init() fails. Anyway, if code readability is a priority, I'll change the logic
> as suggested.
Yes, code readability is a priority. It is not all just about code readability. Please consider
all the points I mentioned above. I do not see any justification for get_rdt_resources()
leaving dangling state on failure. This is something that will get tripped over in the next
inevitable refactor. Apart from that, adding a single "cleanup" function at one location down in
the call stack is convenient for *this* implementation based on the *current* state of the code but
while doing so it breaks custom, not just of resctrl but of the rest of the kernel also, and because
of that makes this code difficult to build on and maintain.
>
>>> @@ -1114,7 +1115,7 @@ void resctrl_cpu_detect(struct cpuinfo_x86 *c)
>>> }
>>> }
>>>
>>> -static int __init resctrl_arch_late_init(void)
>>> +static int __init __resctrl_arch_late_init(void)
>>> {
>>> struct rdt_resource *r;
>>> int state, ret, i;
>>> @@ -1157,6 +1158,15 @@ static int __init resctrl_arch_late_init(void)
>>> return 0;
>>> }
>>>
>>> +static int __init resctrl_arch_late_init(void)
>>> +{
>>> + int ret = __resctrl_arch_late_init();
>>> +
>>> + if (ret)
>>> + erdt_exit();
>>> + return ret;
>>> +}
>>
>> Related to earlier comment on cleanup I find this cleanup to be asymmentrical
>> and inconsistent with how resctrl usually does cleanup. Why not do cleanup in
>> (original) resctrl_arch_late_init() to be consistent with other cleanup when
>> failures are encountered during initialization, for example, cpuhp_remove_state()?
>> I find that having the cleanup handled where error is encountered is easier to understand.
>>
>
> Thomas previously suggested this approach to avoid using goto.
> https://lore.kernel.org/lkml/871pem5jnh.ffs@fw13/
> However, I agree that we can adopt the individual cleanup strategy instead, as it
> will improve code readability.
I see that that Thomas's comment is made in response to this snippet:
> @@ -1130,20 +1131,24 @@ static int __init resctrl_arch_late_init(void)
>
> check_quirks();
>
> - if (!get_rdt_resources())
> - return -ENODEV;
> + if (!get_rdt_resources()) {
> + ret = -ENODEV;
> + goto out;
Above is the issue I mentioned earlier where get_rdt_resources() leaves dangling state.
If it cleaned up after itself on failure as is the custom in the kernel then
resctrl_arch_late_init() does not have to.
If the goal is to avoid goto in __resctrl_arch_late_init() then the failure paths that
follow get_rdt_resources() can just call erdt_exit() directly to make obvious where what
needs to be cleaned up.
As the suggestion is implemented the cleanup is inconsistent with __resctrl_arch_late_init()
doing its own cleanup for code run _after_ erdt_init() and leaving the erdt_init() cleanup
to be done further down the stack by __resctrl_arch_late_init()'s caller. While technically
correct this inconsistency adds unnecessary complexity and another place that will get tripped
over in the next inevitable refactor.
Reinette
next prev parent reply other threads:[~2026-08-24 15:54 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-25 9:20 [PATCH v6 0/9] Introduce MMIO-based CMT access for Enhanced RDT Chen Yu
2026-07-25 9:22 ` [PATCH v6 1/9] x86/topology: Export topo_lookup_cpuid() for resctrl use Chen Yu
2026-08-19 22:55 ` Reinette Chatre
2026-08-22 4:16 ` Chen Yu
2026-07-25 9:22 ` [PATCH v6 2/9] x86/resctrl: Require 64-bit x86 for resctrl support Chen Yu
2026-08-19 22:55 ` Reinette Chatre
2026-08-20 15:20 ` Luck, Tony
2026-08-20 15:54 ` Reinette Chatre
2026-08-20 17:01 ` Luck, Tony
2026-08-20 17:12 ` Dave Hansen
2026-08-20 17:48 ` Reinette Chatre
2026-08-21 2:37 ` Borislav Petkov
2026-08-21 15:47 ` Reinette Chatre
2026-08-21 15:54 ` Borislav Petkov
2026-08-25 13:12 ` Chen Yu
2026-08-24 14:18 ` Dave Hansen
2026-08-24 15:15 ` Chen, Yu C
2026-08-25 2:40 ` Borislav Petkov
2026-08-21 11:28 ` Peter Zijlstra
2026-08-21 15:52 ` Borislav Petkov
2026-08-21 16:58 ` Luck, Tony
2026-08-22 0:04 ` Borislav Petkov
2026-07-25 9:22 ` [PATCH v6 3/9] x86/resctrl: Parse ACPI ERDT table and save CACD cpumask for RMDD domains Chen Yu
2026-08-19 23:01 ` Reinette Chatre
2026-08-25 8:06 ` Chen Yu
2026-08-24 15:54 ` Reinette Chatre [this message]
2026-07-25 9:23 ` [PATCH v6 4/9] x86/resctrl: Attach ACPI ERDT information to L3 mon domain on CPU online Chen Yu
2026-08-19 23:04 ` Reinette Chatre
2026-07-25 9:23 ` [PATCH v6 5/9] x86/resctrl: Parse ACPI CMRC table Chen Yu
2026-08-19 23:06 ` Reinette Chatre
2026-07-25 9:23 ` [PATCH v6 6/9] x86/resctrl: Refactor the monitor read function Chen Yu
2026-08-19 23:07 ` Reinette Chatre
2026-07-25 9:23 ` [PATCH v6 7/9] fs/resctrl: Do not invoke smp_processor_id() in preemptible context Chen Yu
2026-08-19 23:08 ` Reinette Chatre
2026-07-25 9:23 ` [PATCH v6 8/9] x86/resctrl: Introduce erdt_cpu_has() and erdt_support() Chen Yu
2026-08-19 23:08 ` Reinette Chatre
2026-07-25 9:23 ` [PATCH v6 9/9] x86/resctrl: Add MMIO-based LLC occupancy monitoring support Chen Yu
2026-08-19 23:10 ` Reinette Chatre
2026-08-13 6:43 ` [PATCH v6 0/9] Introduce MMIO-based CMT access for Enhanced RDT Chen Yu
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=9229fbc4-812d-4747-8d2f-f5db3179037f@intel.com \
--to=reinette.chatre@intel.com \
--cc=babu.moger@amd.com \
--cc=bp@alien8.de \
--cc=chen.yu@linux.dev \
--cc=dave.hansen@linux.intel.com \
--cc=fenghuay@nvidia.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=tglx@kernel.org \
--cc=tony.luck@intel.com \
--cc=x86@kernel.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.