xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] xl cpupool-list: add option to list domains
@ 2014-02-18  7:38 Juergen Gross
  2014-02-19 15:07 ` Nate Studer
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Juergen Gross @ 2014-02-18  7:38 UTC (permalink / raw)
  To: xen-devel, Ian.Jackson; +Cc: Juergen Gross

It is rather complicated to obtain the cpupool a domain lives in. Add an
option -d (or --domains) to list all domains running in a cpupool.

Signed-off-by: Juergen Gross <juergen.gross@ts.fujitsu.com>
---
 docs/man/xl.pod.1         |    5 ++++-
 tools/libxl/xl_cmdimpl.c  |   47 ++++++++++++++++++++++++++++++++++++++-------
 tools/libxl/xl_cmdtable.c |    5 +++--
 3 files changed, 47 insertions(+), 10 deletions(-)

diff --git a/docs/man/xl.pod.1 b/docs/man/xl.pod.1
index e7b9de2..547af6d 100644
--- a/docs/man/xl.pod.1
+++ b/docs/man/xl.pod.1
@@ -1019,10 +1019,13 @@ Use the given configuration file.
 
 =back
 
-=item B<cpupool-list> [I<-c|--cpus>] [I<cpu-pool>]
+=item B<cpupool-list> [I<-c|--cpus>] [I<-d|--domains>] [I<cpu-pool>]
 
 List CPU pools on the host.
 If I<-c> is specified, B<xl> prints a list of CPUs used by I<cpu-pool>.
+If I<-d> is specified, B<xl> prints a list of domains in I<cpu-pool> instead
+of the domain count.
+I<-c> and I<-d> are mutually exclusive.
 
 =item B<cpupool-destroy> I<cpu-pool>
 
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index aff6f90..c7b9fce 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -6754,23 +6754,32 @@ int main_cpupoollist(int argc, char **argv)
     int opt;
     static struct option opts[] = {
         {"cpus", 0, 0, 'c'},
+        {"domains", 0, 0, 'd'},
         COMMON_LONG_OPTS,
         {0, 0, 0, 0}
     };
-    int opt_cpus = 0;
+    int opt_cpus = 0, opt_domains = 0;
     const char *pool = NULL;
     libxl_cpupoolinfo *poolinfo;
-    int n_pools, p, c, n;
+    libxl_dominfo *dominfo = NULL;
+    int n_pools, n_domains, p, c, n;
     uint32_t poolid;
     char *name;
     int ret = 0;
 
-    SWITCH_FOREACH_OPT(opt, "hc", opts, "cpupool-list", 0) {
+    SWITCH_FOREACH_OPT(opt, "hcd", opts, "cpupool-list", 0) {
     case 'c':
         opt_cpus = 1;
         break;
+    case 'd':
+        opt_domains = 1;
+        break;
     }
 
+    if (opt_cpus && opt_domains) {
+        fprintf(stderr, "specifying both cpu- and domain-list not allowed\n");
+        return -ERROR_FAIL;
+    }
     if (optind < argc) {
         pool = argv[optind];
         if (libxl_name_to_cpupoolid(ctx, pool, &poolid)) {
@@ -6784,12 +6793,21 @@ int main_cpupoollist(int argc, char **argv)
         fprintf(stderr, "error getting cpupool info\n");
         return -ERROR_NOMEM;
     }
+    if (opt_domains) {
+        dominfo = libxl_list_domain(ctx, &n_domains);
+        if (!dominfo) {
+            fprintf(stderr, "error getting domain info\n");
+            ret = -ERROR_NOMEM;
+            goto out;
+        }
+    }
 
     printf("%-19s", "Name");
     if (opt_cpus)
         printf("CPU list\n");
     else
-        printf("CPUs   Sched     Active   Domain count\n");
+        printf("CPUs   Sched     Active   Domain %s\n",
+               opt_domains ? "list" : "count");
 
     for (p = 0; p < n_pools; p++) {
         if (!ret && (!pool || (poolinfo[p].poolid == poolid))) {
@@ -6808,15 +6826,30 @@ int main_cpupoollist(int argc, char **argv)
                         n++;
                     }
                 if (!opt_cpus) {
-                    printf("%3d %9s       y       %4d", n,
-                           libxl_scheduler_to_string(poolinfo[p].sched),
-                           poolinfo[p].n_dom);
+                    printf("%3d %9s       y     ", n,
+                           libxl_scheduler_to_string(poolinfo[p].sched));
+                    if (opt_domains) {
+                        c = 0;
+                        for (n = 0; n < n_domains; n++) {
+                            if (poolinfo[p].poolid == dominfo[n].cpupool) {
+                                name = libxl_domid_to_name(ctx, dominfo[n].domid);
+                                printf("%s%s", c ? ", " : "", name);
+                                free(name);
+                                c++;
+                            }
+                        }
+                    }
+                    else
+                        printf("  %4d", poolinfo[p].n_dom);
                 }
                 printf("\n");
             }
         }
     }
 
+    if (dominfo)
+        libxl_dominfo_list_free(dominfo, n_domains);
+out:
     libxl_cpupoolinfo_list_free(poolinfo, n_pools);
 
     return ret;
diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c
index ebe0220..8a52d26 100644
--- a/tools/libxl/xl_cmdtable.c
+++ b/tools/libxl/xl_cmdtable.c
@@ -426,8 +426,9 @@ struct cmd_spec cmd_table[] = {
     { "cpupool-list",
       &main_cpupoollist, 0, 0,
       "List CPU pools on host",
-      "[-c|--cpus] [<CPU Pool>]",
-      "-c, --cpus                     Output list of CPUs used by a pool"
+      "[-c|--cpus] [-d|--domains] [<CPU Pool>]",
+      "-c, --cpus                     Output list of CPUs used by a pool\n"
+      "-d, --domains                  Output list of domains running in a pool"
     },
     { "cpupool-destroy",
       &main_cpupooldestroy, 0, 1,
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-03-17  7:52 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-18  7:38 [PATCH] xl cpupool-list: add option to list domains Juergen Gross
2014-02-19 15:07 ` Nate Studer
2014-03-04 12:19 ` Juergen Gross
2014-03-10 11:58 ` Ian Jackson
2014-03-11  7:33   ` Juergen Gross
2014-03-13 16:39     ` Ian Jackson
2014-03-17  7:52       ` Juergen Gross

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).