public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
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>, Tony Luck <tony.luck@intel.com>
Subject: Re: [PATCH v9 08/27] x86/resctrl: Expand the width of domid by replacing mon_data_bits
Date: Thu, 1 May 2025 10:04:10 -0700	[thread overview]
Message-ID: <ac19ac7e-e230-4310-9b70-b9d57ee4439e@intel.com> (raw)
In-Reply-To: <20250425173809.5529-9-james.morse@arm.com>

Hi James,

On 4/25/25 10:37 AM, James Morse wrote:
> ---
>  arch/x86/kernel/cpu/resctrl/ctrlmondata.c | 19 ++++--
>  arch/x86/kernel/cpu/resctrl/internal.h    | 39 ++++++-----
>  arch/x86/kernel/cpu/resctrl/rdtgroup.c    | 79 +++++++++++++++++++++--
>  3 files changed, 103 insertions(+), 34 deletions(-)
> 
> 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
> @@ -667,7 +667,7 @@ int rdtgroup_mondata_show(struct seq_file *m, void *arg)
>  	u32 resid, evtid, domid;

I was expecting this to look differently after reading 
https://lore.kernel.org/lkml/a9008c2d-e83d-4bc6-8197-0753666a7ec2@arm.com/

I believe u32 was used for resid, evtid, and domid because of how they
used to be initialized from the bitfield within the union. With the switch to
a struct that now has the proper types these can also use proper types.

	enum resctrl_res_level resid;
	enum resctrl_event_id evtid;
	int domid;

This highlights that the incorrect type propagated from rdtgroup_mondata_show()
to mon_event_read() where its "int evtid" parameter should also be
"enum resctrl_event_id evtid", which is a good complement to patch #14
that fixes the type used by functions called by mon_event_read().

>  	struct rdtgroup *rdtgrp;
>  	struct rdt_resource *r;
> -	union mon_data_bits md;
> +	struct mon_data *md;
>  	int ret = 0;
>  
>  	rdtgrp = rdtgroup_kn_lock_live(of->kn);


> diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h
> index 36a862a4832f..954dc391fc33 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 the global @mon_data_kn_priv_list list.
> + * @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.
> + *
> + * Pointed to by the kernfs kn->priv field of monitoring event files.
> + * Readers and writers must hold rdtgroup_mutex.
>   */
> -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;
> +	enum resctrl_res_level	rid;
> +	enum resctrl_event_id	evtid;
> +	int			domid;
> +	bool			sum;
>  };
>  

Thank you.

>  /**
> diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
> index eccdfcb1a6f5..7ef5cf0c4d1d 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 containing private data of event files for use by
> + * rdtgroup_mondata_show(). Protected by rdtgroup_mutex.
> + */
> +static LIST_HEAD(mon_data_kn_priv_list);
> +
>  /* The filesystem can only be mounted once. */
>  bool resctrl_mounted;
>  
> @@ -3093,6 +3099,63 @@ 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 across the mon_data directories of all control and
> + * monitor groups for the same event in the same domain. Keep a list of
> + * allocated structures and re-use an existing one with the same values for
> + * @rid, @domid, etc.
> + *
> + * @rid:    The resource id for the event file being created.
> + * @domid:  The domain id for the event file being created.
> + * @mevt:   The type of event file being created.
> + * @do_sum: Whether SNC summing monitors are being created.
> + */
> +static struct mon_data *mon_get_kn_priv(int rid, int domid,

"int rid" -> "enum resctrl_res_level rid"

> +					struct mon_evt *mevt,
> +					bool do_sum)
> +{
> +	struct mon_data *priv;
> +
> +	lockdep_assert_held(&rdtgroup_mutex);
> +
> +	list_for_each_entry(priv, &mon_data_kn_priv_list, list) {
> +		if (priv->rid == rid && priv->domid == domid &&
> +		    priv->sum == do_sum && priv->evtid == mevt->evtid)
> +			return priv;
> +	}
> +
> +	priv = kzalloc(sizeof(*priv), GFP_KERNEL);
> +	if (!priv)
> +		return NULL;
> +
> +	priv->rid = rid;
> +	priv->domid = domid;
> +	priv->sum = do_sum;
> +	priv->evtid = mevt->evtid;
> +	list_add_tail(&priv->list, &mon_data_kn_priv_list);
> +
> +	return priv;
> +}
> +
> +/**
> + * mon_put_kn_priv() - Free all allocated mon_data structures.
> + *
> + * Called when resctrl file system is unmounted.
> + */
> +static void mon_put_kn_priv(void)
> +{
> +	struct mon_data *priv, *tmp;
> +
> +	lockdep_assert_held(&rdtgroup_mutex);
> +
> +	list_for_each_entry_safe(priv, tmp, &mon_data_kn_priv_list, list) {
> +		list_del(&priv->list);
> +		kfree(priv);
> +	}
> +}
> +
>  static void resctrl_fs_teardown(void)
>  {
>  	lockdep_assert_held(&rdtgroup_mutex);

Reinette


  reply	other threads:[~2025-05-01 17:04 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
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 [this message]
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=ac19ac7e-e230-4310-9b70-b9d57ee4439e@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=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