diff mbox

[v5,23/24] tools: L2 CAT: support set cbm for L2 CAT.

Message ID 1484704967-5609-24-git-send-email-yi.y.sun@linux.intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Yi Sun Jan. 18, 2017, 2:02 a.m. UTC
This patch implements the xl/xc changes to support set CBM
for L2 CAT.

The new level option is introduced to original CAT setting
command in order to set CBM for specified level CAT.
- 'xl psr-cat-cbm-set' is updated to set cache capacity
  bitmasks(CBM) for a domain according to input cache level.

root@:~$ xl psr-cat-cbm-set -l2 1 0x7f

root@:~$ xl psr-cat-show -l2 1
Socket ID       : 0
Default CBM     : 0xff
   ID                     NAME             CBM
    1                 ubuntu14            0x7f

Signed-off-by: He Chen <he.chen@linux.intel.com>
Signed-off-by: Yi Sun <yi.y.sun@linux.intel.com>
---
 tools/libxc/xc_psr.c      |  3 +++
 tools/libxl/xl_cmdimpl.c  | 31 ++++++++++++++++++++-----------
 tools/libxl/xl_cmdtable.c |  1 +
 3 files changed, 24 insertions(+), 11 deletions(-)

Comments

Dario Faggioli Jan. 18, 2017, 8:51 a.m. UTC | #1
On Wed, 2017-01-18 at 10:02 +0800, Yi Sun wrote:
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -9523,19 +9523,21 @@ int main_psr_cat_cbm_set(int argc, char
> **argv)
>      char *value;
>      libxl_string_list socket_list;
>      unsigned long start, end;
> -    int i, j, len;
> +    unsigned int i, j, len;
>
This type change has nothing to do with this very patch, has it?

> +    unsigned int lvl = 3;
>  
Yeah, well, I understand that it's an improvement, and that, while
you're making changes in the area, you may want to do it... but at the
same time it is undeniably confusing to see the change here.

Personally, I don't like it to be part of this patch, but this is not
my call. :-)

