From: Yi Sun <yi.y.sun@linux.intel.com>
To: xen-devel@lists.xenproject.org
Cc: "Wei Liu" <wei.liu2@citrix.com>,
"Chao Peng" <chao.p.peng@linux.intel.com>,
"Yi Sun" <yi.y.sun@linux.intel.com>,
"Ian Jackson" <ian.jackson@eu.citrix.com>,
"Roger Pau Monné" <roger.pau@citrix.com>
Subject: [PATCH v4 09/15] tools: implement the new libxc get hw info interface
Date: Sat, 23 Sep 2017 17:48:18 +0800 [thread overview]
Message-ID: <1506160104-5890-10-git-send-email-yi.y.sun@linux.intel.com> (raw)
In-Reply-To: <1506160104-5890-1-git-send-email-yi.y.sun@linux.intel.com>
This patch implements a new libxc get hw info interface and corresponding
data structures. It also changes libxl_psr.c to call this new interface.
Signed-off-by: Yi Sun <yi.y.sun@linux.intel.com>
---
CC: Wei Liu <wei.liu2@citrix.com>
CC: Ian Jackson <ian.jackson@eu.citrix.com>
CC: Roger Pau Monné <roger.pau@citrix.com>
CC: Chao Peng <chao.p.peng@linux.intel.com>
v4:
- remove 'ALLOC_' from macro names.
(suggested by Roger Pau Monné)
- remove 'XC_PSR_FEAT_UNKNOWN' which is not necessary.
(suggested by Roger Pau Monné)
- remove 'FEAT_' from enum item names.
(suggested by Roger Pau Monné)
- remove 'xc_' from struct name.
(suggested by Roger Pau Monné)
- adjust codes to reduce indentation.
(suggested by Roger Pau Monné)
- assert for not happened case.
(suggested by Roger Pau Monné)
- add LOGE to show errno.
(suggested by Roger Pau Monné)
v3:
- rename 'psr_cat/PSR_CAT' to 'psr_alloc/PSR_ALLOC' and remove 'op/OP'
from name.
(suggested by Roger Pau Monné)
- remove 'info' from 'xc_cat_info' and 'xc_mba_info'.
(suggested by Roger Pau Monné)
- set errno in 'xc_psr_get_hw_info'.
(suggested by Roger Pau Monné)
- remove 'inline'.
(suggested by Roger Pau Monné)
- remove 'psr' from 'libxl__psr_feat_type_to_libxc_psr_feat_type' to make
function name shorter.
(suggested by Roger Pau Monné)
- check 'xc_type' in 'libxl_psr_cat_get_info'.
(suggested by Roger Pau Monné)
v2:
- split this patch out from a big patch in v1.
(suggested by Wei Liu)
- change 'CAT_INFO' and 'MBA_INFO' to 'CAT' and 'MBA'.
(suggested by Chao Peng)
---
tools/libxc/include/xenctrl.h | 29 +++++++++++++++++++---
tools/libxc/xc_psr.c | 56 +++++++++++++++++++++++++++++--------------
tools/libxl/libxl_psr.c | 36 ++++++++++++++++++++++++++--
3 files changed, 98 insertions(+), 23 deletions(-)
diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
index 43151cb..58ba87c 100644
--- a/tools/libxc/include/xenctrl.h
+++ b/tools/libxc/include/xenctrl.h
@@ -2459,6 +2459,30 @@ enum xc_psr_cat_type {
};
typedef enum xc_psr_cat_type xc_psr_cat_type;
+enum xc_psr_feat_type {
+ XC_PSR_CAT_L3,
+ XC_PSR_CAT_L2,
+ XC_PSR_MBA,
+};
+typedef enum xc_psr_feat_type xc_psr_feat_type;
+
+struct xc_psr_hw_info {
+ union {
+ struct {
+ uint32_t cos_max;
+ uint32_t cbm_len;
+ bool cdp_enabled;
+ } cat;
+
+ struct {
+ uint32_t cos_max;
+ uint32_t thrtl_max;
+ bool linear;
+ } mba;
+ } u;
+};
+typedef struct xc_psr_hw_info xc_psr_hw_info;
+
int xc_psr_cmt_attach(xc_interface *xch, uint32_t domid);
int xc_psr_cmt_detach(xc_interface *xch, uint32_t domid);
int xc_psr_cmt_get_domain_rmid(xc_interface *xch, uint32_t domid,
@@ -2480,9 +2504,8 @@ int xc_psr_cat_set_domain_data(xc_interface *xch, uint32_t domid,
int xc_psr_cat_get_domain_data(xc_interface *xch, uint32_t domid,
xc_psr_cat_type type, uint32_t target,
uint64_t *data);
-int xc_psr_cat_get_info(xc_interface *xch, uint32_t socket, unsigned int lvl,
- uint32_t *cos_max, uint32_t *cbm_len,
- bool *cdp_enabled);
+int xc_psr_get_hw_info(xc_interface *xch, uint32_t socket,
+ xc_psr_feat_type type, xc_psr_hw_info *hw_info);
int xc_get_cpu_levelling_caps(xc_interface *xch, uint32_t *caps);
int xc_get_cpu_featureset(xc_interface *xch, uint32_t index,
diff --git a/tools/libxc/xc_psr.c b/tools/libxc/xc_psr.c
index 623e26b..f2b5ee6 100644
--- a/tools/libxc/xc_psr.c
+++ b/tools/libxc/xc_psr.c
@@ -323,37 +323,57 @@ int xc_psr_cat_get_domain_data(xc_interface *xch, uint32_t domid,
return rc;
}
-int xc_psr_cat_get_info(xc_interface *xch, uint32_t socket, unsigned int lvl,
- uint32_t *cos_max, uint32_t *cbm_len, bool *cdp_enabled)
+int xc_psr_get_hw_info(xc_interface *xch, uint32_t socket,
+ xc_psr_feat_type type, xc_psr_hw_info *hw_info)
{
int rc = -1;
DECLARE_SYSCTL;
+ if ( !hw_info )
+ {
+ errno = EINVAL;
+ return rc;
+ }
+
sysctl.cmd = XEN_SYSCTL_psr_alloc;
sysctl.u.psr_alloc.target = socket;
- switch ( lvl )
+ switch ( type )
{
- case 2:
+ case XC_PSR_CAT_L2:
sysctl.u.psr_alloc.cmd = XEN_SYSCTL_PSR_get_l2_info;
rc = xc_sysctl(xch, &sysctl);
- if ( !rc )
- {
- *cos_max = sysctl.u.psr_alloc.u.cat_info.cos_max;
- *cbm_len = sysctl.u.psr_alloc.u.cat_info.cbm_len;
- *cdp_enabled = false;
- }
+ if ( rc )
+ break;
+
+ hw_info->u.cat.cos_max = sysctl.u.psr_alloc.u.cat_info.cos_max;
+ hw_info->u.cat.cbm_len = sysctl.u.psr_alloc.u.cat_info.cbm_len;
+ hw_info->u.cat.cdp_enabled = false;
+
break;
- case 3:
+ case XC_PSR_CAT_L3:
sysctl.u.psr_alloc.cmd = XEN_SYSCTL_PSR_get_l3_info;
rc = xc_sysctl(xch, &sysctl);
- if ( !rc )
- {
- *cos_max = sysctl.u.psr_alloc.u.cat_info.cos_max;
- *cbm_len = sysctl.u.psr_alloc.u.cat_info.cbm_len;
- *cdp_enabled = sysctl.u.psr_alloc.u.cat_info.flags &
- XEN_SYSCTL_PSR_L3_CDP;
- }
+ if ( rc )
+ break;
+
+ hw_info->u.cat.cos_max = sysctl.u.psr_alloc.u.cat_info.cos_max;
+ hw_info->u.cat.cbm_len = sysctl.u.psr_alloc.u.cat_info.cbm_len;
+ hw_info->u.cat.cdp_enabled = sysctl.u.psr_alloc.u.cat_info.flags &
+ XEN_SYSCTL_PSR_L3_CDP;
+
+ break;
+ case XC_PSR_MBA:
+ sysctl.u.psr_alloc.cmd = XEN_SYSCTL_PSR_get_mba_info;
+ rc = xc_sysctl(xch, &sysctl);
+ if ( rc )
+ break;
+
+ hw_info->u.mba.cos_max = sysctl.u.psr_alloc.u.mba_info.cos_max;
+ hw_info->u.mba.thrtl_max = sysctl.u.psr_alloc.u.mba_info.thrtl_max;
+ hw_info->u.mba.linear = sysctl.u.psr_alloc.u.mba_info.flags &
+ XEN_SYSCTL_PSR_MBA_LINEAR;
+
break;
default:
errno = EOPNOTSUPP;
diff --git a/tools/libxl/libxl_psr.c b/tools/libxl/libxl_psr.c
index 4a6978e..7349490 100644
--- a/tools/libxl/libxl_psr.c
+++ b/tools/libxl/libxl_psr.c
@@ -361,6 +361,29 @@ int libxl_psr_cat_get_cbm(libxl_ctx *ctx, uint32_t domid,
return rc;
}
+static xc_psr_feat_type libxl__feat_type_to_libxc_feat_type(
+ libxl_psr_feat_type type, unsigned int lvl)
+{
+ xc_psr_feat_type xc_type;
+
+ switch (type) {
+ case LIBXL_PSR_FEAT_TYPE_CAT:
+ if (lvl == 3)
+ xc_type = XC_PSR_CAT_L3;
+ if (lvl == 2)
+ xc_type = XC_PSR_CAT_L2;
+ break;
+ case LIBXL_PSR_FEAT_TYPE_MBA:
+ xc_type = XC_PSR_MBA;
+ break;
+ default:
+ /* Could not happen */
+ assert(0);
+ }
+
+ return xc_type;
+}
+
int libxl_psr_cat_get_info(libxl_ctx *ctx, libxl_psr_cat_info **info,
unsigned int *nr, unsigned int lvl)
{
@@ -369,6 +392,8 @@ int libxl_psr_cat_get_info(libxl_ctx *ctx, libxl_psr_cat_info **info,
int i = 0, socketid, nr_sockets;
libxl_bitmap socketmap;
libxl_psr_cat_info *ptr;
+ xc_psr_hw_info hw_info;
+ xc_psr_feat_type xc_type;
libxl_bitmap_init(&socketmap);
@@ -385,16 +410,23 @@ int libxl_psr_cat_get_info(libxl_ctx *ctx, libxl_psr_cat_info **info,
goto out;
}
+ xc_type = libxl__feat_type_to_libxc_feat_type(LIBXL_PSR_FEAT_TYPE_CAT, lvl);
+
ptr = libxl__malloc(NOGC, nr_sockets * sizeof(libxl_psr_cat_info));
libxl_for_each_set_bit(socketid, socketmap) {
ptr[i].id = socketid;
- if (xc_psr_cat_get_info(ctx->xch, socketid, lvl, &ptr[i].cos_max,
- &ptr[i].cbm_len, &ptr[i].cdp_enabled)) {
+ if (xc_psr_get_hw_info(ctx->xch, socketid, xc_type, &hw_info)) {
+ LOGE(ERROR, "failed to get hw info");
rc = ERROR_FAIL;
free(ptr);
goto out;
}
+
+ ptr[i].cos_max = hw_info.u.cat.cos_max;
+ ptr[i].cbm_len = hw_info.u.cat.cbm_len;
+ ptr[i].cdp_enabled = hw_info.u.cat.cdp_enabled;
+
i++;
}
--
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-09-23 10:08 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-23 9:48 [PATCH v4 00/15] Enable Memory Bandwidth Allocation in Xen Yi Sun
2017-09-23 9:48 ` [PATCH v4 01/15] docs: create Memory Bandwidth Allocation (MBA) feature document Yi Sun
2017-09-25 15:13 ` Roger Pau Monné
2017-09-23 9:48 ` [PATCH v4 02/15] Rename PSR sysctl/domctl interfaces and xsm policy to make them be general Yi Sun
2017-09-25 16:15 ` Roger Pau Monné
2017-09-26 5:15 ` Yi Sun
2017-09-26 14:19 ` Wei Liu
2017-09-28 2:12 ` Yi Sun
2017-09-28 8:34 ` Wei Liu
2017-09-28 10:21 ` Jan Beulich
2017-09-29 1:34 ` Yi Sun
2017-10-04 5:47 ` Jan Beulich
2017-09-23 9:48 ` [PATCH v4 03/15] x86: rename 'cbm_type' to 'psr_type' to make it general Yi Sun
2017-09-28 10:25 ` Jan Beulich
2017-09-29 1:35 ` Yi Sun
2017-09-23 9:48 ` [PATCH v4 04/15] x86: implement data structure and CPU init flow for MBA Yi Sun
2017-09-26 8:38 ` Roger Pau Monné
2017-09-28 10:27 ` Jan Beulich
2017-09-28 11:00 ` Jan Beulich
2017-09-29 1:53 ` Yi Sun
2017-10-04 5:52 ` Jan Beulich
2017-10-05 4:42 ` Yi Sun
2017-10-05 8:49 ` Jan Beulich
2017-10-05 10:08 ` Yi Sun
2017-09-23 9:48 ` [PATCH v4 05/15] x86: implement get hw info " Yi Sun
2017-09-26 8:46 ` Roger Pau Monné
2017-09-26 11:49 ` Jan Beulich
2017-09-23 9:48 ` [PATCH v4 06/15] x86: implement get value interface " Yi Sun
2017-09-28 11:12 ` Jan Beulich
2017-09-23 9:48 ` [PATCH v4 07/15] x86: implement set value flow " Yi Sun
2017-09-26 9:39 ` Roger Pau Monné
2017-09-28 2:39 ` Yi Sun
2017-09-28 11:15 ` Jan Beulich
2017-09-28 11:36 ` Jan Beulich
2017-09-29 2:56 ` Yi Sun
2017-10-04 5:59 ` Jan Beulich
2017-10-05 4:48 ` Yi Sun
2017-10-05 8:39 ` Roger Pau Monné
2017-10-05 9:39 ` Jan Beulich
2017-10-05 10:10 ` Yi Sun
2017-10-05 8:55 ` Jan Beulich
2017-10-05 10:32 ` Yi Sun
2017-09-23 9:48 ` [PATCH v4 08/15] tools: create general interfaces to support psr allocation features Yi Sun
2017-09-26 10:11 ` Roger Pau Monné
2017-09-23 9:48 ` Yi Sun [this message]
2017-09-26 10:22 ` [PATCH v4 09/15] tools: implement the new libxc get hw info interface Roger Pau Monné
2017-09-23 9:48 ` [PATCH v4 10/15] tools: implement the new libxl " Yi Sun
2017-09-26 10:54 ` Roger Pau Monné
2017-09-23 9:48 ` [PATCH v4 11/15] tools: implement the new xl " Yi Sun
2017-09-26 11:19 ` Roger Pau Monné
2017-09-23 9:48 ` [PATCH v4 12/15] tools: rename 'xc_psr_cat_type' to 'xc_psr_type' Yi Sun
2017-09-26 11:21 ` Roger Pau Monné
2017-09-23 9:48 ` [PATCH v4 13/15] tools: implement new generic get value interface and MBA get value command Yi Sun
2017-09-26 11:34 ` Roger Pau Monné
2017-09-23 9:48 ` [PATCH v4 14/15] tools: implement new generic set value interface and MBA set " Yi Sun
2017-09-26 11:39 ` Roger Pau Monné
2017-09-28 2:46 ` Yi Sun
2017-09-23 9:48 ` [PATCH v4 15/15] docs: add MBA description in docs Yi Sun
2017-09-26 11:45 ` Roger Pau Monné
2017-09-26 11:48 ` [PATCH v4 00/15] Enable Memory Bandwidth Allocation in Xen Roger Pau Monné
2017-09-28 2:20 ` Yi Sun
2017-09-28 15:57 ` Wei Liu
2017-09-29 2:58 ` Yi Sun
2017-09-29 8:02 ` 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=1506160104-5890-10-git-send-email-yi.y.sun@linux.intel.com \
--to=yi.y.sun@linux.intel.com \
--cc=chao.p.peng@linux.intel.com \
--cc=ian.jackson@eu.citrix.com \
--cc=roger.pau@citrix.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xenproject.org \
/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).