lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <8626fde4-ed22-be80-e36f-45a16e5eceaa@amd.com>
Date:   Tue, 15 Jun 2021 12:51:55 -0500
From:   Babu Moger <babu.moger@....com>
To:     James Morse <james.morse@....com>, x86@...nel.org,
        linux-kernel@...r.kernel.org
Cc:     Fenghua Yu <fenghua.yu@...el.com>,
        Reinette Chatre <reinette.chatre@...el.com>,
        Thomas Gleixner <tglx@...utronix.de>,
        Ingo Molnar <mingo@...hat.com>, Borislav Petkov <bp@...en8.de>,
        H Peter Anvin <hpa@...or.com>,
        shameerali.kolothum.thodi@...wei.com,
        Jamie Iles <jamie@...iainc.com>,
        D Scott Phillips OS <scott@...amperecomputing.com>,
        lcherian@...vell.com
Subject: Re: [PATCH v4 03/24] x86/resctrl: Add a separate schema list for
 resctrl



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@...iainc.com>
> Signed-off-by: James Morse <james.morse@....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 */
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