diff options
author | Jeff Roberson <jeff@FreeBSD.org> | 2020-01-04 03:30:08 +0000 |
---|---|---|
committer | Jeff Roberson <jeff@FreeBSD.org> | 2020-01-04 03:30:08 +0000 |
commit | 8b987a77691da95fa2da8ceb05a496fbd02066df (patch) | |
tree | 52a9ff9abab6617e5435d5444dcf3afb4927f53c /lib/libmemstat | |
parent | 727c691857c8dfd0064d889ca2ac9ad5bdff66c0 (diff) | |
download | src-8b987a77691da95fa2da8ceb05a496fbd02066df.tar.gz src-8b987a77691da95fa2da8ceb05a496fbd02066df.zip |
Notes
Diffstat (limited to 'lib/libmemstat')
-rw-r--r-- | lib/libmemstat/memstat_uma.c | 15 |
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; |