linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Babu Moger <babu.moger@amd.com>
To: James Morse <james.morse@arm.com>,
	x86@kernel.org, linux-kernel@vger.kernel.org
Cc: Fenghua Yu <fenghua.yu@intel.com>,
	Reinette Chatre <reinette.chatre@intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	H Peter Anvin <hpa@zytor.com>,
	shameerali.kolothum.thodi@huawei.com,
	Jamie Iles <jamie@nuviainc.com>,
	D Scott Phillips OS <scott@os.amperecomputing.com>,
	lcherian@marvell.com
Subject: Re: [PATCH v4 03/24] x86/resctrl: Add a separate schema list for resctrl
Date: Tue, 15 Jun 2021 12:51:55 -0500	[thread overview]
Message-ID: <8626fde4-ed22-be80-e36f-45a16e5eceaa@amd.com> (raw)
In-Reply-To: <20210614200941.12383-4-james.morse@arm.com>



On 6/14/21 3:09 PM, James Morse wrote:
> Resctrl exposes schemata to user-space, which allow the control values
> to be specified for a group of tasks.
> 
> User-visible properties of the interface, (such as the schemata names
> and how the values are parsed) are rooted in a struct provided by the
> architecture code. (struct rdt_hw_resource). Once a second architecture
> uses resctrl, this would allow user-visible properties to diverge
> between architectures.
> 
> These properties should come from the resctrl code that will be common
> to all architectures. Resctrl has no per-schema structure, only struct
> rdt_{hw_,}resource. Create a struct resctrl_schema to hold the
> rdt_resource. Before a second architecture can be supported, this
> structure will also need to hold the schema name visible to user-space
> and the type of configuration values for resctrl.
> 
> Reviewed-by: Jamie Iles <jamie@nuviainc.com>
> Signed-off-by: James Morse <james.morse@arm.com>
> ---
> Changes since v3:
>  * Fixed a spelling mistake, removed a space.
> 
> Changes since v2:
>  * Expanded comments.
>  * Shuffled commit message,
> 
> Changes since v1:
>  * Renamed resctrl_all_schema list
>  * Used schemata_list as a prefix to make these easier to search for
>  * Added kerneldoc string
>  * Removed 'pending configuration' reference in commit message
> ---
>  arch/x86/kernel/cpu/resctrl/internal.h |  1 +
>  arch/x86/kernel/cpu/resctrl/rdtgroup.c | 43 +++++++++++++++++++++++++-
>  include/linux/resctrl.h                | 11 +++++++
>  3 files changed, 54 insertions(+), 1 deletion(-)
> 
> diff --git a/arch/x86/kernel/cpu/resctrl/internal.h b/arch/x86/kernel/cpu/resctrl/internal.h
> index 235cf621c878..f6790d03f056 100644
> --- a/arch/x86/kernel/cpu/resctrl/internal.h
> +++ b/arch/x86/kernel/cpu/resctrl/internal.h
> @@ -106,6 +106,7 @@ extern unsigned int resctrl_cqm_threshold;
>  extern bool rdt_alloc_capable;
>  extern bool rdt_mon_capable;
>  extern unsigned int rdt_mon_features;
> +extern struct list_head resctrl_schema_all;
>  
>  enum rdt_group_type {
>  	RDTCTRL_GROUP = 0,
> diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
> index 9a8665c8ab89..14ea1212f476 100644
> --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c
> +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c
> @@ -39,6 +39,9 @@ static struct kernfs_root *rdt_root;
>  struct rdtgroup rdtgroup_default;
>  LIST_HEAD(rdt_all_groups);
>  
> +/* list of entries for the schemata file */
> +LIST_HEAD(resctrl_schema_all);
> +
>  /* Kernel fs node for "info" directory under root */
>  static struct kernfs_node *kn_info;
>  
> @@ -2109,6 +2112,35 @@ static int rdt_enable_ctx(struct rdt_fs_context *ctx)
>  	return ret;
>  }
>  
> +static int schemata_list_create(void)
> +{
> +	struct resctrl_schema *s;
> +	struct rdt_resource *r;
> +
> +	for_each_alloc_enabled_rdt_resource(r) {
> +		s = kzalloc(sizeof(*s), GFP_KERNEL);
> +		if (!s)
> +			return -ENOMEM;
> +
> +		s->res = r;
> +
> +		INIT_LIST_HEAD(&s->list);
> +		list_add(&s->list, &resctrl_schema_all);
> +	}
> +
> +	return 0;
> +}
> +
> +static void schemata_list_destroy(void)
> +{
> +	struct resctrl_schema *s, *tmp;
> +
> +	list_for_each_entry_safe(s, tmp, &resctrl_schema_all, list) {
> +		list_del(&s->list);
> +		kfree(s);
> +	}
> +}
> +
>  static int rdt_get_tree(struct fs_context *fc)
>  {
>  	struct rdt_fs_context *ctx = rdt_fc2context(fc);
> @@ -2130,11 +2162,17 @@ static int rdt_get_tree(struct fs_context *fc)
>  	if (ret < 0)
>  		goto out_cdp;
>  
> +	ret = schemata_list_create();
> +	if (ret) {
> +		schemata_list_destroy();
> +		goto out_mba;
> +	}
> +
>  	closid_init();
>  
>  	ret = rdtgroup_create_info_dir(rdtgroup_default.kn);
>  	if (ret < 0)
> -		goto out_mba;
> +		goto out_schemata_free;
>  
>  	if (rdt_mon_capable) {
>  		ret = mongroup_create_dir(rdtgroup_default.kn,
> @@ -2184,6 +2222,8 @@ static int rdt_get_tree(struct fs_context *fc)
>  		kernfs_remove(kn_mongrp);
>  out_info:
>  	kernfs_remove(kn_info);
> +out_schemata_free:
> +	schemata_list_destroy();
>  out_mba:
>  	if (ctx->enable_mba_mbps)
>  		set_mba_sc(false);
> @@ -2425,6 +2465,7 @@ static void rdt_kill_sb(struct super_block *sb)
>  	rmdir_all_sub();
>  	rdt_pseudo_lock_release();
>  	rdtgroup_default.mode = RDT_MODE_SHAREABLE;
> +	schemata_list_destroy();
>  	static_branch_disable_cpuslocked(&rdt_alloc_enable_key);
>  	static_branch_disable_cpuslocked(&rdt_mon_enable_key);
>  	static_branch_disable_cpuslocked(&rdt_enable_key);
> diff --git a/include/linux/resctrl.h b/include/linux/resctrl.h
> index be6f5df78e31..425e7913dc8d 100644
> --- a/include/linux/resctrl.h
> +++ b/include/linux/resctrl.h
> @@ -154,4 +154,15 @@ struct rdt_resource {
>  
>  };
>  
> +/**
> + * struct resctrl_schema - configuration abilities of a resource presented to
> + *			   user-space
> + * @list:	Member of resctrl_schema_all.
> + * @res:	The resource structure exported by the architecture to describe
> + *		the hardware that is configured by this schema.
> + */
> +struct resctrl_schema {
> +	struct list_head		list;
> +	struct rdt_resource		*res;

It will be better to be consistent with the naming.
        struct rdt_resource		*resctrl;

> +};
>  #endif /* _RESCTRL_H */
> 

  reply	other threads:[~2021-06-15 17:52 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-14 20:09 [PATCH v4 00/24] x86/resctrl: Merge the CDP resources James Morse
2021-06-14 20:09 ` [PATCH v4 01/24] x86/resctrl: Split struct rdt_resource James Morse
2021-06-15 18:07   ` Reinette Chatre
2021-06-14 20:09 ` [PATCH v4 02/24] x86/resctrl: Split struct rdt_domain James Morse
2021-06-15 17:51   ` Babu Moger
2021-06-17 17:02     ` James Morse
2021-06-15 18:07   ` Reinette Chatre
2021-06-14 20:09 ` [PATCH v4 03/24] x86/resctrl: Add a separate schema list for resctrl James Morse
2021-06-15 17:51   ` Babu Moger [this message]
2021-06-17 17:02     ` James Morse
2021-06-14 20:09 ` [PATCH v4 04/24] x86/resctrl: Pass the schema in info dir's private pointer James Morse
2021-06-14 20:09 ` [PATCH v4 05/24] x86/resctrl: Label the resources with their configuration type James Morse
2021-06-15 18:08   ` Reinette Chatre
2021-06-14 20:09 ` [PATCH v4 06/24] x86/resctrl: Walk the resctrl schema list instead of an arch list James Morse
2021-06-14 20:09 ` [PATCH v4 07/24] x86/resctrl: Store the effective num_closid in the schema James Morse
2021-06-14 20:09 ` [PATCH v4 08/24] x86/resctrl: Add resctrl_arch_get_num_closid() James Morse
2021-06-14 20:09 ` [PATCH v4 09/24] x86/resctrl: Pass the schema to resctrl filesystem functions James Morse
2021-06-15 18:08   ` Reinette Chatre
2021-06-14 20:09 ` [PATCH v4 10/24] x86/resctrl: Swizzle rdt_resource and resctrl_schema in pseudo_lock_region James Morse
2021-06-14 20:09 ` [PATCH v4 11/24] x86/resctrl: Move the schemata names into struct resctrl_schema James Morse
2021-06-15 18:08   ` Reinette Chatre
2021-06-14 20:09 ` [PATCH v4 12/24] x86/resctrl: Group staged configuration into a separate struct James Morse
2021-06-15 18:08   ` Reinette Chatre
2021-06-14 20:09 ` [PATCH v4 13/24] x86/resctrl: Allow different CODE/DATA configurations to be staged James Morse
2021-06-14 20:09 ` [PATCH v4 14/24] x86/resctrl: Rename update_domains() resctrl_arch_update_domains() James Morse
2021-06-14 20:09 ` [PATCH v4 15/24] x86/resctrl: Add a helper to read a closid's configuration James Morse
2021-06-14 20:09 ` [PATCH v4 16/24] x86/resctrl: Add a helper to read/set the CDP configuration James Morse
2021-06-14 20:09 ` [PATCH v4 17/24] x86/resctrl: Pass configuration type to resctrl_arch_get_config() James Morse
2021-06-14 20:09 ` [PATCH v4 18/24] x86/resctrl: Make ctrlval arrays the same size James Morse
2021-06-15 18:09   ` Reinette Chatre
2021-06-17 17:03     ` James Morse
2021-06-14 20:09 ` [PATCH v4 19/24] x86/resctrl: Apply offset correction when config is staged James Morse
2021-06-14 20:09 ` [PATCH v4 20/24] x86/resctrl: Calculate the index from the configuration type James Morse
2021-06-14 20:09 ` [PATCH v4 21/24] x86/resctrl: Merge the ctrl_val arrays James Morse
2021-06-14 20:09 ` [PATCH v4 22/24] x86/resctrl: Remove rdt_cdp_peer_get() James Morse
2021-06-14 20:09 ` [PATCH v4 23/24] x86/resctrl: Expand resctrl_arch_update_domains()'s msr_param range James Morse
2021-06-14 20:09 ` [PATCH v4 24/24] x86/resctrl: Merge the CDP resources James Morse
2021-06-15 16:16 ` [PATCH v4 00/24] " Reinette Chatre
2021-06-15 16:48   ` James Morse
2021-06-15 17:25     ` Borislav Petkov
2021-06-15 18:05     ` Reinette Chatre
2021-06-17 17:03       ` James Morse
2021-06-15 17:50 ` Babu Moger

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=8626fde4-ed22-be80-e36f-45a16e5eceaa@amd.com \
    --to=babu.moger@amd.com \
    --cc=bp@alien8.de \
    --cc=fenghua.yu@intel.com \
    --cc=hpa@zytor.com \
    --cc=james.morse@arm.com \
    --cc=jamie@nuviainc.com \
    --cc=lcherian@marvell.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=reinette.chatre@intel.com \
    --cc=scott@os.amperecomputing.com \
    --cc=shameerali.kolothum.thodi@huawei.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /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;
as well as URLs for NNTP newsgroup(s).