diff options
author | andre <andre@FreeBSD.org> | 2012-11-29 07:30:42 +0000 |
---|---|---|
committer | andre <andre@FreeBSD.org> | 2012-11-29 07:30:42 +0000 |
commit | 051df828de0ee7c6055c650e9ecd53a7d2413e89 (patch) | |
tree | db0ad72c5cb51e20dae6201d488901d1c3ab0f3b | |
parent | 4e7a33716c1179fe69e003004da720fb8e43972f (diff) | |
download | FreeBSD-src-051df828de0ee7c6055c650e9ecd53a7d2413e89.zip FreeBSD-src-051df828de0ee7c6055c650e9ecd53a7d2413e89.tar.gz |
Using a long is the wrong type to represent the realmem and maxmbufmem
variable as they may overflow on i386/PAE and i386 with > 2GB RAM.
Use 64bit quad_t instead. It has broader kernel infrastructure support
with TUNABLE_QUAD_FETCH() and qmin/qmax() than other available types.
Pointed out by: alc, bde
-rw-r--r-- | sys/kern/subr_param.c | 8 | ||||
-rw-r--r-- | sys/sys/mbuf.h | 2 |
2 files changed, 5 insertions, 5 deletions
diff --git a/sys/kern/subr_param.c b/sys/kern/subr_param.c index f299e08..f8c4fe7 100644 --- a/sys/kern/subr_param.c +++ b/sys/kern/subr_param.c @@ -93,7 +93,7 @@ int ncallout; /* maximum # of timer events */ int nbuf; int ngroups_max; /* max # groups per process */ int nswbuf; -long maxmbufmem; /* max mbuf memory */ +quad_t maxmbufmem; /* max mbuf memory */ pid_t pid_max = PID_MAX; long maxswzone; /* max swmeta KVA storage */ long maxbcache; /* max buffer cache KVA storage */ @@ -271,7 +271,7 @@ init_param1(void) void init_param2(long physpages) { - long realmem; + quad_t realmem; /* Base parameters */ maxusers = MAXUSERS; @@ -332,10 +332,10 @@ init_param2(long physpages) * available kernel memory (physical or kmem). * At most it can be 3/4 of available kernel memory. */ - realmem = lmin(physpages * PAGE_SIZE, + realmem = qmin(physpages * PAGE_SIZE, VM_MAX_KERNEL_ADDRESS - VM_MIN_KERNEL_ADDRESS); maxmbufmem = realmem / 2; - TUNABLE_LONG_FETCH("kern.maxmbufmem", &maxmbufmem); + TUNABLE_QUAD_FETCH("kern.maxmbufmem", &maxmbufmem); if (maxmbufmem > (realmem / 4) * 3) maxmbufmem = (realmem / 4) * 3; diff --git a/sys/sys/mbuf.h b/sys/sys/mbuf.h index 8427283..0d0b0d0 100644 --- a/sys/sys/mbuf.h +++ b/sys/sys/mbuf.h @@ -395,7 +395,7 @@ struct mbstat { * * The rest of it is defined in kern/kern_mbuf.c */ -extern long maxmbufmem; +extern quad_t maxmbufmem; extern uma_zone_t zone_mbuf; extern uma_zone_t zone_clust; extern uma_zone_t zone_pack; |