Re: [RFC][PATCH] fsys_gettimeofday leaps days if it runs with nojitter

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

 



Hidetoshi Seto <seto.hidetoshi@xxxxxxxxxxxxxx> writes:

> I suspected the value of r28.
> So I just relocate "consuming" of r28 to early stage.
>
> <PATCH>
>> Index: linux-2.6.21/arch/ia64/kernel/fsys.S
>> ===================================================================
>> --- linux-2.6.21.orig/arch/ia64/kernel/fsys.S
>> +++ linux-2.6.21/arch/ia64/kernel/fsys.S
>> @@ -247,6 +247,9 @@
>>  .time_redo:
>>  	.pred.rel.mutex p8,p9,p10
>>  	ld4.acq r28 = [r29]	// xtime_lock.sequence. Must come first for locking purposes
>> +	;;
>> +	and r28 = ~1,r28	// Make sequence even to force retry if odd
>> +	;;
>>  (p8)	mov r2 = ar.itc		// CPU_TIMER. 36 clocks latency!!!
>>  	add r22 = IA64_TIME_INTERPOLATOR_LAST_COUNTER_OFFSET,r20
>>  (p9)	ld8 r2 = [r30]		// readq(ti->address). Could also have latency issues..
>> @@ -284,7 +287,6 @@
>>  (p15)	ld8 r17 = [r19],-IA64_TIMESPEC_TV_NSEC_OFFSET
>>  (p7)	cmp.ne p7,p0 = r25,r3	// if cmpxchg not successful redo
>>  	// simulate tbit.nz.or p7,p0 = r28,0
>> -	and r28 = ~1,r28	// Make sequence even to force retry if odd
>>  	getf.sig r2 = f8
>>  	mf
>>  	add r8 = r8,r18		// Add time interpolator offset
> </PATCH>
>
> What a surprise! This patch solves the problem!

How can the register lose its contents?  The only thing that can make a
difference is the stop bit.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab@xxxxxxx
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."
-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Sparc Linux]     [DCCP]     [Linux ARM]     [Yosemite News]     [Linux SCSI]     [Linux x86_64]     [Linux for Ham Radio]

  Powered by Linux