summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoravg <avg@FreeBSD.org>2017-04-14 14:34:48 +0000
committeravg <avg@FreeBSD.org>2017-04-14 14:34:48 +0000
commit28e1b9d886f91810da1fb3ee3d6649b5e6702d27 (patch)
tree904d91d1579947503dee308538b0d15b0d213ca0
parentc0a82412b02d0d886ea819e86cdb18382b26212a (diff)
downloadFreeBSD-src-28e1b9d886f91810da1fb3ee3d6649b5e6702d27.zip
FreeBSD-src-28e1b9d886f91810da1fb3ee3d6649b5e6702d27.tar.gz
MFC r315078: uma: fix pages <-> items conversions at several places
-rw-r--r--sys/vm/uma_core.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c
index 6f2cc11..08a40ac 100644
--- a/sys/vm/uma_core.c
+++ b/sys/vm/uma_core.c
@@ -1505,7 +1505,8 @@ keg_ctor(void *mem, int size, void *udata, int flags)
printf("UMA: %s(%p) size %d(%d) flags %#x ipers %d ppera %d out %d free %d\n",
zone->uz_name, zone, keg->uk_size, keg->uk_rsize, keg->uk_flags,
keg->uk_ipers, keg->uk_ppera,
- (keg->uk_ipers * keg->uk_pages) - keg->uk_free, keg->uk_free);
+ (keg->uk_pages / keg->uk_ppera) * keg->uk_ipers - keg->uk_free,
+ keg->uk_free);
#endif
LIST_INSERT_HEAD(&keg->uk_zones, zone, uz_link);
@@ -2916,7 +2917,7 @@ uma_zone_set_max(uma_zone_t zone, int nitems)
keg->uk_maxpages = (nitems / keg->uk_ipers) * keg->uk_ppera;
if (keg->uk_maxpages * keg->uk_ipers < nitems)
keg->uk_maxpages += keg->uk_ppera;
- nitems = keg->uk_maxpages * keg->uk_ipers;
+ nitems = (keg->uk_maxpages / keg->uk_ppera) * keg->uk_ipers;
KEG_UNLOCK(keg);
return (nitems);
@@ -2933,7 +2934,7 @@ uma_zone_get_max(uma_zone_t zone)
if (keg == NULL)
return (0);
KEG_LOCK(keg);
- nitems = keg->uk_maxpages * keg->uk_ipers;
+ nitems = (keg->uk_maxpages / keg->uk_ppera) * keg->uk_ipers;
KEG_UNLOCK(keg);
return (nitems);
@@ -3094,13 +3095,14 @@ uma_zone_reserve_kva(uma_zone_t zone, int count)
if (pages * keg->uk_ipers < count)
pages++;
+ pages *= keg->uk_ppera;
#ifdef UMA_MD_SMALL_ALLOC
if (keg->uk_ppera > 1) {
#else
if (1) {
#endif
- kva = kva_alloc((vm_size_t)pages * UMA_SLAB_SIZE);
+ kva = kva_alloc((vm_size_t)pages * PAGE_SIZE);
if (kva == 0)
return (0);
} else
@@ -3300,8 +3302,8 @@ uma_print_keg(uma_keg_t keg)
"out %d free %d limit %d\n",
keg->uk_name, keg, keg->uk_size, keg->uk_rsize, keg->uk_flags,
keg->uk_ipers, keg->uk_ppera,
- (keg->uk_ipers * keg->uk_pages) - keg->uk_free, keg->uk_free,
- (keg->uk_maxpages / keg->uk_ppera) * keg->uk_ipers);
+ (keg->uk_pages / keg->uk_ppera) * keg->uk_ipers - keg->uk_free,
+ keg->uk_free, (keg->uk_maxpages / keg->uk_ppera) * keg->uk_ipers);
printf("Part slabs:\n");
LIST_FOREACH(slab, &keg->uk_part_slab, us_link)
slab_print(slab);
OpenPOWER on IntegriCloud