public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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

  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