svn commit: r205683 - head/sys/compat/linprocfs
Petr Salinger
Petr.Salinger at seznam.cz
Fri Mar 26 13:33:30 UTC 2010
>>> --- head/sys/compat/linprocfs/linprocfs.c (r205682)
>>> +++ head/sys/compat/linprocfs/linprocfs.c (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?
Or just on all architectures this:
#define T2J(x) (unsigned long)(((x) * 100ULL) / (stathz ? stathz : hz)) /* ticks to jiffies */
Petr
More information about the svn-src-all
mailing list