Move the get_possible_cpus() function to shared code.  No functional
changes.

Signed-off-by: Jakub Kicinski <jakub.kicin...@netronome.com>
Reviewed-by: Quentin Monnet <quentin.mon...@netronome.com>
Reviewed-by: Jiong Wang <jiong.w...@netronome.com>
---
 tools/bpf/bpftool/common.c | 58 +++++++++++++++++++++++++++++++++++++-
 tools/bpf/bpftool/main.h   |  3 +-
 tools/bpf/bpftool/map.c    | 56 ------------------------------------
 3 files changed, 59 insertions(+), 58 deletions(-)

diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c
index 465995281dcd..9c620770c6ed 100644
--- a/tools/bpf/bpftool/common.c
+++ b/tools/bpf/bpftool/common.c
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017 Netronome Systems, Inc.
+ * Copyright (C) 2017-2018 Netronome Systems, Inc.
  *
  * This software is dual licensed under the GNU General License Version 2,
  * June 1991 as shown in the file COPYING in the top-level directory of this
@@ -33,6 +33,7 @@
 
 /* Author: Jakub Kicinski <kubak...@wp.pl> */
 
+#include <ctype.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <fts.h>
@@ -420,6 +421,61 @@ void delete_pinned_obj_table(struct pinned_obj_table *tab)
        }
 }
 
+unsigned int get_possible_cpus(void)
+{
+       static unsigned int result;
+       char buf[128];
+       long int n;
+       char *ptr;
+       int fd;
+
+       if (result)
+               return result;
+
+       fd = open("/sys/devices/system/cpu/possible", O_RDONLY);
+       if (fd < 0) {
+               p_err("can't open sysfs possible cpus");
+               exit(-1);
+       }
+
+       n = read(fd, buf, sizeof(buf));
+       if (n < 2) {
+               p_err("can't read sysfs possible cpus");
+               exit(-1);
+       }
+       close(fd);
+
+       if (n == sizeof(buf)) {
+               p_err("read sysfs possible cpus overflow");
+               exit(-1);
+       }
+
+       ptr = buf;
+       n = 0;
+       while (*ptr && *ptr != '\n') {
+               unsigned int a, b;
+
+               if (sscanf(ptr, "%u-%u", &a, &b) == 2) {
+                       n += b - a + 1;
+
+                       ptr = strchr(ptr, '-') + 1;
+               } else if (sscanf(ptr, "%u", &a) == 1) {
+                       n++;
+               } else {
+                       assert(0);
+               }
+
+               while (isdigit(*ptr))
+                       ptr++;
+               if (*ptr == ',')
+                       ptr++;
+       }
+
+       result = n;
+
+       return result;
+}
+
 static char *
 ifindex_to_name_ns(__u32 ifindex, __u32 ns_dev, __u32 ns_ino, char *buf)
 {
diff --git a/tools/bpf/bpftool/main.h b/tools/bpf/bpftool/main.h
index b8e9584d6246..cbf8985da362 100644
--- a/tools/bpf/bpftool/main.h
+++ b/tools/bpf/bpftool/main.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2017 Netronome Systems, Inc.
+ * Copyright (C) 2017-2018 Netronome Systems, Inc.
  *
  * This software is dual licensed under the GNU General License Version 2,
  * June 1991 as shown in the file COPYING in the top-level directory of this
@@ -125,6 +125,7 @@ void disasm_print_insn(unsigned char *image, ssize_t len, 
int opcodes,
                       const char *arch);
 void print_hex_data_json(uint8_t *data, size_t len);
 
+unsigned int get_possible_cpus(void);
 const char *ifindex_to_bfd_name_ns(__u32 ifindex, __u64 ns_dev, __u64 ns_ino);
 
 #endif
diff --git a/tools/bpf/bpftool/map.c b/tools/bpf/bpftool/map.c
index 7da77e4166ec..5efefde5f578 100644
--- a/tools/bpf/bpftool/map.c
+++ b/tools/bpf/bpftool/map.c
@@ -34,7 +34,6 @@
 /* Author: Jakub Kicinski <kubak...@wp.pl> */
 
 #include <assert.h>
-#include <ctype.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <stdbool.h>
@@ -69,61 +68,6 @@ static const char * const map_type_name[] = {
        [BPF_MAP_TYPE_CPUMAP]           = "cpumap",
 };
 
-static unsigned int get_possible_cpus(void)
-{
-       static unsigned int result;
-       char buf[128];
-       long int n;
-       char *ptr;
-       int fd;
-
-       if (result)
-               return result;
-
-       fd = open("/sys/devices/system/cpu/possible", O_RDONLY);
-       if (fd < 0) {
-               p_err("can't open sysfs possible cpus");
-               exit(-1);
-       }
-
-       n = read(fd, buf, sizeof(buf));
-       if (n < 2) {
-               p_err("can't read sysfs possible cpus");
-               exit(-1);
-       }
-       close(fd);
-
-       if (n == sizeof(buf)) {
-               p_err("read sysfs possible cpus overflow");
-               exit(-1);
-       }
-
-       ptr = buf;
-       n = 0;
-       while (*ptr && *ptr != '\n') {
-               unsigned int a, b;
-
-               if (sscanf(ptr, "%u-%u", &a, &b) == 2) {
-                       n += b - a + 1;
-
-                       ptr = strchr(ptr, '-') + 1;
-               } else if (sscanf(ptr, "%u", &a) == 1) {
-                       n++;
-               } else {
-                       assert(0);
-               }
-
-               while (isdigit(*ptr))
-                       ptr++;
-               if (*ptr == ',')
-                       ptr++;
-       }
-
-       result = n;
-
-       return result;
-}
-
 static bool map_is_per_cpu(__u32 type)
 {
        return type == BPF_MAP_TYPE_PERCPU_HASH ||
-- 
2.17.0

Reply via email to