From: "Luck, Tony" <tony.luck@intel.com>
To: Reinette Chatre <reinette.chatre@intel.com>
Cc: Fenghua Yu <fenghuay@nvidia.com>,
"Wieczor-Retman, Maciej" <maciej.wieczor-retman@intel.com>,
Peter Newman <peternewman@google.com>,
James Morse <james.morse@arm.com>,
Babu Moger <babu.moger@amd.com>,
"Drew Fustini" <dfustini@baylibre.com>,
Dave Martin <Dave.Martin@arm.com>,
"Chen, Yu C" <yu.c.chen@intel.com>,
"Box, David E" <david.e.box@intel.com>,
"x86@kernel.org" <x86@kernel.org>,
Christoph Hellwig <hch@infradead.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"patches@lists.linux.dev" <patches@lists.linux.dev>
Subject: Re: [PATCH v7 11/14] mpam,x86/resctrl: Resolve INTEL_PMT_TELEMETRY symbols at runtime
Date: Wed, 10 Jun 2026 15:09:25 -0700 [thread overview]
Message-ID: <aingld8Hoz-x5MTj@agluck-desk3> (raw)
In-Reply-To: <a1dd1858-a6d1-4760-9181-ca30de3a1510@intel.com>
On Wed, Jun 10, 2026 at 10:58:26AM -0700, Reinette Chatre wrote:
> Hi Tony,
>
> On 6/10/26 10:24 AM, Luck, Tony wrote:
> >> I see many "if (pmt_module)" checks ... intel_aet_pre_mount() even calls it twice. Are they all necessary?
> >> It creates the impression that the PMT module can be yanked from AET at any time, something which
> >> intel_aet_unregister_enumeration() seems to allow. I was hoping that there can be some guarantee
> >> that if PMT is available during pre_mount() it will continue to be available at least until
> >> unmount() completes.
> >
> > pmt_module is NULL if CONFIG_INTEL_PMT_TELEMETRY=y ... i.e. built-in to the kernel.
> >
> > In that case it obviously can't go away, and doesn't need module_get()/module_put().
> > There's no special case for this. try_module_get() takes a fault on NULL dereference.
> >
> > When CONFIG_INTEL_PMT_TELEMETRY=m then the get/put should stop it going away
> > (I tried rmmod while resctrl mounted and it fails to remove as expected).
>
> Have you tried "unbind" via sysfs?
I need to resolve the unbind issue. Looks like I may have to extend the
registration interface to pass a pointer to the device so I can call
get_device() to prevent such an unbind operation while the file system
is mounted in addition to try_get_module() to stop the module from being
unloaded.
Or talk David into marking the driver with "device_driver::suppress_bind_attrs"
so that unbind isn't available for the user.
But that's separate from the issue of whether all those "if (pmt_module)" tests are needed.
> Even so, my comment was in response to the code you shared. Let me paste it
> back and highlight what I meant with the "many pmt_module checks":
>
> > /*
> > * Track whether pmt_telemetry enumeration succeeded during mount for use
> > * during unmount.
> > */
> > static bool pmt_in_use;
> >
> > bool intel_aet_pre_mount(void)
> > {
> > bool ret;
> >
> > guard(mutex)(&aet_register_lock);
> > if (!get_feature || !put_feature)
> > return false;
> >
> > if (pmt_module) {
>
> Here is an "if (pmt_module)" check ... can it ever be false? If so
> then the rest of this function becomes very confusing (more below ...)
Yes. pmt_module is NULL when the kernel is built with CONFIG_INTEL_PMT_TELEMETRY=y
I.e. the value of THIS_MODULE in the pmt_telemetry code is NULL when it
isn't a module, but is built-in to the kernel.
>
> > if (!try_module_get(pmt_module))
> > return false;
> > }
> >
> > ret = aet_get_events();
>
> aet_get_events() can thus seemingly be called when pmt_module is unset?
>
> >
> > if (!ret) {
> > if (pmt_module)
>
> Can pmt_module be unset here?
If it was NULL earlier (because CONFIG_INTEL_PMT_TELEMETRY=y) then it
will be NULL forever. If it was non-NULL above, then it must still be
non-NULL here because changes are protected but the aet_register_lock
mutex.
>
> > module_put(pmt_module);
> > } else {
> > pmt_in_use = true;
>
> So pmt_in_use could be true if pmt_module is unset? Confusing, no?
I'm using "pmt", it just isn't a module. I'm using the built-in kernel
copy of the code.
Do you have a better suggestion for the name of "pmt_in_use" that makes
it more obvious that it doesn't refer to the loaded state of the module?
Or maybe change the "pmt_module" variable name? Suggestions welcome.
> > }
> >
> > return ret;
> > }
> >
> > void intel_aet_unmount(void)
> > {
> > struct event_group **peg;
> >
> > guard(mutex)(&aet_register_lock);
> > if (!pmt_in_use)
> > return;
> >
> > for_each_event_group(peg) {
> > if ((*peg)->pfg) {
> > struct event_group *e = *peg;
> >
> > for (int j = 0; j < e->num_events; j++)
> > resctrl_disable_mon_event(e->evts[j].id);
> > put_feature((*peg)->pfg);
> > (*peg)->pfg = NULL;
> > }
> > }
> > if (pmt_module)
>
> So this implies that pmt_module could be unset here ... if that is the
> case then that means that the PMT module disappeared while resctrl was
> mounted which is exactly what this work aims to prevent, no?
As above. If CONFIG_INTEL_PMT_TELEMETRY=y then pmt_module is always NULL.
The module didn't disappear, there never was a module. It was built-in
the whole time.
>
> > module_put(pmt_module);
> > pmt_in_use = false;
>
> ... if pmt_module was unset then how could pmt_in_use ever be true?
It can be set in the case where the kernel was built with CONFIG_INTEL_PMT_TELEMETRY=y
>
> > }
>
> Reinette
-Tony
next prev parent reply other threads:[~2026-06-10 22:09 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-01 19:56 [PATCH v7 00/14] Allow AET to use PMT as loadable module Tony Luck
2026-06-01 19:56 ` [PATCH v7 01/14] fs/resctrl: Move functions to avoid forward references in subsequent fixes Tony Luck
2026-06-01 19:56 ` [PATCH v7 02/14] fs/resctrl: Free mon_data structures on rdt_get_tree() failure Tony Luck
2026-06-01 19:56 ` [PATCH v7 03/14] fs/resctrl: Fix use-after-free during unmount Tony Luck
2026-06-01 19:56 ` [PATCH v7 04/14] fs/resctrl: Fix deadlock for errors during mount Tony Luck
2026-06-01 19:56 ` [PATCH v7 05/14] x86/resctrl: Stop setting event_group::force_off on RMID shortage Tony Luck
2026-06-08 23:16 ` Reinette Chatre
2026-06-09 16:51 ` Luck, Tony
2026-06-09 23:02 ` Reinette Chatre
2026-06-10 20:01 ` Luck, Tony
2026-06-01 19:56 ` [PATCH v7 06/14] fs/resctrl: Add interface to disable a monitor event Tony Luck
2026-06-08 23:18 ` Reinette Chatre
2026-06-09 17:21 ` Luck, Tony
2026-06-09 23:02 ` Reinette Chatre
2026-06-10 20:56 ` Luck, Tony
2026-06-10 22:26 ` Reinette Chatre
2026-06-10 23:19 ` Luck, Tony
2026-06-11 21:22 ` Reinette Chatre
2026-06-01 19:56 ` [PATCH v7 07/14] x86/resctrl: Maintain a count of enabled monitor features Tony Luck
2026-06-08 23:18 ` Reinette Chatre
2026-06-09 18:46 ` Luck, Tony
2026-06-09 23:03 ` Reinette Chatre
2026-06-11 17:27 ` Luck, Tony
2026-06-01 19:56 ` [PATCH v7 08/14] fs,x86,mpam/resctrl: Handle change in number of RMIDs on each mount Tony Luck
2026-06-08 23:21 ` Reinette Chatre
2026-06-09 21:58 ` Luck, Tony
2026-06-09 23:35 ` Reinette Chatre
2026-06-11 17:40 ` Luck, Tony
2026-06-01 19:56 ` [PATCH v7 09/14] x86/resctrl: Add PMT registration API for AET enumeration callbacks Tony Luck
2026-06-08 23:21 ` Reinette Chatre
2026-06-01 19:56 ` [PATCH v7 10/14] platform/x86/intel/pmt: Register enumeration functions with resctrl Tony Luck
2026-06-08 23:22 ` Reinette Chatre
2026-06-09 22:11 ` Luck, Tony
2026-06-18 21:15 ` Luck, Tony
2026-06-22 15:46 ` Reinette Chatre
2026-06-22 23:00 ` Luck, Tony
2026-06-23 15:45 ` Reinette Chatre
2026-06-23 18:24 ` Luck, Tony
2026-06-01 19:56 ` [PATCH v7 11/14] mpam,x86/resctrl: Resolve INTEL_PMT_TELEMETRY symbols at runtime Tony Luck
2026-06-08 23:25 ` Reinette Chatre
2026-06-10 0:08 ` Luck, Tony
2026-06-10 15:27 ` Reinette Chatre
2026-06-10 15:49 ` Luck, Tony
2026-06-10 16:21 ` Reinette Chatre
2026-06-10 16:34 ` Luck, Tony
2026-06-10 16:46 ` Reinette Chatre
2026-06-10 17:24 ` Luck, Tony
2026-06-10 17:58 ` Reinette Chatre
2026-06-10 22:09 ` Luck, Tony [this message]
2026-06-11 18:01 ` Luck, Tony
2026-06-11 21:22 ` Reinette Chatre
2026-06-11 22:27 ` Luck, Tony
2026-06-12 18:04 ` Luck, Tony
2026-06-01 19:56 ` [PATCH v7 12/14] fs/resctrl: Call architecture hooks for every mount/unmount Tony Luck
2026-06-08 23:26 ` Reinette Chatre
2026-06-10 16:16 ` Luck, Tony
2026-06-01 19:56 ` [PATCH v7 13/14] x86/resctrl: Simplify Kconfig options for resctrl Tony Luck
2026-06-01 19:56 ` [PATCH v7 14/14] Documentation/filesystems/resctrl: Add footnote for telemetry fstab mount caveat Tony Luck
2026-06-08 23:26 ` Reinette Chatre
2026-06-10 16:19 ` Luck, Tony
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=aingld8Hoz-x5MTj@agluck-desk3 \
--to=tony.luck@intel.com \
--cc=Dave.Martin@arm.com \
--cc=babu.moger@amd.com \
--cc=david.e.box@intel.com \
--cc=dfustini@baylibre.com \
--cc=fenghuay@nvidia.com \
--cc=hch@infradead.org \
--cc=james.morse@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maciej.wieczor-retman@intel.com \
--cc=patches@lists.linux.dev \
--cc=peternewman@google.com \
--cc=reinette.chatre@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.