diff --git a/sys-utils/lscpu-topology.c b/sys-utils/lscpu-topology.c index 2e1a3b987..92f10b518 100644 --- a/sys-utils/lscpu-topology.c +++ b/sys-utils/lscpu-topology.c @@ -209,13 +209,19 @@ static int cputype_read_topology(struct lscpu_cxt *cxt, struct lscpu_cputype *ct } /* count size of all instancess of the "name" */ -size_t lscpu_get_cache_full_size(struct lscpu_cxt *cxt, const char *name) +size_t lscpu_get_cache_full_size(struct lscpu_cxt *cxt, const char *name, int *instances) { size_t i, sz = 0; + if (instances) + *instances = 0; + for (i = 0; i < cxt->ncaches; i++) { - if (strcmp(cxt->caches[i].name, name) == 0) + if (strcmp(cxt->caches[i].name, name) == 0) { sz += cxt->caches[i].size; + if (instances) + (*instances)++; + } } return sz; @@ -539,10 +545,10 @@ int lscpu_read_topology(struct lscpu_cxt *cxt) } lscpu_sort_caches(cxt->caches, cxt->ncaches); - DBG(GATHER, ul_debugobj(cxt, " L1d: %zu", lscpu_get_cache_full_size(cxt, "L1d"))); - DBG(GATHER, ul_debugobj(cxt, " L1i: %zu", lscpu_get_cache_full_size(cxt, "L1i"))); - DBG(GATHER, ul_debugobj(cxt, " L2: %zu", lscpu_get_cache_full_size(cxt, "L2"))); - DBG(GATHER, ul_debugobj(cxt, " L3: %zu", lscpu_get_cache_full_size(cxt, "L3"))); + DBG(GATHER, ul_debugobj(cxt, " L1d: %zu", lscpu_get_cache_full_size(cxt, "L1d", NULL))); + DBG(GATHER, ul_debugobj(cxt, " L1i: %zu", lscpu_get_cache_full_size(cxt, "L1i", NULL))); + DBG(GATHER, ul_debugobj(cxt, " L2: %zu", lscpu_get_cache_full_size(cxt, "L2", NULL))); + DBG(GATHER, ul_debugobj(cxt, " L3: %zu", lscpu_get_cache_full_size(cxt, "L3", NULL))); return rc; } diff --git a/sys-utils/lscpu.c b/sys-utils/lscpu.c index cd72a3943..b029e0fc0 100644 --- a/sys-utils/lscpu.c +++ b/sys-utils/lscpu.c @@ -511,7 +511,7 @@ static void caches_add_line(struct lscpu_cxt *cxt, { uint64_t sz = 0; if (ca->name) - sz = lscpu_get_cache_full_size(cxt, ca->name); + sz = lscpu_get_cache_full_size(cxt, ca->name, NULL); if (!sz) break; if (cxt->bytes) @@ -1045,21 +1045,28 @@ static void print_summary(struct lscpu_cxt *cxt) for (i = 0; i < cxt->ncaches; i++) { const char *name = cxt->caches[i].name; uint64_t sz; + int n = 0; if (last && strcmp(last, name) == 0) continue; - sz = lscpu_get_cache_full_size(cxt, name); + sz = lscpu_get_cache_full_size(cxt, name, &n); if (!sz) continue; snprintf(field, sizeof(field), is_term ? _("%s:") : _("%s cache:"), name); if (cxt->bytes) - add_summary_x(tb, sec, field, "%" PRIu64, sz); + add_summary_sprint(tb, sec, field, + P_("%" PRIu64 " (%d instance)", + "%" PRIu64 " (%d instances)", n), + sz, n); else { char *tmp = size_to_human_string( SIZE_SUFFIX_3LETTER | SIZE_SUFFIX_SPACE, sz); - add_summary_s(tb, sec, field, tmp); + add_summary_sprint(tb, sec, field, + P_("%s (%d instance)", + "%s (%d instances)", n), + tmp, n); free(tmp); } last = name; diff --git a/sys-utils/lscpu.h b/sys-utils/lscpu.h index 623c07998..e52c77c22 100644 --- a/sys-utils/lscpu.h +++ b/sys-utils/lscpu.h @@ -271,7 +271,7 @@ int lscpu_read_numas(struct lscpu_cxt *cxt); void lscpu_free_caches(struct lscpu_cache *caches, size_t n); void lscpu_sort_caches(struct lscpu_cache *caches, size_t n); -size_t lscpu_get_cache_full_size(struct lscpu_cxt *cxt, const char *name); +size_t lscpu_get_cache_full_size(struct lscpu_cxt *cxt, const char *name, int *instances); struct lscpu_cache *lscpu_cpu_get_cache(struct lscpu_cxt *cxt, struct lscpu_cpu *cpu, const char *name);