[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v10 16/25] x86: refactor psr: CDP: implement get value flow.
This patch implements L3 CDP get value callback function. With this patch, 'psr-cat-show' can work for L3 CDP. Signed-off-by: Yi Sun <yi.y.sun@xxxxxxxxxxxxxxx> --- v10: - add 'enum cbm_type type' into 'get_val' parameters to handle CDP case. (suggested by Jan Beulich) v9: - modify the type of 'l3_cdp_get_val' to 'void'. - cos checking has been done in common function so remove related codes in CDP callback function. (suggested by Jan Beulich) - changes about 'uint64_t' to 'uint32_t'. (suggested by Jan Beulich) v5: - remove type check in callback function. (suggested by Jan Beulich) v4: - create this patch to make codes easier to understand. (suggested by Jan Beulich) --- xen/arch/x86/psr.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c index f0611ad..aced012 100644 --- a/xen/arch/x86/psr.c +++ b/xen/arch/x86/psr.c @@ -100,7 +100,7 @@ struct feat_node { /* get_val is used to get feature COS register value. */ void (*get_val)(const struct feat_node *feat, unsigned int cos, - uint32_t *val); + enum cbm_type type, uint32_t *val); /* write_msr is used to write out feature MSR register. */ void (*write_msr)(unsigned int cos, uint32_t val, @@ -366,7 +366,7 @@ static bool cat_get_feat_info(const struct feat_node *feat, } static void cat_get_val(const struct feat_node *feat, unsigned int cos, - uint32_t *val) + enum cbm_type type, uint32_t *val) { *val = feat->cos_reg_val[cos]; } @@ -401,9 +401,19 @@ static bool l3_cdp_get_feat_info(const struct feat_node *feat, return true; } +static void l3_cdp_get_val(const struct feat_node *feat, unsigned int cos, + enum cbm_type type, uint32_t *val) +{ + if ( type == PSR_CBM_TYPE_L3_DATA ) + *val = get_cdp_data(feat, cos); + else + *val = get_cdp_code(feat, cos); +} + static struct feat_props l3_cdp_props = { .cos_num = 2, .get_feat_info = l3_cdp_get_feat_info, + .get_val = l3_cdp_get_val, }; static void __init parse_psr_bool(char *s, char *value, char *feature, @@ -701,7 +711,7 @@ int psr_get_val(struct domain *d, unsigned int socket, if ( cos > feat->props->cos_max ) cos = 0; - feat->props->get_val(feat, cos, val); + feat->props->get_val(feat, cos, type, val); return 0; } @@ -755,7 +765,7 @@ static int gather_val_array(uint32_t val[], cos = 0; /* Value getting order is same as feature array. */ - feat->props->get_val(feat, cos, &val[0]); + feat->props->get_val(feat, cos, 0, &val[0]); array_len -= feat->props->cos_num; @@ -851,7 +861,7 @@ static int find_cos(const uint32_t val[], unsigned int array_len, * COS ID 0 always stores the default value so input 0 to get * default value. */ - feat->props->get_val(feat, 0, &default_val); + feat->props->get_val(feat, 0, 0, &default_val); /* * Compare value according to feature array order. @@ -912,7 +922,7 @@ static bool fits_cos_max(const uint32_t val[], if ( cos > feat->props->cos_max ) { - feat->props->get_val(feat, 0, &default_val); + feat->props->get_val(feat, 0, 0, &default_val); if ( val[0] != default_val ) return false; } -- 1.9.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |