A review of 'arch/parisc/kernel/time.c' and in particular 'timer_interrupt' and 'gettimeoffset' show that this code has a couple of design flaws. 1. cr16 is treated as signed. 2. No attempt is made to handle cr16 wrapping. 3. jiffies vs. wall_jiffies adjustment is incorrect. I have rewritten 'timer_interrupt'. A. cr16 is treated as an unsigned long. B. The following 3 scenarios exist. 1. The timer interrupt fires, and 'now' comes after 'next_tick' 2. The timer interrupt fires, and 'now' has wrapped and is before 'next_tick' 3. The timer interrupt fires, and 'now' is *just* before 'next_tick' In theory 99% of the time we should be in scenario 1. On occasion we may miss a timer interrupt, end up close to wrapping, and we get scenario 2. Scenario 3 is just plain wrong and for now I will BUG() if the timer fires before we intended. I have adjusted 'gettimeoffset' in the following fashion: A. cr16 is treated as an unsigned long. B. Never ever ever return a negative adjustment. C. (jiffies - wall_jiffies) adjustment is always positive and added to usec. D. The 3 timer scenarios (same as above), exist. I assert that 'gettimeoffset' should never return a negative value. It represents the postive adjustment accounting for the fact that we are *part* of the way through a tick. The patch is attached. Please review. I booted this on my a500 without any problems. I don't really know how to look for problems so I ran the glibc testsuite and didn't get any extra regressions. The real test will be to run this on a 715/50 and look for Guy's reported problems. Guy, would you mind patching your kernel with this patch and testing again? Cheers, Carlos.