Date: Wed, 30 Jun 2004 04:00:47 -0400 From: Brian Fundakowski Feldman <green@FreeBSD.ORG> To: Bruce Evans <bde@zeta.org.au>, Andrew Gallatin <gallatin@cs.duke.edu>, src-committers@FreeBSD.ORG, cvs-src@FreeBSD.ORG, cvs-all@FreeBSD.ORG Subject: Re: cvs commit: src/sys/vm vm_map.c Message-ID: <20040630080047.GC946@green.homeunix.org> In-Reply-To: <20040630030248.GA26810@VARK.homeunix.com> References: <200406281915.i5SJFeaV060231@repoman.freebsd.org> <20040628152232.A2977@grasshopper.cs.duke.edu> <20040628193858.GG5635@green.homeunix.org> <16608.30892.745161.730935@grasshopper.cs.duke.edu> <20040629114614.T2908@gamplex.bde.org> <16609.23767.245708.270218@grasshopper.cs.duke.edu> <20040630095111.U2619@gamplex.bde.org> <20040630030248.GA26810@VARK.homeunix.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Jun 29, 2004 at 08:02:48PM -0700, David Schultz wrote:
> On Wed, Jun 30, 2004, Bruce Evans wrote:
> > On Tue, 29 Jun 2004, Andrew Gallatin wrote:
> >
> > > Bruce Evans writes:
> > > > On Mon, 28 Jun 2004, Andrew Gallatin wrote:
> > > > > > > > Log:
> > > > > > > > Fix alpha - the use of min() on longs was loosing the high bits and
> > > > > > > > returning wrong answers, leading to strange values vm2->vm_{s,t,d}size.
> > > >
> > > > MIN() and MAX() should not be used in the kernel. 4.4BSD removed them in
> > > > the kernel, but FreeBSD broke this in rev.1.141 of sys/param.h. They
> > > > remain removed in RELENG_4.
> > >
> > > OK. Then what's the correct fix? ulmin()?
> >
> > Fixing min() to handle all unsigned types is probably best.
>
> Hmm...but this means either
>
> a) slightly pessimizing 32-bit ports with a function on uintmax_t's,
>
> b) using a macro and introducing double-expansion problems, or
>
> c) using GCC extensions
>
> Option (c) seems best from a technical standpoint, except that
> we'd be making it harder than it already is to compile the kernel
> with compilers other than gcc and icc. (Do others have the
> statement expr extension?)
No, the correct fix is using MIN() or MAX() that are well-documented
to provide the exact side-effects C programmers know to expect. They
automatically return the correct type, too, with no coercion!
--
Brian Fundakowski Feldman \'[ FreeBSD ]''''''''''\
<> green@FreeBSD.org \ The Power to Serve! \
Opinions expressed are my own. \,,,,,,,,,,,,,,,,,,,,,,\
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040630080047.GC946>
