Message ID | 1481688484-5093-8-git-send-email-yi.y.sun@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
>>> On 14.12.16 at 05:07, <yi.y.sun@linux.intel.com> wrote: > This patch implements get value flow including L3 CAT callback > function. > > It also changes domctl interface to make it more general. > > With this patch, 'psr-cat-show' can work for L3 CAT. How about CDP? You don't implement anything for it here, and looking over the subjects of the remaining patches there also doesn't seem to be anything to come. Jan
On 17-01-10 06:50:36, Jan Beulich wrote: > >>> On 14.12.16 at 05:07, <yi.y.sun@linux.intel.com> wrote: > > This patch implements get value flow including L3 CAT callback > > function. > > > > It also changes domctl interface to make it more general. > > > > With this patch, 'psr-cat-show' can work for L3 CAT. > > How about CDP? You don't implement anything for it here, and looking > over the subjects of the remaining patches there also doesn't seem to > be anything to come. > I split CDP codes out to a few patches from 13 to 16. CDP is a stand alone feature now but not combined with L3 CAT. [PATCH v4 13/24] x86: refactor psr: implement CPU init and free flow for CDP. > Jan
>>> On 11.01.17 at 06:16, <yi.y.sun@linux.intel.com> wrote: > On 17-01-10 06:50:36, Jan Beulich wrote: >> >>> On 14.12.16 at 05:07, <yi.y.sun@linux.intel.com> wrote: >> > This patch implements get value flow including L3 CAT callback >> > function. >> > >> > It also changes domctl interface to make it more general. >> > >> > With this patch, 'psr-cat-show' can work for L3 CAT. >> >> How about CDP? You don't implement anything for it here, and looking >> over the subjects of the remaining patches there also doesn't seem to >> be anything to come. >> > I split CDP codes out to a few patches from 13 to 16. CDP is a stand alone > feature now but not combined with L3 CAT. > > [PATCH v4 13/24] x86: refactor psr: implement CPU init and free flow for > CDP. So I guess the "get value" part is to be found there then, too? Because that's what I was looking for before making the remark. Jan
On 17-01-11 06:54:30, Jan Beulich wrote: > >>> On 11.01.17 at 06:16, <yi.y.sun@linux.intel.com> wrote: > > On 17-01-10 06:50:36, Jan Beulich wrote: > >> >>> On 14.12.16 at 05:07, <yi.y.sun@linux.intel.com> wrote: > >> > This patch implements get value flow including L3 CAT callback > >> > function. > >> > > >> > It also changes domctl interface to make it more general. > >> > > >> > With this patch, 'psr-cat-show' can work for L3 CAT. > >> > >> How about CDP? You don't implement anything for it here, and looking > >> over the subjects of the remaining patches there also doesn't seem to > >> be anything to come. > >> > > I split CDP codes out to a few patches from 13 to 16. CDP is a stand alone > > feature now but not combined with L3 CAT. > > > > [PATCH v4 13/24] x86: refactor psr: implement CPU init and free flow for > > CDP. > > So I guess the "get value" part is to be found there then, too? > Because that's what I was looking for before making the remark. > Yes, you can check this one. [PATCH v4 15/24] x86: refactor psr: implement get value flow for CDP. > Jan
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c index 2a2fe04..3d7fc34 100644 --- a/xen/arch/x86/domctl.c +++ b/xen/arch/x86/domctl.c @@ -1404,23 +1404,23 @@ long arch_do_domctl( break; case XEN_DOMCTL_PSR_CAT_OP_GET_L3_CBM: - ret = psr_get_l3_cbm(d, domctl->u.psr_cat_op.target, - &domctl->u.psr_cat_op.data, - PSR_CBM_TYPE_L3); + ret = psr_get_val(d, domctl->u.psr_cat_op.target, + &domctl->u.psr_cat_op.data, + PSR_CBM_TYPE_L3); copyback = 1; break; case XEN_DOMCTL_PSR_CAT_OP_GET_L3_CODE: - ret = psr_get_l3_cbm(d, domctl->u.psr_cat_op.target, - &domctl->u.psr_cat_op.data, - PSR_CBM_TYPE_L3_CODE); + ret = psr_get_val(d, domctl->u.psr_cat_op.target, + &domctl->u.psr_cat_op.data, + PSR_CBM_TYPE_L3_CODE); copyback = 1; break; case XEN_DOMCTL_PSR_CAT_OP_GET_L3_DATA: - ret = psr_get_l3_cbm(d, domctl->u.psr_cat_op.target, - &domctl->u.psr_cat_op.data, - PSR_CBM_TYPE_L3_DATA); + ret = psr_get_val(d, domctl->u.psr_cat_op.target, + &domctl->u.psr_cat_op.data, + PSR_CBM_TYPE_L3_DATA); copyback = 1; break; diff --git a/xen/arch/x86/psr.c b/xen/arch/x86/psr.c index 095b3a7..1ea694e 100644 --- a/xen/arch/x86/psr.c +++ b/xen/arch/x86/psr.c @@ -118,6 +118,9 @@ struct feat_ops { /* get_feat_info is used to get feature HW info. */ bool (*get_feat_info)(const struct feat_node *feat, enum cbm_type type, uint32_t dat[], uint32_t array_len); + /* get_val is used to get feature COS register value. */ + bool (*get_val)(const struct feat_node *feat, unsigned int cos, + enum cbm_type type, uint64_t *val); }; @@ -237,10 +240,26 @@ static bool l3_cat_get_feat_info(const struct feat_node *feat, return true; } +static bool l3_cat_get_val(const struct feat_node *feat, unsigned int cos, + enum cbm_type type, uint64_t *val) +{ + if ( type != PSR_CBM_TYPE_L3 ) + return false; + + if ( cos > feat->info.l3_cat_info.cos_max ) + /* Use default value. */ + cos = 0; + + *val = feat->cos_reg_val[cos]; + + return true; +} + struct feat_ops l3_cat_ops = { .init_feature = l3_cat_init_feature, .get_max_cos_max = l3_cat_get_max_cos_max, .get_feat_info = l3_cat_get_feat_info, + .get_val = l3_cat_get_val, }; static void __init parse_psr_bool(char *s, char *value, char *feature, @@ -474,10 +493,24 @@ int psr_get_info(unsigned int socket, enum cbm_type type, return -ENOENT; } -int psr_get_l3_cbm(struct domain *d, unsigned int socket, - uint64_t *cbm, enum cbm_type type) +int psr_get_val(struct domain *d, unsigned int socket, + uint64_t *val, enum cbm_type type) { - return 0; + const struct psr_socket_info *info = get_socket_info(socket); + unsigned int cos = d->arch.psr_cos_ids[socket]; + const struct feat_node *feat_tmp; + + if ( IS_ERR(info) ) + return PTR_ERR(info); + + list_for_each_entry(feat_tmp, &info->feat_list, list) + { + if ( feat_tmp->ops.get_val(feat_tmp, cos, type, val) ) + /* Found */ + return 0; + } + + return -ENOENT; } int psr_set_l3_cbm(struct domain *d, unsigned int socket, diff --git a/xen/include/asm-x86/psr.h b/xen/include/asm-x86/psr.h index c872fff..8e3c90e 100644 --- a/xen/include/asm-x86/psr.h +++ b/xen/include/asm-x86/psr.h @@ -70,8 +70,8 @@ void psr_ctxt_switch_to(struct domain *d); int psr_get_info(unsigned int socket, enum cbm_type type, uint32_t dat[], uint32_t array_len); -int psr_get_l3_cbm(struct domain *d, unsigned int socket, - uint64_t *cbm, enum cbm_type type); +int psr_get_val(struct domain *d, unsigned int socket, + uint64_t *val, enum cbm_type type); int psr_set_l3_cbm(struct domain *d, unsigned int socket, uint64_t cbm, enum cbm_type type);
This patch implements get value flow including L3 CAT callback function. It also changes domctl interface to make it more general. With this patch, 'psr-cat-show' can work for L3 CAT. Signed-off-by: Yi Sun <yi.y.sun@linux.intel.com> --- xen/arch/x86/domctl.c | 18 +++++++++--------- xen/arch/x86/psr.c | 39 ++++++++++++++++++++++++++++++++++++--- xen/include/asm-x86/psr.h | 4 ++-- 3 files changed, 47 insertions(+), 14 deletions(-)