diff options
Diffstat (limited to 'sys/vm')
-rw-r--r-- | sys/vm/uma.h | 12 | ||||
-rw-r--r-- | sys/vm/uma_core.c | 18 |
2 files changed, 30 insertions, 0 deletions
diff --git a/sys/vm/uma.h b/sys/vm/uma.h index 2076d3b..f0522b0 100644 --- a/sys/vm/uma.h +++ b/sys/vm/uma.h @@ -459,6 +459,18 @@ int uma_zone_set_obj(uma_zone_t zone, struct vm_object *obj, int size); void uma_zone_set_max(uma_zone_t zone, int nitems); /* + * Obtains the effective limit on the number of items in a zone + * + * Arguments: + * zone The zone to obtain the effective limit from + * + * Return: + * 0 No limit + * int The effective limit of the zone + */ +int uma_zone_get_max(uma_zone_t zone); + +/* * The following two routines (uma_zone_set_init/fini) * are used to set the backend init/fini pair which acts on an * object as it becomes allocated and is placed in a slab within diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c index 2dcd14f..558b4c7 100644 --- a/sys/vm/uma_core.c +++ b/sys/vm/uma_core.c @@ -2797,6 +2797,24 @@ uma_zone_set_max(uma_zone_t zone, int nitems) } /* See uma.h */ +int +uma_zone_get_max(uma_zone_t zone) +{ + int nitems; + uma_keg_t keg; + + ZONE_LOCK(zone); + keg = zone_first_keg(zone); + if (keg->uk_maxpages) + nitems = keg->uk_maxpages * keg->uk_ipers; + else + nitems = 0; + ZONE_UNLOCK(zone); + + return (nitems); +} + +/* See uma.h */ void uma_zone_set_init(uma_zone_t zone, uma_init uminit) { |