netdev
[Top] [All Lists]

Re: MSEC_TO_JIFFIES is messed up...

To: Ingo Molnar <mingo@xxxxxxx>
Subject: Re: MSEC_TO_JIFFIES is messed up...
From: Andrew Morton <akpm@xxxxxxxx>
Date: Wed, 12 May 2004 13:20:50 -0700
Cc: davidel@xxxxxxxxxxxxxxx, jgarzik@xxxxxxxxx, greg@xxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxx
In-reply-to: <20040512200305.GA16078@elte.hu>
References: <20040512020700.6f6aa61f.akpm@osdl.org> <20040512181903.GG13421@kroah.com> <40A26FFA.4030701@pobox.com> <20040512193349.GA14936@elte.hu> <Pine.LNX.4.58.0405121247011.11950@bigblue.dev.mdolabs.com> <20040512200305.GA16078@elte.hu>
Sender: netdev-bounce@xxxxxxxxxxx
Ingo Molnar <mingo@xxxxxxx> wrote:
>
> 
> * Davide Libenzi <davidel@xxxxxxxxxxxxxxx> wrote:
> 
> > > why is it wrong?
> > 
> > For HZ == 1000 it's fine, even if it'd better to explicitly make it HZ
> > dependent and let the compiler to discard them.
> 
> the compiler cannot discard the multiplication and the division from the
> following:
> 
>       x * 1000 / 1000
> 
> due to overflows. But we know that HZ is 1000 in the arch-dependent
> param.h, and in sched.c we use the HZ dependent variant:
> 
>  #ifndef JIFFIES_TO_MSEC
>  # define JIFFIES_TO_MSEC(x) ((x) * 1000 / HZ)
>  #endif
>  #ifndef MSEC_TO_JIFFIES
>  # define MSEC_TO_JIFFIES(x) ((x) * HZ / 1000)
>  #endif
> 

Yes, that's a correct optimisation.  This is simply a namespace clash.

How about we do:

#if HZ=1000
#define MSEC_TO_JIFFIES(msec) (msec)
#define JIFFIES_TO_MESC(jiffies) (jiffies)
#elif HZ=100
#define MSEC_TO_JIFFIES(msec) (msec * 10)
#define JIFFIES_TO_MESC(jiffies) (jiffies / 10)
#else
#define MSEC_TO_JIFFIES(msec) ((HZ * (msec) + 999) / 1000)
#define JIFFIES_TO_MSEC(jiffies) ...
#endif

in some kernel-wide header then kill off all the private implementations?


<Prev in Thread] Current Thread [Next in Thread>