qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 2/5] trace-cmd: Use tracing directory to count CPUs


From: Yoshihiro YUNOMAE
Subject: [Qemu-devel] [PATCH 2/5] trace-cmd: Use tracing directory to count CPUs
Date: Wed, 22 Aug 2012 17:43:12 +0900
User-agent: StGIT/0.14.3

From: Masami Hiramatsu <address@hidden>

Count debugfs/tracing/per_cpu/cpu* to determine the
number of CPUs.

Signed-off-by: Masami Hiramatsu <address@hidden>
Signed-off-by: Yoshihiro YUNOMAE <address@hidden>
---

 trace-record.c |   41 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/trace-record.c b/trace-record.c
index 9dc18a9..ed18951 100644
--- a/trace-record.c
+++ b/trace-record.c
@@ -1179,6 +1179,41 @@ static void expand_event_list(void)
        }
 }
 
+static int count_tracingdir_cpus(void)
+{
+       char *tracing_dir = NULL;
+       char *percpu_dir = NULL;
+       struct dirent **namelist;
+       int count = 0, n;
+
+       /* Count cpus in per_cpu directory */
+       tracing_dir = tracecmd_find_tracing_dir();
+       if (!tracing_dir)
+               return 0;
+       percpu_dir = malloc_or_die(strlen(tracing_dir) + 9);
+       if (!percpu_dir)
+               goto err;
+
+       sprintf(percpu_dir, "%s/per_cpu", tracing_dir);
+
+       n = scandir(percpu_dir, &namelist, NULL, alphasort);
+       if (n > 0) {
+               while (n--) {
+                       if (strncmp("cpu", namelist[n]->d_name, 3) == 0)
+                               count++;
+                       free(namelist[n]);
+               }
+               free(namelist);
+       }
+
+       if (percpu_dir)
+               free(percpu_dir);
+err:
+       if (tracing_dir)
+               free(tracing_dir);
+       return count;
+}
+
 static int count_cpus(void)
 {
        FILE *fp;
@@ -1189,6 +1224,12 @@ static int count_cpus(void)
        size_t n;
        int r;
 
+       cpus = count_tracingdir_cpus();
+       if (cpus > 0)
+               return cpus;
+
+       warning("failed to use tracing_dir to determine number of CPUS");
+
        cpus = sysconf(_SC_NPROCESSORS_CONF);
        if (cpus > 0)
                return cpus;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]