From: Reinette Chatre <reinette.chatre@intel.com>
To: James Morse <james.morse@arm.com>, <x86@kernel.org>,
<linux-kernel@vger.kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
H Peter Anvin <hpa@zytor.com>, Babu Moger <Babu.Moger@amd.com>,
<shameerali.kolothum.thodi@huawei.com>,
"D Scott Phillips OS" <scott@os.amperecomputing.com>,
<carl@os.amperecomputing.com>, <lcherian@marvell.com>,
<bobo.shaobowang@huawei.com>, <tan.shaopeng@fujitsu.com>,
<baolin.wang@linux.alibaba.com>,
Jamie Iles <quic_jiles@quicinc.com>,
Xin Hao <xhao@linux.alibaba.com>, <peternewman@google.com>,
<dfustini@baylibre.com>, <amitsinght@marvell.com>,
David Hildenbrand <david@redhat.com>,
Rex Nie <rex.nie@jaguarmicro.com>,
"Dave Martin" <dave.martin@arm.com>, Koba Ko <kobak@nvidia.com>,
Shanker Donthineni <sdonthineni@nvidia.com>,
<fenghuay@nvidia.com>
Subject: Re: [PATCH v9 03/27] x86/resctrl: Check all domains are offline in resctrl_exit()
Date: Thu, 1 May 2025 10:02:43 -0700 [thread overview]
Message-ID: <91c31b70-3d41-40cb-b00b-aa39cbd07bc9@intel.com> (raw)
In-Reply-To: <20250425173809.5529-4-james.morse@arm.com>
Hi James,
On 4/25/25 10:37 AM, James Morse wrote:
> resctrl_exit() removes things like the resctrl mount point directory
> and unregisters the filesystem prior to freeing data structures that
> were allocated during resctrl_init().
>
> This assumes that there are no online domains when resctrl_exit() is
> called. If any domain were online, the limbo or overflow handler could
> be scheduled to run.
>
> Add a check for any online control or monitor domains, and document that
> the architecture code is required to do this.
nit: It may not be obvious at this point what "this" means. Above could be:
Add a check for any online control or monitor domains, and document that
the architecture code is required to offline all monitor and control
domains before calling resctrl_exit().
>
> Suggested-by: Reinette Chatre <reinette.chatre@intel.com>
> Signed-off-by: James Morse <james.morse@arm.com>
> ---
> Changes since v8:
> * This patch is new.
Thank you for adding this.
> ---
> arch/x86/kernel/cpu/resctrl/rdtgroup.c | 24 ++++++++++++++++++++++++
> 1 file changed, 24 insertions(+)
>
> diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
> index 88197afbbb8a..f617ac97758b 100644
> --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
> +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
> @@ -4420,8 +4420,32 @@ int __init resctrl_init(void)
> return ret;
> }
>
> +static bool __exit resctrl_online_domains_exist(void)
> +{
> + struct rdt_resource *r;
> +
> + for_each_rdt_resource(r) {
> + if (!list_empty(&r->ctrl_domains) || !list_empty(&r->mon_domains))
A list needs to be initialized for list_empty() to behave as intended. A list within
an uninitialized or "kzalloc()'ed" struct will not be considered empty.
resctrl_arch_get_resource() as used by for_each_rdt_resource() already establishes
that if an architecture does not support a particular resource then it can (should?)
return a "dummy/not-capable" resource. I do not think resctrl should require
anything additionally like initializing the lists of a dummy/not-capable resource
to support things like this loop.
Considering this, could this be made more specific? For example,
for_each_alloc_capable_rdt_resource(r) {
if (!list_empty(&r->ctrl_domains))
return true;
}
for_each_mon_capable_rdt_resource(r) {
if (!list_empty(&r->mon_domains))
return true;
}
> + return true;
> + }
> +
> + return false;
> +}
> +
> +/*
> + * resctrl_exit() - Remove the resctrl filesystem and free resources.
> + *
> + * When called by the architecture code, all CPUs and resctrl domains must be
> + * offline. This ensures the limbo and overflow handlers are not scheduled to
> + * run, meaning the data structures they access can be freed by
> + * resctrl_mon_resource_exit().
> + */
> void __exit resctrl_exit(void)
> {
> + cpus_read_lock();
> + WARN_ON_ONCE(resctrl_online_domains_exist());
> + cpus_read_unlock();
> +
> debugfs_remove_recursive(debugfs_resctrl);
> unregister_filesystem(&rdt_fs_type);
> sysfs_remove_mount_point(fs_kobj, "resctrl");
Thank you.
Reinette
next prev parent reply other threads:[~2025-05-01 17:03 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-25 17:37 [PATCH v9 00/27] x86/resctrl: Move the resctrl filesystem code to /fs/resctrl James Morse
2025-04-25 17:37 ` [PATCH v9 01/27] x86/resctrl: Remove the limit on the number of CLOSID James Morse
2025-04-25 17:37 ` [PATCH v9 02/27] x86/resctrl: Rename resctrl_sched_in() to begin with "resctrl_arch_" James Morse
2025-04-25 17:37 ` [PATCH v9 03/27] x86/resctrl: Check all domains are offline in resctrl_exit() James Morse
2025-05-01 17:02 ` Reinette Chatre [this message]
2025-04-25 17:37 ` [PATCH v9 04/27] x86/resctrl: resctrl_exit() teardown resctrl but leave the mount point James Morse
2025-05-01 17:03 ` Reinette Chatre
2025-05-07 16:48 ` James Morse
2025-05-07 17:23 ` Reinette Chatre
2025-04-25 17:37 ` [PATCH v9 05/27] x86/resctrl: Drop __init/__exit on assorted symbols James Morse
2025-04-25 17:37 ` [PATCH v9 06/27] x86/resctrl: Move is_mba_sc() out of core.c James Morse
2025-04-25 17:37 ` [PATCH v9 07/27] x86/resctrl: Add end-marker to the resctrl_event_id enum James Morse
2025-05-01 17:03 ` Reinette Chatre
2025-04-25 17:37 ` [PATCH v9 08/27] x86/resctrl: Expand the width of domid by replacing mon_data_bits James Morse
2025-05-01 17:04 ` Reinette Chatre
2025-05-07 16:48 ` James Morse
2025-04-25 17:37 ` [PATCH v9 09/27] x86/resctrl: Split trace.h James Morse
2025-04-25 17:37 ` [PATCH v9 10/27] x86/resctrl: Add 'resctrl' to the title of the resctrl documentation James Morse
2025-05-01 17:07 ` Reinette Chatre
2025-05-01 21:17 ` Fenghua Yu
2025-04-25 17:37 ` [PATCH v9 11/27] fs/resctrl: Add boiler plate for external resctrl code James Morse
2025-04-25 17:37 ` [PATCH v9 12/27] x86/resctrl: Move the filesystem bits to headers visible to fs/resctrl James Morse
2025-04-25 17:37 ` [PATCH v9 13/27] x86/resctrl: Move enum resctrl_event_id to resctrl.h James Morse
2025-05-01 17:19 ` Reinette Chatre
2025-05-07 16:48 ` James Morse
2025-04-25 17:37 ` [PATCH v9 14/27] x86/resctrl: Fix types in resctrl_arch_mon_ctx_alloc() and free stubs James Morse
2025-05-01 17:27 ` Reinette Chatre
2025-05-07 16:48 ` James Morse
2025-04-25 17:37 ` [PATCH v9 15/27] x86/resctrl: Move pseudo lock prototypes to include/linux/resctrl.h James Morse
2025-05-01 17:29 ` Reinette Chatre
2025-04-25 17:37 ` [PATCH v9 16/27] x86/resctrl: Squelch whitespace anomalies in resctrl core code James Morse
2025-04-25 17:37 ` [PATCH v9 17/27] x86/resctrl: Prefer alloc(sizeof(*foo)) idiom in rdt_init_fs_context() James Morse
2025-04-25 17:38 ` [PATCH v9 18/27] x86/resctrl: Relax some asm #includes James Morse
2025-04-25 17:38 ` [PATCH v9 19/27] x86/resctrl: Always initialise rid field in rdt_resources_all[] James Morse
2025-05-01 17:31 ` Reinette Chatre
2025-04-25 17:38 ` [PATCH v9 20/27] x86/resctrl: Remove a newline to avoid confusing the code move script James Morse
2025-04-25 17:38 ` [PATCH v9 21/27] x86/resctrl: Add python script to move resctrl code to /fs/resctrl James Morse
2025-04-25 17:38 ` [PATCH v9 22/27] x86,fs/resctrl: Move the resctrl filesystem code to live in /fs/resctrl James Morse
2025-04-25 17:38 ` [PATCH v9 23/27] x86,fs/resctrl: Remove duplicated trace header files James Morse
2025-05-01 17:34 ` Reinette Chatre
2025-04-25 17:38 ` [PATCH v9 24/27] fs/resctrl: Remove unnecessary includes James Morse
2025-05-01 17:34 ` Reinette Chatre
2025-05-01 22:27 ` Fenghua Yu
2025-04-25 17:38 ` [PATCH v9 25/27] fs/resctrl: Change internal.h's header guard macros James Morse
2025-05-01 17:35 ` Reinette Chatre
2025-05-01 22:25 ` Fenghua Yu
2025-04-25 17:38 ` [PATCH v9 26/27] x86,fs/resctrl: Move resctrl.rst to live under Documentation/filesystems James Morse
2025-04-25 17:38 ` [PATCH v9 27/27] MAINTAINERS: Add reviewers for fs/resctrl James Morse
2025-04-29 14:25 ` Dave Martin
2025-05-01 17:41 ` Reinette Chatre
2025-05-01 17:51 ` [PATCH v9 00/27] x86/resctrl: Move the resctrl filesystem code to /fs/resctrl Reinette Chatre
2025-05-07 16:49 ` James Morse
2025-05-07 17:25 ` Reinette Chatre
2025-05-02 16:04 ` Moger, Babu
2025-05-02 16:30 ` Reinette Chatre
2025-05-02 16:45 ` Moger, Babu
2025-05-07 16:49 ` James Morse
2025-05-07 20:27 ` Moger, Babu
2025-05-07 20:36 ` Reinette Chatre
2025-05-07 12:00 ` Shaopeng Tan (Fujitsu)
2025-05-07 16:51 ` James Morse
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=91c31b70-3d41-40cb-b00b-aa39cbd07bc9@intel.com \
--to=reinette.chatre@intel.com \
--cc=Babu.Moger@amd.com \
--cc=amitsinght@marvell.com \
--cc=baolin.wang@linux.alibaba.com \
--cc=bobo.shaobowang@huawei.com \
--cc=bp@alien8.de \
--cc=carl@os.amperecomputing.com \
--cc=dave.martin@arm.com \
--cc=david@redhat.com \
--cc=dfustini@baylibre.com \
--cc=fenghuay@nvidia.com \
--cc=hpa@zytor.com \
--cc=james.morse@arm.com \
--cc=kobak@nvidia.com \
--cc=lcherian@marvell.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peternewman@google.com \
--cc=quic_jiles@quicinc.com \
--cc=rex.nie@jaguarmicro.com \
--cc=scott@os.amperecomputing.com \
--cc=sdonthineni@nvidia.com \
--cc=shameerali.kolothum.thodi@huawei.com \
--cc=tan.shaopeng@fujitsu.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=xhao@linux.alibaba.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.