aboutsummaryrefslogtreecommitdiff
path: root/lib/libmemstat
diff options
context:
space:
mode:
authorJeff Roberson <jeff@FreeBSD.org>2020-01-04 03:30:08 +0000
committerJeff Roberson <jeff@FreeBSD.org>2020-01-04 03:30:08 +0000
commit8b987a77691da95fa2da8ceb05a496fbd02066df (patch)
tree52a9ff9abab6617e5435d5444dcf3afb4927f53c /lib/libmemstat
parent727c691857c8dfd0064d889ca2ac9ad5bdff66c0 (diff)
downloadsrc-8b987a77691da95fa2da8ceb05a496fbd02066df.tar.gz
src-8b987a77691da95fa2da8ceb05a496fbd02066df.zip
Notes
Diffstat (limited to 'lib/libmemstat')
-rw-r--r--lib/libmemstat/memstat_uma.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/lib/libmemstat/memstat_uma.c b/lib/libmemstat/memstat_uma.c
index b5879d651f5f..caf7ed99d969 100644
--- a/lib/libmemstat/memstat_uma.c
+++ b/lib/libmemstat/memstat_uma.c
@@ -311,10 +311,12 @@ memstat_kvm_uma(struct memory_type_list *list, void *kvm_handle)
LIST_HEAD(, uma_keg) uma_kegs;
struct memory_type *mtp;
struct uma_zone_domain uzd;
+ struct uma_domain ukd;
struct uma_bucket *ubp, ub;
struct uma_cache *ucp, *ucp_array;
struct uma_zone *uzp, uz;
struct uma_keg *kzp, kz;
+ uint64_t kegfree;
int hint_dontsearch, i, mp_maxid, ndomains, ret;
char name[MEMTYPE_MAXNAME];
cpuset_t all_cpus;
@@ -454,18 +456,29 @@ skip_percpu:
for (i = 0; i < ndomains; i++) {
ret = kread(kvm, &uz.uz_domain[i], &uzd,
sizeof(uzd), 0);
+ if (ret != 0)
+ continue;
for (ubp =
TAILQ_FIRST(&uzd.uzd_buckets);
ubp != NULL;
ubp = TAILQ_NEXT(&ub, ub_link)) {
ret = kread(kvm, ubp, &ub,
sizeof(ub), 0);
+ if (ret != 0)
+ continue;
mtp->mt_zonefree += ub.ub_cnt;
}
}
if (!((kz.uk_flags & UMA_ZONE_SECONDARY) &&
LIST_FIRST(&kz.uk_zones) != uzp)) {
- mtp->mt_kegfree = kz.uk_free;
+ kegfree = 0;
+ for (i = 0; i < ndomains; i++) {
+ ret = kread(kvm, &kzp->uk_domain[i],
+ &ukd, sizeof(ukd), 0);
+ if (ret != 0)
+ kegfree += ukd.ud_free;
+ }
+ mtp->mt_kegfree = kegfree;
mtp->mt_free += mtp->mt_kegfree;
}
mtp->mt_free += mtp->mt_zonefree;