|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v8 20/24] x86: L2 CAT: implement set value flow.
On Wed, Feb 15, 2017 at 04:49:35PM +0800, Yi Sun wrote:
> This patch implements L2 CAT set value related callback functions
> and domctl interface.
>
> Signed-off-by: Yi Sun <yi.y.sun@xxxxxxxxxxxxxxx>
> ---
> v8:
> - modify 'l2_cat_write_msr' to 'void'.
> ---
> xen/arch/x86/domctl.c | 6 +++
> xen/arch/x86/psr.c | 95
> +++++++++++++++++++++++++++++++++++++++++
> xen/include/asm-x86/msr-index.h | 1 +
> xen/include/public/domctl.h | 1 +
> 4 files changed, 103 insertions(+)
>
> diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
> index 68c2d60..38dc087 100644
> --- a/xen/arch/x86/domctl.c
> +++ b/xen/arch/x86/domctl.c
> @@ -1439,6 +1439,12 @@ long arch_do_domctl(
> PSR_CBM_TYPE_L3_DATA);
> break;
>
> + case XEN_DOMCTL_PSR_CAT_OP_SET_L2_CBM:
> + ret = psr_set_val(d, domctl->u.psr_cat_op.target,
> + domctl->u.psr_cat_op.data,
> + PSR_CBM_TYPE_L2);
> + break;
> +
> case XEN_DOMCTL_PSR_CAT_OP_GET_L3_CBM:
> ret = psr_get_val(d, domctl->u.psr_cat_op.target,
> &domctl->u.psr_cat_op.data,
> diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c
> index 2adf62c..5604e03 100644
> --- a/xen/arch/x86/psr.c
> +++ b/xen/arch/x86/psr.c
> @@ -755,10 +755,105 @@ static bool l2_cat_get_val(const struct feat_node
> *feat, unsigned int cos,
> return true;
> }
>
> +static unsigned int l2_cat_get_cos_num(const struct feat_node *feat)
> +{
> + /* L2 CAT uses one COS. */
> + return 1;
> +}
> +
> +static int l2_cat_get_old_val(uint64_t val[],
> + const struct feat_node *feat,
> + unsigned int old_cos)
> +{
> + if ( old_cos > feat->info.l2_cat_info.cos_max )
> + /* Use default value. */
> + old_cos = 0;
> +
> + val[0] = feat->cos_reg_val[old_cos];
> +
> + return 0;
> +}
> +
> +static int l2_cat_set_new_val(uint64_t val[],
> + const struct feat_node *feat,
> + enum cbm_type type,
> + uint64_t m)
> +{
> + if ( !psr_check_cbm(feat->info.l2_cat_info.cbm_len, m) )
> + return -EINVAL;
> +
> + val[0] = m;
> +
> + return 0;
> +}
> +
> +static int l2_cat_compare_val(const uint64_t val[],
> + const struct feat_node *feat,
> + unsigned int cos, bool *found)
> +{
> + uint64_t l2_def_cbm;
> +
> + l2_def_cbm = (1ull << feat->info.l2_cat_info.cbm_len) - 1;
> +
> + if ( cos > feat->info.l2_cat_info.cos_max )
> + {
> + if ( val[0] != l2_def_cbm )
> + {
> + *found = false;
> + return -ENOENT;
> + }
> + *found = true;
> + }
> + else
> + *found = (val[0] == feat->cos_reg_val[cos]);
> +
> + return 0;
The logic of this function is kind of weird IMHO, you seem to be able to return
an error, and also a parameter that indicates success ("found"). Can't this be
simplified to simply return an error code, and the found parameter removed?
Roger.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |