Author: andre
Date: Thu Nov 29 07:30:42 2012
New Revision: 243668
URL: http://svnweb.freebsd.org/changeset/base/243668

Log:
  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

Modified:
  head/sys/kern/subr_param.c
  head/sys/sys/mbuf.h

Modified: head/sys/kern/subr_param.c
==============================================================================
--- head/sys/kern/subr_param.c  Thu Nov 29 06:26:42 2012        (r243667)
+++ head/sys/kern/subr_param.c  Thu Nov 29 07:30:42 2012        (r243668)
@@ -93,7 +93,7 @@ int   ncallout;                       /* maximum # of timer ev
 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;
 

Modified: head/sys/sys/mbuf.h
==============================================================================
--- head/sys/sys/mbuf.h Thu Nov 29 06:26:42 2012        (r243667)
+++ head/sys/sys/mbuf.h Thu Nov 29 07:30:42 2012        (r243668)
@@ -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;
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to