]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lscpu: use function to search in cpu masks arrays
authorKarel Zak <kzak@redhat.com>
Fri, 9 Sep 2011 06:19:24 +0000 (08:19 +0200)
committerKarel Zak <kzak@redhat.com>
Fri, 9 Sep 2011 21:27:40 +0000 (23:27 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
include/cpuset.h
sys-utils/lscpu.c

index f65c0cad7ae0f3ce83f8b6a5f4a687b1a6e3f20b..47ddfe2efb5aa7bbb0def0b9ecd758b34ccb52fe 100644 (file)
@@ -61,6 +61,26 @@ extern int __cpuset_count_s(size_t setsize, const cpu_set_t *set);
 
 #define cpuset_nbits(setsize)  (8 * (setsize))
 
+/*
+ * The @idx parametr returns an index of the first mask from @ary array where
+ * the @cpu is set.
+ *
+ * Returns: 0 if found, otherwise 1.
+ */
+static inline int cpuset_ary_isset(size_t cpu, cpu_set_t **ary, size_t nmemb,
+                                  size_t setsize, size_t *idx)
+{
+       size_t i;
+
+       for (i = 0; i < nmemb; i++) {
+               if (CPU_ISSET_S(cpu, setsize, ary[i])) {
+                       *idx = i;
+                       return 0;
+               }
+       }
+       return 1;
+}
+
 extern int get_max_number_of_cpus(void);
 
 extern cpu_set_t *cpuset_alloc(int ncpus, size_t *setsize, size_t *nbits);
index 68a40d5756f06506f2d39fd6d67788376349c93f..bd2c073a9e1d357742a6923b4d27edee5d7fd45c 100644 (file)
@@ -885,70 +885,55 @@ read_nodes(struct lscpu_desc *desc)
 }
 
 static void
-print_parsable_cell(struct lscpu_desc *desc, int i, int col,
+print_parsable_cell(struct lscpu_desc *desc, int cpu, int col,
                    struct lscpu_modifier *mod)
 {
-       int j;
        size_t setsize = CPU_ALLOC_SIZE(maxcpus);
+       size_t idx;
+       int j;
 
        switch (col) {
        case COL_CPU:
-               printf("%d", i);
+               printf("%d", cpu);
                break;
        case COL_CORE:
-               for (j = 0; j < desc->ncores; j++) {
-                       if (CPU_ISSET_S(i, setsize, desc->coremaps[j])) {
-                               printf("%d", j);
-                               break;
-                       }
-               }
+               if (cpuset_ary_isset(cpu, desc->coremaps,
+                                    desc->ncores, setsize, &idx) == 0)
+                       printf("%zd", idx);
                break;
        case COL_SOCKET:
-               for (j = 0; j < desc->nsockets; j++) {
-                       if (CPU_ISSET_S(i, setsize, desc->socketmaps[j])) {
-                               printf("%d", j);
-                               break;
-                       }
-               }
+               if (cpuset_ary_isset(cpu, desc->socketmaps,
+                                    desc->nsockets, setsize, &idx) == 0)
+                       printf("%zd", idx);
                break;
        case COL_NODE:
-               for (j = 0; j < desc->nnodes; j++) {
-                       if (CPU_ISSET_S(i, setsize, desc->nodemaps[j])) {
-                               printf("%d", j);
-                               break;
-                       }
-               }
+               if (cpuset_ary_isset(cpu, desc->nodemaps,
+                                    desc->nnodes, setsize, &idx) == 0)
+                       printf("%zd", idx);
                break;
        case COL_BOOK:
-               for (j = 0; j < desc->nbooks; j++) {
-                       if (CPU_ISSET_S(i, setsize, desc->bookmaps[j])) {
-                               printf("%d", j);
-                               break;
-                       }
-               }
+               if (cpuset_ary_isset(cpu, desc->bookmaps,
+                                    desc->nbooks, setsize, &idx) == 0)
+                       printf("%zd", idx);
                break;
        case COL_CACHE:
                for (j = desc->ncaches - 1; j >= 0; j--) {
                        struct cpu_cache *ca = &desc->caches[j];
-                       int x;
 
-                       for (x = 0; x < ca->nsharedmaps; x++) {
-                               if (CPU_ISSET_S(i, setsize, ca->sharedmaps[x])) {
-                                       printf("%d", x);
-                                       break;
-                               }
-                       }
+                       if (cpuset_ary_isset(cpu, ca->sharedmaps,
+                                            ca->nsharedmaps, setsize, &idx) == 0)
+                               printf("%zd", idx);
                        if (j != 0)
                                putchar(mod->compat ? ',' : ':');
                }
                break;
        case COL_POLARIZATION:
                if (desc->polarization)
-                       printf("%s", polar_modes[desc->polarization[i]].parsable);
+                       printf("%s", polar_modes[desc->polarization[cpu]].parsable);
                break;
        case COL_ADDRESS:
                if (desc->addresses)
-                       printf("%d", desc->addresses[i]);
+                       printf("%d", desc->addresses[cpu]);
                break;
        }
 }