From: James Morse <james.morse@arm.com>
To: Reinette Chatre <reinette.chatre@intel.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, Tony Luck <tony.luck@intel.com>
Subject: Re: [PATCH v8 08/21] x86/resctrl: Expand the width of dom_id by replacing mon_data_bits
Date: Thu, 24 Apr 2025 12:15:34 +0100 [thread overview]
Message-ID: <a9008c2d-e83d-4bc6-8197-0753666a7ec2@arm.com> (raw)
In-Reply-To: <26402d7f-3da8-4e6d-8503-04e7161e6a5d@intel.com>
Hi Reinette,
On 16/04/2025 01:34, Reinette Chatre wrote:
> There is no occurence of "dom_id" in patch other than subject.
Fixed.
> On 4/11/25 9:42 AM, James Morse wrote:
>> MPAM platforms retrieve the cache-id property from the ACPI PPTT table.
>> The cache-id field is 32 bits wide. Under resctrl, the cache-id becomes
>> the domain-id, and is packed into the mon_data_bits union bitfield.
>> The width of cache-id in this field is 14 bits.
>>
>> Expanding the union would break 32bit x86 platforms as this union is
>> stored as the kernfs kn->priv pointer. This saved allocating memory
>> for the priv data storage.
>>
>> The firmware on MPAM platforms have used the PPTT cache-id field to
>> expose the interconnect's id for the cache, which is sparse and uses
>> more than 14 bits. Use of this id is to enable PCIe direct cache
>> injection hints. Using this feature with VFIO means the value provided
>> by the ACPI table should be exposed to user-space.
>>
>> To support cache-id values greater than 14 bits, convert the
>> mon_data_bits union to a structure. These are shared between control
>> and monitor groups, and are allocated on first use. The list of
>> allocated struct mon_data is free'd when the filesystem is umount()ed.
>> diff --git a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c
>> index 0a0ac5f6112e..159972c3fe73 100644
>> --- a/arch/x86/kernel/cpu/resctrl/ctrlmondata.c
>> +++ b/arch/x86/kernel/cpu/resctrl/ctrlmondata.c
>> @@ -676,17 +676,22 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg)
>> goto out;
>> }
>>
>> - md.priv = of->kn->priv;
>> - resid = md.u.rid;
>> - domid = md.u.domid;
>> - evtid = md.u.evtid;
>> + md = of->kn->priv;
>> + if (WARN_ON_ONCE(!md)) {
>> + ret = -EIO;
>> + goto out;
>> + }
>> +
>> + resid = md->rid;
>> + domid = md->domid;
>> + evtid = md->evtid;
>
> What is not visible in this hunk is the types of these variables, which is:
> u32 resid, evtid, domid;
>
> These types support the previously used bitfields well but now that the
> data is provided via a struct it should be possible to use appropriate
> types and avoid this unnecessary switch between types (more below).
Sure, I left them alone as they were already mismatched...
>> r = resctrl_arch_get_resource(resid);
>>
>> - if (md.u.sum) {
>> + if (md->sum) {
>> /*
>> * This file requires summing across all domains that share
>> * the L3 cache id that was provided in the "domid" field of the
>> - * mon_data_bits union. Search all domains in the resource for
>> + * struct mon_data. Search all domains in the resource for
>> * one that matches this cache id.
>> */
>> list_for_each_entry(d, &r->mon_domains, hdr.list) {
>> diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h
>> index 36a862a4832f..d932dd1eaa74 100644
>> --- a/arch/x86/kernel/cpu/resctrl/internal.h
>> +++ b/arch/x86/kernel/cpu/resctrl/internal.h
>> @@ -103,27 +103,26 @@ struct mon_evt {
>> };
>>
>> /**
>> - * union mon_data_bits - Monitoring details for each event file.
>> - * @priv: Used to store monitoring event data in @u
>> - * as kernfs private data.
>> - * @u.rid: Resource id associated with the event file.
>> - * @u.evtid: Event id associated with the event file.
>> - * @u.sum: Set when event must be summed across multiple
>> - * domains.
>> - * @u.domid: When @u.sum is zero this is the domain to which
>> - * the event file belongs. When @sum is one this
>> - * is the id of the L3 cache that all domains to be
>> - * summed share.
>> - * @u: Name of the bit fields struct.
>> + * struct mon_data - Monitoring details for each event file.
>> + * @list: Member of list of all allocated structures.
> To help readers this can mention the name of the list. Can simply be
> @list: Entry in @listname.
Sure,
| Member of the global @mon_data_kn_priv_list list.
I was curious how kernel-doc would resolves references like that - turns out its just
formatting.
>> + * @rid: Resource id associated with the event file.
>> + * @evtid: Event id associated with the event file.
>> + * @sum: Set when event must be summed across multiple
>> + * domains.
>> + * @domid: When @sum is zero this is the domain to which
>> + * the event file belongs. When @sum is one this
>> + * is the id of the L3 cache that all domains to be
>> + * summed share.
>> + *
>> + * Stored in the kernfs kn->priv field, readers and writers must hold
>> + * rdtgroup_mutex.
>
> "Stored in the kernfs kn->priv field" can be made more specific with, for example,
> "Pointed to by kernfs kn->priv field of monitoring event file"
Sure,
>> */
>> -union mon_data_bits {
>> - void *priv;
>> - struct {
>> - unsigned int rid : 10;
>> - enum resctrl_event_id evtid : 7;
>> - unsigned int sum : 1;
>> - unsigned int domid : 14;
>> - } u;
>> +struct mon_data {
>> + struct list_head list;
>> + unsigned int rid;
>> + enum resctrl_event_id evtid;
>> + unsigned int sum;
>> + unsigned int domid;
>> };
>
> The usage of the unsigned int was in support for the bitfield, but now
> the most appropriate types can be used instead? rid can be int, or even enum
> resctrl_res_level, domid can be int, and sum can be bool.
Yup. This was just left as is as its the existing behaviour.
> Also, every struct in this file follows the custom as documented in
> maintainer-tip.rst: "Struct declarations should align the struct member
> names in a tabular fashion". This struct should follow custom.
Fixed.
>> diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
>> index c69ed978aa50..aa0bc57e1c7f 100644
>> --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
>> +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
>> @@ -45,6 +45,12 @@ LIST_HEAD(rdt_all_groups);
>> /* list of entries for the schemata file */
>> LIST_HEAD(resctrl_schema_all);
>>
>> +/*
>> + * List of struct mon_data 'priv' structures for rdtgroup_mondata_show().
>
> "struct mon_data 'priv' structures" seems redundant use of struct/structures?
Heh, this is because I go back and add 'struct' before structure names as a second pass.
> How about:
> "List of struct mon_data containing private data of event files for use by rdtgroup_mondata_show()."
Done!
>> + * Protected by rdtgroup_mutex.
>> + */
>> +static LIST_HEAD(kn_priv_list);
>
> Considering all the different "kn" involved in resctrl I find this name
> very generic for a global variable. I am not sure if something like
> "mon_data_kn_priv_list" would be considered too long? Open to recommendations.
Its suitably descriptive and doesn't cause a line length problems. Done.
>> +
>> /* The filesystem can only be mounted once. */
>> bool resctrl_mounted;
>>
>> @@ -3089,6 +3095,62 @@ static void rmdir_all_sub(void)
>> kernfs_remove(kn_mondata);
>> }
>>
>> +/**
>> + * mon_get_kn_priv() - Get the mon_data priv data for this event.
>> + *
>> + * The same values are used in multiple directories. Keep a list
>
> "The same values are used in multiple directories." is vague.
> How about "The same values are used across the mon_data directories
> of all control and monitor groups." Please feel free to improve.
I've tacked "for the same event in the same domain" on the end, otherwise
it reads like there is a single set of values.
>> + * of allocated structures and re-use an existing one with the same
>> + * list of values for rid, domain, etc.
>
> "list of values" -> "values"?
Fixed,
> Also, if using "rid", which is parameter name, why use "domain" instead
> of "domid"? If using parameter names the kernel-doc "@" can be used
> for highlighting.
Done,
> With the many usages of "event type being created" below the above description
> will be helpful if it could define what is meant with an "event type".
I'll change these to 'event file', which at least matches the earlier comments.
>> + *
>> + * @rid: The resource id for the event type being created.
>> + * @domid: The domain id for the event type being created.
>> + * @mevt: The event type being created.
>> + * @do_sum: Whether SNC summing monitors are being created.
>> + */
>> +static struct mon_data *mon_get_kn_priv(int rid, int domid,
>> + struct mon_evt *mevt,
>> + bool do_sum)
Thanks,
James
next prev parent reply other threads:[~2025-04-24 11:15 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-11 16:42 [PATCH v8 00/21] x86/resctrl: Move the resctrl filesystem code to /fs/resctrl James Morse
2025-04-11 16:42 ` [PATCH v8 01/21] x86/resctrl: Fix rdtgroup_mkdir()'s unlocked use of kernfs_node::name James Morse
2025-04-12 0:10 ` Fenghua Yu
2025-04-11 16:42 ` [PATCH v8 02/21] x86/resctrl: Remove the limit on the number of CLOSID James Morse
2025-04-15 21:06 ` Reinette Chatre
2025-04-24 9:12 ` James Morse
2025-04-24 15:17 ` Reinette Chatre
2025-04-25 2:56 ` Shaopeng Tan (Fujitsu)
2025-04-25 15:56 ` James Morse
2025-04-11 16:42 ` [PATCH v8 03/21] x86/resctrl: Rename resctrl_sched_in() to begin with "resctrl_arch_" James Morse
2025-04-15 21:11 ` Reinette Chatre
2025-04-24 9:12 ` James Morse
2025-04-11 16:42 ` [PATCH v8 04/21] x86/resctrl: resctrl_exit() teardown resctrl but leave the mount point James Morse
2025-04-16 0:25 ` Reinette Chatre
2025-04-24 9:15 ` James Morse
2025-04-11 16:42 ` [PATCH v8 05/21] x86/resctrl: Drop __init/__exit on assorted symbols James Morse
2025-04-11 16:42 ` [PATCH v8 06/21] x86/resctrl: Move is_mba_sc() out of core.c James Morse
2025-04-11 16:42 ` [PATCH v8 07/21] x86/resctrl: Add end-marker to the resctrl_event_id enum James Morse
2025-04-15 18:56 ` Luck, Tony
2025-04-24 9:15 ` James Morse
2025-04-11 16:42 ` [PATCH v8 08/21] x86/resctrl: Expand the width of dom_id by replacing mon_data_bits James Morse
2025-04-16 0:34 ` Reinette Chatre
2025-04-24 11:15 ` James Morse [this message]
2025-04-22 17:06 ` Moger, Babu
2025-04-22 17:14 ` Luck, Tony
2025-04-22 17:59 ` Moger, Babu
2025-04-22 18:10 ` Luck, Tony
2025-04-11 16:42 ` [PATCH v8 09/21] x86/resctrl: Remove a newline to avoid confusing the code move script James Morse
2025-04-25 2:32 ` Shaopeng Tan (Fujitsu)
2025-04-25 15:59 ` James Morse
2025-04-11 16:42 ` [PATCH v8 10/21] x86/resctrl: Split trace.h James Morse
2025-04-11 16:42 ` [PATCH v8 11/21] fs/resctrl: Add boiler plate for external resctrl code James Morse
2025-04-11 16:42 ` [PATCH v8 12/21] x86/resctrl: Move the filesystem bits to headers visible to fs/resctrl James Morse
2025-04-17 22:46 ` Reinette Chatre
2025-04-24 9:25 ` James Morse
2025-04-11 16:42 ` [PATCH v8 13/21] x86/resctrl: Squelch whitespace anomalies in resctrl core code James Morse
2025-04-11 16:42 ` [PATCH v8 14/21] x86/resctrl: Prefer alloc(sizeof(*foo)) idiom in rdt_init_fs_context() James Morse
2025-04-11 16:42 ` [PATCH v8 15/21] x86/resctrl: Relax some asm #includes James Morse
2025-04-16 2:08 ` Reinette Chatre
2025-04-11 16:42 ` [PATCH v8 16/21] x86/resctrl: Always initialise rid field in rdt_resources_all[] James Morse
2025-04-15 19:08 ` Luck, Tony
2025-04-24 17:08 ` James Morse
2025-04-16 2:14 ` Reinette Chatre
2025-04-24 17:08 ` James Morse
2025-04-11 16:42 ` [PATCH v8 17/21] x86,fs/resctrl: Move the resctrl filesystem code to live in /fs/resctrl James Morse
2025-04-12 0:18 ` Fenghua Yu
2025-04-14 16:04 ` Reinette Chatre
2025-04-14 23:22 ` Fenghua Yu
2025-04-14 23:29 ` Reinette Chatre
2025-04-14 23:21 ` Fenghua Yu
2025-04-24 17:08 ` James Morse
2025-04-15 0:27 ` Fenghua Yu
2025-04-24 17:11 ` James Morse
2025-04-11 16:42 ` [PATCH v8 18/21] x86,fs/resctrl: Remove duplicated trace header files James Morse
2025-04-16 2:18 ` Reinette Chatre
2025-04-24 17:11 ` James Morse
2025-04-22 14:23 ` Fenghua Yu
2025-04-24 17:11 ` James Morse
2025-04-11 16:42 ` [PATCH v8 19/21] fs/resctrl: Remove unnecessary includes James Morse
2025-04-11 16:42 ` [PATCH v8 20/21] fs/resctrl: Change internal.h's header guard macros James Morse
2025-04-11 16:42 ` [PATCH v8 21/21] x86,fs/resctrl: Move resctrl.rst to live under Documentation/filesystems James Morse
2025-04-16 2:31 ` Reinette Chatre
2025-04-24 17:12 ` James Morse
2025-04-24 17:22 ` Reinette Chatre
2025-04-15 18:48 ` [PATCH v8 00/21] x86/resctrl: Move the resctrl filesystem code to /fs/resctrl Luck, Tony
2025-04-24 17:12 ` James Morse
2025-04-17 12:18 ` Shaopeng Tan (Fujitsu)
2025-04-17 14:47 ` Reinette Chatre
2025-04-18 0:08 ` Moger, Babu
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=a9008c2d-e83d-4bc6-8197-0753666a7ec2@arm.com \
--to=james.morse@arm.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=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=reinette.chatre@intel.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=tony.luck@intel.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox