Re: [patch] Generic time trailing clean-ups

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Aug 11, 2003 at 03:02:16PM +0200, Maciej W. Rozycki wrote:
> Hello,
> 
>  Here is hopefully the final part (for now) of the generic time changes.
> It addresses the following problems:
> 
> -	 */
> -	if (!jiffies) {
> -		timerhi = timerlo = 0;
> -		mips_hpt_init(count);
> +	 *
> +	 * The first timer interrupt comes late as interrupts are
> +	 * enabled long after timers are initialized.  Therefore the
> +	 * high precision timer is fast, leading to wrong gettimeoffset()
> +	 * calculations.  We deal with it by setting it based on the
> +	 * number of its ticks between the second and the third interrupt.
> +	 * That is still somewhat imprecise, but it's a good estimate.
> +	 * --macro
> +	 */
> +	j = jiffies;
> +	if (j < 4) {
> +		static unsigned int prev_count;
> +		static int hpt_initialized;
> +
> +		switch (j) {
> +		case 0:
> +			timerhi = timerlo = 0;
> +			mips_hpt_init(count);
> +			break;
> +		case 2:
> +			prev_count = count;
> +			break;
> +		case 3:
> +			if (!hpt_initialized) {
> +				unsigned int c3 = 3 * (count - prev_count);
> +
> +				timerhi = 0;
> +				timerlo = c3;
> +				mips_hpt_init(count - c3);
> +				hpt_initialized = 1;
> +			}
> +			break;
> +		default:
> +			break;
> +		}
>  	}
> 

The first gettimeoffset() call is way after many jiffies (~50 normally?).  Such
an estimate is not necessary.

Also note jiffies can wrap around.  

Jun


[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux