From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Yi Sun <yi.y.sun@linux.intel.com>
Cc: wei.liu2@citrix.com, he.chen@linux.intel.com,
andrew.cooper3@citrix.com, dario.faggioli@citrix.com,
ian.jackson@eu.citrix.com, mengxu@cis.upenn.edu,
jbeulich@suse.com, chao.p.peng@linux.intel.com,
xen-devel@lists.xenproject.org
Subject: Re: [PATCH RESEND v5 03/24] x86: refactor psr: implement main data structures.
Date: Mon, 30 Jan 2017 17:20:39 -0500 [thread overview]
Message-ID: <20170130222039.GB13386@char.us.ORACLE.com> (raw)
In-Reply-To: <1484805686-7249-4-git-send-email-yi.y.sun@linux.intel.com>
.snip..
> CDP is a special feature which uses two entries of the array
> for one COS ID. So, the number of CDP COS registers is the half of L3
> CAT. E.g. L3 CAT has 16 COS registers, then CDP has 8 COS registers if
> it is enabled. CDP uses the COS registers array as below.
>
> +-----------+-----------+-----------+-----------+-----------+
> CDP cos_reg_val[] index: | 0 | 1 | 2 | 3 | ... |
> +-----------+-----------+-----------+-----------+-----------+
> value: | cos0 code | cos0 data | cos1 code | cos1 data | ... |
> +-----------+-----------+-----------+-----------+-----------+
>
> For more details, please refer spec and codes.
Thanks for the description. Only had one comment about it:
'spec and codes'? Do you mean to specification. But what codes?
This one?
No need to mention that, that is kind of implicit.
>
> Signed-off-by: Yi Sun <yi.y.sun@linux.intel.com>
> ---
> v5:
> - explain CDP more in commit message.
> - remove exact SDM chapter number but only keep title.
> - remove init_feature from callback function ops structure.
> ---
> xen/arch/x86/psr.c | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 104 insertions(+)
>
> diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c
> index 96a8589..f7ff3fc 100644
> --- a/xen/arch/x86/psr.c
> +++ b/xen/arch/x86/psr.c
> @@ -17,12 +17,116 @@
> #include <xen/cpu.h>
> #include <xen/err.h>
> #include <xen/sched.h>
> +#include <xen/list.h>
> #include <asm/psr.h>
>
> +/*
> + * Terminology:
> + * - CAT Cache Allocation Technology
> + * - CBM Capacity BitMasks
> + * - CDP Code and Data Prioritization
> + * - COS/CLOS Class of Service. Also mean COS registers.
> + * - COS_MAX Max number of COS for the feature (minus 1)
> + * - MSRs Machine Specific Registers
> + * - PSR Intel Platform Shared Resource
> + */
> +
> #define PSR_CMT (1<<0)
> #define PSR_CAT (1<<1)
> #define PSR_CDP (1<<2)
>
> +/*
> + * Per SDM chapter 'Cache Allocation Technology: Cache Mask Configuration',
> + * the MSRs range from 0C90H through 0D0FH (inclusive), enables support for
s/enables/enable/
> + * up to 128 L3 CAT Classes of Service. The COS_ID=[0,127].
> + *
> + * The MSRs range from 0D10H through 0D4FH (inclusive), enables support for
s/enables/enable/
> + * up to 64 L2 CAT COS. The COS_ID=[0,63].
> + *
> + * So, the maximum COS register count of one feature is 128.
> + */
> +#define MAX_COS_REG_CNT 128
> +
> +/*
> + * PSR features are managed per socket. Below structure defines the members
> + * used to manage these features.
> + * feat_mask - Mask used to record features enabled on socket. There may be
> + * some features enabled at same time.
> + * nr_feat - Record how many features enabled.
> + * feat_list - A list used to manage all features enabled.
> + * cos_ref - A reference count array to record how many domains are using the
> + * COS_ID.
> + * Every entry of cos_ref corresponds to one COS ID.
> + * ref_lock - A lock to protect cos_ref.
> + */
> +struct psr_socket_info {
> + /*
> + * bit 0: L3 CAT
> + * bit 1: L3 CDP
> + * bit 2: L2 CAT
Why not an enum? I am going to assume it is due to you programming
this in the MSRs. If so, I would recommend you have #define instead
of a comment.
#define L3_CAT (1U<<0)
#define L3_CDP (1U<<1)
. and so on..
> + */
> + unsigned int feat_mask;
> + unsigned int nr_feat;
> + struct list_head feat_list;
> + unsigned int cos_ref[MAX_COS_REG_CNT];
> + spinlock_t ref_lock;
> +};
> +
> +enum psr_feat_type {
> + PSR_SOCKET_L3_CAT = 0,
> + PSR_SOCKET_L3_CDP,
> + PSR_SOCKET_L2_CAT,
Is there particular mapping between these and the feat_mask bit mask
values?
It kind of begs to be combined (unless you really need the 'feat_mask'
to be of specific order - in which case make sure you have BUILD_BUG_ON
to make sure nobody moves the #define values around - or put a comment
saying that you need the specific order of bits).
> +};
> +
> +/* CAT/CDP HW info data structure. */
> +struct psr_cat_hw_info {
> + unsigned int cbm_len;
> + unsigned int cos_max;
> +};
> +
> +/* Encapsulate feature specific HW info here. */
> +struct feat_hw_info {
> + union {
> + struct psr_cat_hw_info l3_cat_info;
> + };
> +};
> +
> +struct feat_node;
> +
> +/*
> + * This structure defines feature operation callback functions. Every feature
> + * enabled MUST implement such callback functions and register them to ops.
> + *
> + * Feature specific behaviors will be encapsulated into these callback
> + * functions. Then, the main flows will not be changed when introducing a new
> + * feature.
> + */
> +struct feat_ops {
> + /* get_cos_max is used to get feature's cos_max. */
> + unsigned int (*get_cos_max)(const struct feat_node *feat);
> +};
> +
> +/*
> + * This structure represents one feature.
> + * feature - Which feature it is.
> + * feat_ops - Feature operation callback functions.
> + * info - Feature HW info.
> + * cos_reg_val - Array to store the values of COS registers. One entry stores
> + * the value of one COS register.
> + * For L3 CAT and L2 CAT, one entry corresponds to one COS_ID.
> + * For CDP, two entries correspond to one COS_ID. E.g.
> + * COS_ID=0 corresponds to cos_reg_val[0] (Data) and
> + * cos_reg_val[1] (Code).
> + * list - Feature list.
> + */
> +struct feat_node {
> + enum psr_feat_type feature;
> + struct feat_ops ops;
> + struct feat_hw_info info;
> + uint64_t cos_reg_val[MAX_COS_REG_CNT];
> + struct list_head list;
> +};
> +
> struct psr_assoc {
> uint64_t val;
> uint64_t cos_mask;
> --
> 1.9.1
>
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel
next prev parent reply other threads:[~2017-01-30 22:21 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-19 6:01 [PATCH RESEND v5 00/24] Enable L2 Cache Allocation Technology & Refactor psr.c Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 01/24] docs: create L2 Cache Allocation Technology (CAT) feature document Yi Sun
2017-01-20 9:39 ` Tian, Kevin
2017-01-22 2:15 ` Yi Sun
2017-02-08 6:45 ` Tian, Kevin
2017-01-30 18:10 ` Konrad Rzeszutek Wilk
2017-01-30 20:39 ` Konrad Rzeszutek Wilk
2017-02-04 7:24 ` Yi Sun
2017-02-04 7:06 ` Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 02/24] x86: refactor psr: remove L3 CAT/CDP codes Yi Sun
2017-01-30 22:05 ` Konrad Rzeszutek Wilk
2017-01-19 6:01 ` [PATCH RESEND v5 03/24] x86: refactor psr: implement main data structures Yi Sun
2017-01-30 22:20 ` Konrad Rzeszutek Wilk [this message]
2017-01-31 10:10 ` Jan Beulich
2017-01-31 14:12 ` Konrad Rzeszutek Wilk
2017-01-31 15:07 ` Jan Beulich
2017-01-31 17:32 ` Konrad Rzeszutek Wilk
2017-02-05 1:53 ` Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 04/24] x86: refactor psr: implement CPU init and free flow Yi Sun
2017-01-31 2:44 ` Konrad Rzeszutek Wilk
2017-01-31 10:14 ` Jan Beulich
2017-01-31 14:13 ` Konrad Rzeszutek Wilk
2017-01-31 10:53 ` Andrew Cooper
2017-01-19 6:01 ` [PATCH RESEND v5 05/24] x86: refactor psr: implement Domain init/free and schedule flows Yi Sun
2017-01-31 19:52 ` Konrad Rzeszutek Wilk
2017-01-19 6:01 ` [PATCH RESEND v5 06/24] x86: refactor psr: implement get hw info flow Yi Sun
2017-01-31 20:17 ` Konrad Rzeszutek Wilk
2017-01-19 6:01 ` [PATCH RESEND v5 07/24] x86: refactor psr: implement get value flow Yi Sun
2017-01-31 20:29 ` Konrad Rzeszutek Wilk
2017-02-07 2:47 ` Yi Sun
2017-02-07 13:56 ` Konrad Rzeszutek Wilk
2017-01-19 6:01 ` [PATCH RESEND v5 08/24] x86: refactor psr: set value: implement framework Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 09/24] x86: refactor psr: set value: assemble features value array Yi Sun
2017-01-31 20:57 ` Konrad Rzeszutek Wilk
2017-02-07 2:51 ` Yi Sun
2017-02-07 13:57 ` Konrad Rzeszutek Wilk
2017-01-19 6:01 ` [PATCH RESEND v5 10/24] x86: refactor psr: set value: implement cos finding flow Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 11/24] x86: refactor psr: set value: implement cos id picking flow Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 12/24] x86: refactor psr: set value: implement write msr flow Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 13/24] x86: refactor psr: implement CPU init and free flow for CDP Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 14/24] x86: refactor psr: implement get hw info " Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 15/24] x86: refactor psr: implement get value " Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 16/24] x86: refactor psr: implement set value callback functions " Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 17/24] x86: L2 CAT: implement CPU init and free flow Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 18/24] x86: L2 CAT: implement get hw info flow Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 19/24] x86: L2 CAT: implement get value flow Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 20/24] x86: L2 CAT: implement set " Yi Sun
2017-01-19 6:01 ` [PATCH RESEND v5 21/24] tools: L2 CAT: support get HW info for L2 CAT Yi Sun
2017-01-27 15:18 ` Wei Liu
2017-01-19 6:01 ` [PATCH RESEND v5 22/24] tools: L2 CAT: support show cbm " Yi Sun
2017-01-27 15:18 ` Wei Liu
2017-01-19 6:01 ` [PATCH RESEND v5 23/24] tools: L2 CAT: support set " Yi Sun
2017-01-27 15:18 ` Wei Liu
2017-01-19 6:01 ` [PATCH RESEND v5 24/24] docs: add L2 CAT description in docs Yi Sun
2017-01-27 15:18 ` Wei Liu
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=20170130222039.GB13386@char.us.ORACLE.com \
--to=konrad.wilk@oracle.com \
--cc=andrew.cooper3@citrix.com \
--cc=chao.p.peng@linux.intel.com \
--cc=dario.faggioli@citrix.com \
--cc=he.chen@linux.intel.com \
--cc=ian.jackson@eu.citrix.com \
--cc=jbeulich@suse.com \
--cc=mengxu@cis.upenn.edu \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xenproject.org \
--cc=yi.y.sun@linux.intel.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;
as well as URLs for NNTP newsgroup(s).