summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbmilekic <bmilekic@FreeBSD.org>2001-04-18 23:54:13 +0000
committerbmilekic <bmilekic@FreeBSD.org>2001-04-18 23:54:13 +0000
commitb857e0ac23e8df79e651abe8d55750dd0222d610 (patch)
tree5f899951e7da5db6ca7128cfcb735510070b4918
parentf4abc7a864b571322f61de55ab201b41a046a462 (diff)
downloadFreeBSD-src-b857e0ac23e8df79e651abe8d55750dd0222d610.zip
FreeBSD-src-b857e0ac23e8df79e651abe8d55750dd0222d610.tar.gz
Fix inconsistency in setup of kernel_map: we need to make sure that
we also reserve _adequate_ space for the mb_map submap; i.e. we need space for nmbclusters, nmbufs, _and_ nmbcnt. Furthermore, we need to rounddown, and not roundup, so that we are consistent. Pointed out by: bde
-rw-r--r--sys/kern/kern_malloc.c4
-rw-r--r--sys/kern/uipc_mbuf.c9
-rw-r--r--sys/sys/mbuf.h1
3 files changed, 8 insertions, 6 deletions
diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c
index a6447a5..ad0d0e9 100644
--- a/sys/kern/kern_malloc.c
+++ b/sys/kern/kern_malloc.c
@@ -475,8 +475,8 @@ kmeminit(dummy)
if ((vm_kmem_size / 2) > (cnt.v_page_count * PAGE_SIZE))
vm_kmem_size = 2 * cnt.v_page_count * PAGE_SIZE;
- npg = (nmbufs * MSIZE + nmbclusters * MCLBYTES + vm_kmem_size)
- / PAGE_SIZE;
+ npg = (nmbufs * MSIZE + nmbclusters * MCLBYTES + nmbcnt *
+ sizeof(union mext_refcnt) + vm_kmem_size) / PAGE_SIZE;
kmemusage = (struct kmemusage *) kmem_alloc(kernel_map,
(vm_size_t)(npg * sizeof(struct kmemusage)));
diff --git a/sys/kern/uipc_mbuf.c b/sys/kern/uipc_mbuf.c
index 35414b1..70bbc45 100644
--- a/sys/kern/uipc_mbuf.c
+++ b/sys/kern/uipc_mbuf.c
@@ -121,14 +121,15 @@ static void m_reclaim(void);
static void
mbinit(void *dummy)
{
- vm_offset_t maxaddr, mb_map_size;
+ vm_offset_t maxaddr;
+ vm_size_t mb_map_size;
/*
* Setup the mb_map, allocate requested VM space.
*/
- mb_map_size = nmbufs * MSIZE + nmbclusters * MCLBYTES + nmbcnt
- * sizeof(union mext_refcnt);
- mb_map_size = roundup2(mb_map_size, PAGE_SIZE);
+ mb_map_size = (vm_size_t)(nmbufs * MSIZE + nmbclusters * MCLBYTES +
+ nmbcnt * sizeof(union mext_refcnt));
+ mb_map_size = rounddown(mb_map_size, PAGE_SIZE);
mb_map = kmem_suballoc(kmem_map, (vm_offset_t *)&mbutl, &maxaddr,
mb_map_size);
/* XXX XXX XXX: mb_map->system_map = 1; */
diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h
index fcbe15a..f904ade 100644
--- a/sys/sys/mbuf.h
+++ b/sys/sys/mbuf.h
@@ -666,6 +666,7 @@ extern struct mclfree_lst mclfree;
extern struct mcntfree_lst mcntfree;
extern struct mbffree_lst mmbfree;
extern int nmbclusters;
+extern int nmbcnt;
extern int nmbufs;
extern int nsfbufs;
OpenPOWER on IntegriCloud