Date: Fri, 26 Mar 2010 13:36:17 +0100 From: Alexander Leidinger <netchild@FreeBSD.org> To: Kostik Belousov <kostikbel@gmail.com>, Petr Salinger <Petr.Salinger@seznam.cz> Cc: svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org Subject: Re: svn commit: r205683 - head/sys/compat/linprocfs Message-ID: <20100326133617.34413032k064412c@webmail.leidinger.net> In-Reply-To: <20100326114925.GS2415@deviant.kiev.zoral.com.ua> References: <201003261143.o2QBhFhK034688@svn.freebsd.org> <20100326114925.GS2415@deviant.kiev.zoral.com.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
Quoting Kostik Belousov <kostikbel@gmail.com> (from Fri, 26 Mar 2010 13:49:25 +0200): > On Fri, Mar 26, 2010 at 11:43:15AM +0000, Alexander Leidinger wrote: >> Author: netchild >> Date: Fri Mar 26 11:43:15 2010 >> New Revision: 205683 >> URL: http://svn.freebsd.org/changeset/base/205683 >> >> Log: >> Fix some bogus values in linprocfs. >> >> Submitted by: Petr Salinger <Petr.Salinger@seznam.cz> >> Verified on: GNU/kFreeBSD debian 8.0-1-686 (by submitter) >> PR: 144584 >> >> Modified: >> head/sys/compat/linprocfs/linprocfs.c >> >> Modified: head/sys/compat/linprocfs/linprocfs.c >> ============================================================================== >> --- head/sys/compat/linprocfs/linprocfs.c Fri Mar 26 11:33:12 2010 (r205682) >> +++ head/sys/compat/linprocfs/linprocfs.c Fri Mar 26 11:43:15 2010 (r205683) >> @@ -110,13 +110,36 @@ __FBSDID("$FreeBSD$"); >> /* >> * Various conversion macros >> */ >> + >> +/* The LINUX_USER_HZ is assumed 100 for now */ >> + >> +#if defined(__i386__) && defined(__GNUCLIKE_ASM) >> +/* we need intermediate result as 64 bit, otherwise it overflows >> too early */ >> +#define DO64_MULDIV(v,m,d) \ >> +({ \ >> + unsigned long rv0; \ >> + unsigned long rv1; \ >> + __asm__ __volatile__( \ >> + "mull %1\n\t" \ >> + "divl %2\n\t" \ >> + :"=a" (rv0), "=d" (rv1) \ >> + :"r" (d), "0" (v), "1" (m) \ >> + :"cc" ); \ >> + rv0; \ >> +}) > > Why it is impossible to express the calculation in C ? You forgot to CC the submitter... CCed. What do you have in mind, (unsinged long)((uint64_t)v * (uint64_t)m / (uint64_t)d)? Conditionally on the architecture or not? Bye, Alexander. -- http://www.Leidinger.net Alexander @ Leidinger.net: PGP ID = B0063FE7 http://www.FreeBSD.org netchild @ FreeBSD.org : PGP ID = 72077137 When reviewing your notes before an exam, the most important ones will be illegible.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20100326133617.34413032k064412c>