> @@ -9555,17 +9557,24 @@ int main_psr_cat_cbm_set(int argc, char
> **argv)
>      case 'c':
>          opt_code = 1;
>          break;
> +    case 'l':
> +        lvl = atoi(optarg);
> +        break;
>      }
>  
> -    if (opt_data && opt_code) {
> -        fprintf(stderr, "Cannot handle -c and -d at the same
> time\n");
> -        return -1;
> -    } else if (opt_data) {
> -        type = LIBXL_PSR_CBM_TYPE_L3_CBM_DATA;
> -    } else if (opt_code) {
> -        type = LIBXL_PSR_CBM_TYPE_L3_CBM_CODE;
> -    } else {
> -        type = LIBXL_PSR_CBM_TYPE_L3_CBM;
> +    if (lvl == 2)
> +        type = LIBXL_PSR_CBM_TYPE_L2_CBM;
> +    else if (lvl == 3) {
> +        if (opt_data && opt_code) {
> +            fprintf(stderr, "Cannot handle -c and -d at the same
> time\n");
> +            return ERROR_FAIL;
>
When the xl program is terminating --and in this case it is, as we are
returning from a main_foo_bar() function-- the exit code should be
either EXIT_SUCCESS (if everything went ok) or EXIT_FAILURE (if
something went wrong, like in this case).

I know this not yet happens everywhere in xl, but, please, let's cope
with that for new code.

Apart of these two things I've mentioned, the patch looks ok to me.

Regards,
Dario

> +        } else if (opt_data) {
> +            type = LIBXL_PSR_CBM_TYPE_L3_CBM_DATA;
> +        } else if (opt_code) {
> +            type = LIBXL_PSR_CBM_TYPE_L3_CBM_CODE;
> +        } else {
> +            type = LIBXL_PSR_CBM_TYPE_L3_CBM;
> +        }
>      }
>  
>      if (libxl_bitmap_is_empty(&target_map))
> diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c
> index c5fbad4..32c3ee5 100644
> --- a/tools/libxl/xl_cmdtable.c
> +++ b/tools/libxl/xl_cmdtable.c
> @@ -550,6 +550,7 @@ struct cmd_spec cmd_table[] = {
>        "Set cache capacity bitmasks(CBM) for a domain",
>        "[options] <Domain> <CBM>",
>        "-s <socket>       Specify the socket to process, otherwise
> all sockets are processed\n"
> +      "-l <level>        Specify the cache level to process,
> otherwise L3 cache is processed\n"
>        "-c                Set code CBM if CDP is supported\n"
>        "-d                Set data CBM if CDP is supported\n"
>      },
diff mbox

Patch

diff --git a/tools/libxc/xc_psr.c b/tools/libxc/xc_psr.c
index f0aed2d..67556bb 100644
--- a/tools/libxc/xc_psr.c
+++ b/tools/libxc/xc_psr.c
@@ -266,6 +266,9 @@  int xc_psr_cat_set_domain_data(xc_interface *xch, uint32_t domid,
     case XC_PSR_CAT_L3_CBM_DATA:
         cmd = XEN_DOMCTL_PSR_CAT_OP_SET_L3_DATA;
         break;
+    case XC_PSR_CAT_L2_CBM:
+        cmd = XEN_DOMCTL_PSR_CAT_OP_SET_L2_CBM;
+        break;
     default:
         errno = EINVAL;
         return -1;
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index cdcee5f..a32438c 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -9523,19 +9523,21 @@  int main_psr_cat_cbm_set(int argc, char **argv)
     char *value;
     libxl_string_list socket_list;
     unsigned long start, end;
-    int i, j, len;
+    unsigned int i, j, len;
+    unsigned int lvl = 3;
 
     static struct option opts[] = {
         {"socket", 1, 0, 's'},
         {"data", 0, 0, 'd'},
         {"code", 0, 0, 'c'},
+        {"level", 1, 0, 'l'},
         COMMON_LONG_OPTS
     };
 
     libxl_socket_bitmap_alloc(ctx, &target_map, 0);
     libxl_bitmap_set_none(&target_map);
 
-    SWITCH_FOREACH_OPT(opt, "s:cd", opts, "psr-cat-cbm-set", 2) {
+    SWITCH_FOREACH_OPT(opt, "s:l:cd", opts, "psr-cat-cbm-set", 2) {
     case 's':
         trim(isspace, optarg, &value);
         split_string_into_string_list(value, ",", &socket_list);
@@ -9555,17 +9557,24 @@  int main_psr_cat_cbm_set(int argc, char **argv)
     case 'c':
         opt_code = 1;
         break;
+    case 'l':
+        lvl = atoi(optarg);
+        break;
     }
 
-    if (opt_data && opt_code) {
-        fprintf(stderr, "Cannot handle -c and -d at the same time\n");
-        return -1;
-    } else if (opt_data) {
-        type = LIBXL_PSR_CBM_TYPE_L3_CBM_DATA;
-    } else if (opt_code) {
-        type = LIBXL_PSR_CBM_TYPE_L3_CBM_CODE;
-    } else {
-        type = LIBXL_PSR_CBM_TYPE_L3_CBM;
+    if (lvl == 2)
+        type = LIBXL_PSR_CBM_TYPE_L2_CBM;
+    else if (lvl == 3) {
+        if (opt_data && opt_code) {
+            fprintf(stderr, "Cannot handle -c and -d at the same time\n");
+            return ERROR_FAIL;
+        } else if (opt_data) {
+            type = LIBXL_PSR_CBM_TYPE_L3_CBM_DATA;
+        } else if (opt_code) {
+            type = LIBXL_PSR_CBM_TYPE_L3_CBM_CODE;
+        } else {
+            type = LIBXL_PSR_CBM_TYPE_L3_CBM;
+        }
     }
 
     if (libxl_bitmap_is_empty(&target_map))
diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c
index c5fbad4..32c3ee5 100644
--- a/tools/libxl/xl_cmdtable.c
+++ b/tools/libxl/xl_cmdtable.c
@@ -550,6 +550,7 @@  struct cmd_spec cmd_table[] = {
       "Set cache capacity bitmasks(CBM) for a domain",
       "[options] <Domain> <CBM>",
       "-s <socket>       Specify the socket to process, otherwise all sockets are processed\n"
+      "-l <level>        Specify the cache level to process, otherwise L3 cache is processed\n"
       "-c                Set code CBM if CDP is supported\n"
       "-d                Set data CBM if CDP is supported\n"
     },