|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v8 13/24] x86: refactor psr: implement CPU init and free flow for CDP.
On Wed, Feb 15, 2017 at 04:49:28PM +0800, Yi Sun wrote:
> This patch implements the CPU init and free flow for CDP including L3 CDP
> initialization callback function.
>
> Signed-off-by: Yi Sun <yi.y.sun@xxxxxxxxxxxxxxx>
> ---
> xen/arch/x86/psr.c | 104
> +++++++++++++++++++++++++++++++++++++++++++++++++----
> 1 file changed, 98 insertions(+), 6 deletions(-)
>
> diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c
> index 82bb8fe..4c08779 100644
> --- a/xen/arch/x86/psr.c
> +++ b/xen/arch/x86/psr.c
> @@ -97,6 +97,7 @@ struct psr_cat_hw_info {
> struct feat_hw_info {
> union {
> struct psr_cat_hw_info l3_cat_info;
> + struct psr_cat_hw_info l3_cdp_info;
> };
> };
>
> @@ -195,6 +196,22 @@ struct feat_node {
> struct list_head list;
> };
>
> +/*
> + * get_data - get DATA COS register value from input COS ID.
> + * @feat: the feature list entry.
> + * @cos: the COS ID.
> + */
> +#define get_cdp_data(feat, cos) \
> + ( feat->cos_reg_val[cos * 2] )
This should be:
((feat)->cos_reg_val[(cos) * 2])
And the same treatment should be applied to the macro below.
> +
> +/*
> + * get_cdp_code - get CODE COS register value from input COS ID.
> + * @feat: the feature list entry.
> + * @cos: the COS ID.
> + */
> +#define get_cdp_code(feat, cos) \
> + ( feat->cos_reg_val[cos * 2 + 1] )
> +
> struct psr_assoc {
> uint64_t val;
> uint64_t cos_mask;
> @@ -217,6 +234,7 @@ static DEFINE_PER_CPU(struct psr_assoc, psr_assoc);
> * cpu_add_remove_lock spinlock.
> */
> static struct feat_node *feat_l3_cat;
> +static struct feat_node *feat_l3_cdp;
>
> /* Common functions. */
> static void free_feature(struct psr_socket_info *info)
> @@ -457,6 +475,63 @@ static const struct feat_ops l3_cat_ops = {
> .write_msr = l3_cat_write_msr,
> };
>
> +/* L3 CDP functions implementation. */
> +static void l3_cdp_init_feature(struct cpuid_leaf regs,
> + struct feat_node *feat,
> + struct psr_socket_info *info)
> +{
> + struct psr_cat_hw_info l3_cdp = { };
> + unsigned int socket;
> + uint64_t val;
> +
> + /* No valid value so do not enable feature. */
> + if ( !regs.a || !regs.d )
> + return;
> +
> + l3_cdp.cbm_len = (regs.a & CAT_CBM_LEN_MASK) + 1;
> + /* Cut half of cos_max when CDP is enabled. */
> + l3_cdp.cos_max = min(opt_cos_max, regs.d & CAT_COS_MAX_MASK) >> 1;
> +
> + /* cos=0 is reserved as default cbm(all ones). */
> + get_cdp_code(feat, 0) =
> + (1ull << l3_cdp.cbm_len) - 1;
I think that all those ull sufixes should be turned into uint64_t casts,
because that's the type that you are actually using. Or else just use ul, which
is the same and shorter.
Roger.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |