From: Chao Peng <chao.p.peng@linux.intel.com>
To: xen-devel@lists.xen.org
Cc: wei.liu2@citrix.com, dario.faggioli@citrix.com,
Ian.Jackson@eu.citrix.com, Ian.Campbell@citrix.com,
stefano.stabellini@eu.citrix.com
Subject: [PATCH v2 for Xen 4.6 3/6] tools/libxl: return socket id from libxl_psr_cat_get_l3_info
Date: Tue, 29 Sep 2015 15:49:52 +0800 [thread overview]
Message-ID: <1443512995-11853-4-git-send-email-chao.p.peng@linux.intel.com> (raw)
In-Reply-To: <1443512995-11853-1-git-send-email-chao.p.peng@linux.intel.com>
The entries returned from libxl_psr_cat_get_l3_info are assumed
to be socket-continuous. But this is not true in the hotplug case.
This patch gets the socket bitmap for all the sockets on the system
first and stores the socket id in the structure libxl_psr_cat_info in
libxl_psr_cat_get_l3_info. The xl or similar consumers then can display
socket information correctly.
Signed-off-by: Chao Peng <chao.p.peng@linux.intel.com>
---
v2:
* add libxl_bitmap_init();
* rename target_id to id.
* fix the iteration code in psr_cat_hwinfo().
---
tools/libxl/libxl_psr.c | 23 ++++++++++++++++++-----
tools/libxl/libxl_types.idl | 1 +
tools/libxl/xl_cmdimpl.c | 41 ++++++++++++++++++++---------------------
3 files changed, 39 insertions(+), 26 deletions(-)
diff --git a/tools/libxl/libxl_psr.c b/tools/libxl/libxl_psr.c
index 3378239..30740a1 100644
--- a/tools/libxl/libxl_psr.c
+++ b/tools/libxl/libxl_psr.c
@@ -339,30 +339,43 @@ int libxl_psr_cat_get_l3_info(libxl_ctx *ctx, libxl_psr_cat_info **info,
{
GC_INIT(ctx);
int rc;
- int i, nr_sockets;
+ int i = 0, socket, nr_sockets;
+ libxl_bitmap socketmap;
libxl_psr_cat_info *ptr;
+ libxl_bitmap_init(&socketmap);
+
rc = libxl__count_physical_sockets(gc, &nr_sockets);
if (rc) {
LOGE(ERROR, "failed to get system socket count");
goto out;
}
+ libxl_socket_bitmap_alloc(ctx, &socketmap, nr_sockets);
+ rc = libxl_get_online_socketmap(ctx, &socketmap);
+ if (rc < 0) {
+ LOGE(ERROR, "failed to get available sockets");
+ goto out;
+ }
+
ptr = libxl__malloc(NOGC, nr_sockets * sizeof(libxl_psr_cat_info));
- for (i = 0; i < nr_sockets; i++) {
- if (xc_psr_cat_get_l3_info(ctx->xch, i, &ptr[i].cos_max,
- &ptr[i].cbm_len)) {
+ libxl_for_each_set_bit(socket, socketmap) {
+ ptr[i].id = socket;
+ if (xc_psr_cat_get_l3_info(ctx->xch, socket, &ptr[i].cos_max,
+ &ptr[i].cbm_len)) {
libxl__psr_cat_log_err_msg(gc, errno);
rc = ERROR_FAIL;
free(ptr);
goto out;
}
+ i++;
}
*info = ptr;
- *nr = nr_sockets;
+ *nr = i;
out:
+ libxl_bitmap_dispose(&socketmap);
GC_FREE;
return rc;
}
diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl
index 9f6ec00..dc84864 100644
--- a/tools/libxl/libxl_types.idl
+++ b/tools/libxl/libxl_types.idl
@@ -792,6 +792,7 @@ libxl_psr_cbm_type = Enumeration("psr_cbm_type", [
])
libxl_psr_cat_info = Struct("psr_cat_info", [
+ ("id", uint32),
("cos_max", uint32),
("cbm_len", uint32),
])
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index f01d245..9947dba 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -8384,35 +8384,35 @@ int main_psr_cmt_show(int argc, char **argv)
static int psr_cat_hwinfo(void)
{
int rc;
- int socketid, nr_sockets;
+ int i, nr;
uint32_t l3_cache_size;
libxl_psr_cat_info *info;
printf("Cache Allocation Technology (CAT):\n");
- rc = libxl_psr_cat_get_l3_info(ctx, &info, &nr_sockets);
+ rc = libxl_psr_cat_get_l3_info(ctx, &info, &nr);
if (rc) {
fprintf(stderr, "Failed to get cat info\n");
return rc;
}
- for (socketid = 0; socketid < nr_sockets; socketid++) {
- rc = libxl_psr_cmt_get_l3_cache_size(ctx, socketid, &l3_cache_size);
+ for (i = 0; i < nr; i++) {
+ rc = libxl_psr_cmt_get_l3_cache_size(ctx, info[i].id, &l3_cache_size);
if (rc) {
fprintf(stderr, "Failed to get l3 cache size for socket:%d\n",
- socketid);
+ info[i].id);
goto out;
}
- printf("%-16s: %u\n", "Socket ID", socketid);
+ printf("%-16s: %u\n", "Socket ID", info[i].id);
printf("%-16s: %uKB\n", "L3 Cache", l3_cache_size);
- printf("%-16s: %u\n", "Maximum COS", info->cos_max);
- printf("%-16s: %u\n", "CBM length", info->cbm_len);
+ printf("%-16s: %u\n", "Maximum COS", info[i].cos_max);
+ printf("%-16s: %u\n", "CBM length", info[i].cbm_len);
printf("%-16s: %#llx\n", "Default CBM",
- (1ull << info->cbm_len) - 1);
+ (1ull << info[i].cbm_len) - 1);
}
out:
- libxl_psr_cat_info_list_free(info, nr_sockets);
+ libxl_psr_cat_info_list_free(info, nr);
return rc;
}
@@ -8454,47 +8454,46 @@ static int psr_cat_print_domain_cbm(uint32_t domid, uint32_t socketid)
return 0;
}
-static int psr_cat_print_socket(uint32_t domid, uint32_t socketid,
- libxl_psr_cat_info *info)
+static int psr_cat_print_socket(uint32_t domid, libxl_psr_cat_info *info)
{
int rc;
uint32_t l3_cache_size;
- rc = libxl_psr_cmt_get_l3_cache_size(ctx, socketid, &l3_cache_size);
+ rc = libxl_psr_cmt_get_l3_cache_size(ctx, info->id, &l3_cache_size);
if (rc) {
fprintf(stderr, "Failed to get l3 cache size for socket:%d\n",
- socketid);
+ info->id);
return -1;
}
- printf("%-16s: %u\n", "Socket ID", socketid);
+ printf("%-16s: %u\n", "Socket ID", info->id);
printf("%-16s: %uKB\n", "L3 Cache", l3_cache_size);
printf("%-16s: %#llx\n", "Default CBM", (1ull << info->cbm_len) - 1);
printf("%5s%25s%16s\n", "ID", "NAME", "CBM");
- return psr_cat_print_domain_cbm(domid, socketid);
+ return psr_cat_print_domain_cbm(domid, info->id);
}
static int psr_cat_show(uint32_t domid)
{
- int socketid, nr_sockets;
+ int i, nr;
int rc;
libxl_psr_cat_info *info;
- rc = libxl_psr_cat_get_l3_info(ctx, &info, &nr_sockets);
+ rc = libxl_psr_cat_get_l3_info(ctx, &info, &nr);
if (rc) {
fprintf(stderr, "Failed to get cat info\n");
return rc;
}
- for (socketid = 0; socketid < nr_sockets; socketid++) {
- rc = psr_cat_print_socket(domid, socketid, info + socketid);
+ for (i = 0; i < nr; i++) {
+ rc = psr_cat_print_socket(domid, info + i);
if (rc)
goto out;
}
out:
- libxl_psr_cat_info_list_free(info, nr_sockets);
+ libxl_psr_cat_info_list_free(info, nr);
return rc;
}
--
1.9.1
next prev parent reply other threads:[~2015-09-29 7:49 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-29 7:49 [PATCH v2 for Xen 4.6 0/6] Several PSR fixes in libxl Chao Peng
2015-09-29 7:49 ` [PATCH v2 for Xen 4.6 1/6] tools/libxl: introduce libxl_get_online_socketmap Chao Peng
2015-09-29 9:10 ` Dario Faggioli
2015-09-29 9:22 ` Wei Liu
2015-09-29 7:49 ` [PATCH v2 for Xen 4.6 2/6] tools/libxl: fix socket display error for CMT Chao Peng
2015-09-29 9:06 ` Dario Faggioli
2015-09-29 7:49 ` Chao Peng [this message]
2015-09-29 9:09 ` [PATCH v2 for Xen 4.6 3/6] tools/libxl: return socket id from libxl_psr_cat_get_l3_info Dario Faggioli
2015-09-29 9:22 ` Wei Liu
2015-09-29 7:49 ` [PATCH v2 for Xen 4.6 4/6] tools/libxl: fix range check in main_psr_cat_cbm_set Chao Peng
2015-09-29 7:49 ` [PATCH v2 for Xen 4.6 5/6] docs: make xl-psr.markdown more precise Chao Peng
2015-09-29 9:27 ` Andrew Cooper
2015-09-29 9:55 ` Ian Campbell
2015-09-30 1:34 ` Chao Peng
2015-09-30 8:57 ` Ian Campbell
2015-09-30 9:40 ` Chao Peng
2015-09-29 7:49 ` [PATCH v2 for Xen 4.6 6/6] docs/man: resort sections Chao Peng
2015-09-29 8:53 ` Dario Faggioli
2015-09-29 9:02 ` Wei Liu
2015-09-29 9:33 ` [PATCH v2 for Xen 4.6 0/6] Several PSR fixes in libxl Wei Liu
2015-09-29 10:30 ` Ian Campbell
2015-09-30 1:36 ` Chao Peng
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=1443512995-11853-4-git-send-email-chao.p.peng@linux.intel.com \
--to=chao.p.peng@linux.intel.com \
--cc=Ian.Campbell@citrix.com \
--cc=Ian.Jackson@eu.citrix.com \
--cc=dario.faggioli@citrix.com \
--cc=stefano.stabellini@eu.citrix.com \
--cc=wei.liu2@citrix.com \
--cc=xen-devel@lists.xen.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).