diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2016-04-26 15:02:00 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2017-10-20 14:59:54 +0200 |
commit | b9880143628ad4d1b2c7423d28d852988f7a469e (patch) | |
tree | b9e377aea8227dd2e1ad0b2065e41b0356f40908 | |
parent | DEVICE(9): Avoid NULL pointer access (diff) | |
download | rtems-libbsd-b9880143628ad4d1b2c7423d28d852988f7a469e.tar.bz2 |
ZONE(9): Fix uma_zone_set_max()
Account for items provided for per-processor caches.
-rw-r--r-- | freebsd/sys/vm/uma_core.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/freebsd/sys/vm/uma_core.c b/freebsd/sys/vm/uma_core.c index f8c8476c..840c8766 100644 --- a/freebsd/sys/vm/uma_core.c +++ b/freebsd/sys/vm/uma_core.c @@ -3016,6 +3016,15 @@ uma_zone_set_max(uma_zone_t zone, int nitems) if (keg == NULL) return (0); KEG_LOCK(keg); +#ifdef __rtems__ +#ifdef SMP + /* + * Ensure we have enough items to fill the per-processor caches. This + * is a heuristic approach and works not under all conditions. + */ + nitems += 2 * BUCKET_MAX * (mp_maxid + 1); +#endif +#endif /* __rtems__ */ keg->uk_maxpages = (nitems / keg->uk_ipers) * keg->uk_ppera; if (keg->uk_maxpages * keg->uk_ipers < nitems) keg->uk_maxpages += keg->uk_ppera; |