mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	jiffies: Reuse TICK_NSEC instead of NSEC_PER_JIFFY
NSEC_PER_JIFFY is an ad-hoc redefinition of TICK_NSEC. Let's rather use a unique and well maintained version. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Paul Mackerras <paulus@samba.org> Cc: Michael Ellerman <mpe@ellerman.id.au> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Tony Luck <tony.luck@intel.com> Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Rik van Riel <riel@redhat.com> Cc: Stanislaw Gruszka <sgruszka@redhat.com> Cc: Wanpeng Li <wanpeng.li@hotmail.com> Link: http://lkml.kernel.org/r/1485832191-26889-1-git-send-email-fweisbec@gmail.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
		
							parent
							
								
									ed5c8c854f
								
							
						
					
					
						commit
						93825f2ec7
					
				
					 1 changed files with 16 additions and 16 deletions
				
			
		| 
						 | 
				
			
			@ -27,19 +27,8 @@
 | 
			
		|||
 | 
			
		||||
#include "timekeeping.h"
 | 
			
		||||
 | 
			
		||||
/* The Jiffies based clocksource is the lowest common
 | 
			
		||||
 * denominator clock source which should function on
 | 
			
		||||
 * all systems. It has the same coarse resolution as
 | 
			
		||||
 * the timer interrupt frequency HZ and it suffers
 | 
			
		||||
 * inaccuracies caused by missed or lost timer
 | 
			
		||||
 * interrupts and the inability for the timer
 | 
			
		||||
 * interrupt hardware to accuratly tick at the
 | 
			
		||||
 * requested HZ value. It is also not recommended
 | 
			
		||||
 * for "tick-less" systems.
 | 
			
		||||
 */
 | 
			
		||||
#define NSEC_PER_JIFFY	((NSEC_PER_SEC+HZ/2)/HZ)
 | 
			
		||||
 | 
			
		||||
/* Since jiffies uses a simple NSEC_PER_JIFFY multiplier
 | 
			
		||||
/* Since jiffies uses a simple TICK_NSEC multiplier
 | 
			
		||||
 * conversion, the .shift value could be zero. However
 | 
			
		||||
 * this would make NTP adjustments impossible as they are
 | 
			
		||||
 * in units of 1/2^.shift. Thus we use JIFFIES_SHIFT to
 | 
			
		||||
| 
						 | 
				
			
			@ -47,8 +36,8 @@
 | 
			
		|||
 * amount, and give ntp adjustments in units of 1/2^8
 | 
			
		||||
 *
 | 
			
		||||
 * The value 8 is somewhat carefully chosen, as anything
 | 
			
		||||
 * larger can result in overflows. NSEC_PER_JIFFY grows as
 | 
			
		||||
 * HZ shrinks, so values greater than 8 overflow 32bits when
 | 
			
		||||
 * larger can result in overflows. TICK_NSEC grows as HZ
 | 
			
		||||
 * shrinks, so values greater than 8 overflow 32bits when
 | 
			
		||||
 * HZ=100.
 | 
			
		||||
 */
 | 
			
		||||
#if HZ < 34
 | 
			
		||||
| 
						 | 
				
			
			@ -64,12 +53,23 @@ static u64 jiffies_read(struct clocksource *cs)
 | 
			
		|||
	return (u64) jiffies;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * The Jiffies based clocksource is the lowest common
 | 
			
		||||
 * denominator clock source which should function on
 | 
			
		||||
 * all systems. It has the same coarse resolution as
 | 
			
		||||
 * the timer interrupt frequency HZ and it suffers
 | 
			
		||||
 * inaccuracies caused by missed or lost timer
 | 
			
		||||
 * interrupts and the inability for the timer
 | 
			
		||||
 * interrupt hardware to accuratly tick at the
 | 
			
		||||
 * requested HZ value. It is also not recommended
 | 
			
		||||
 * for "tick-less" systems.
 | 
			
		||||
 */
 | 
			
		||||
static struct clocksource clocksource_jiffies = {
 | 
			
		||||
	.name		= "jiffies",
 | 
			
		||||
	.rating		= 1, /* lowest valid rating*/
 | 
			
		||||
	.read		= jiffies_read,
 | 
			
		||||
	.mask		= CLOCKSOURCE_MASK(32),
 | 
			
		||||
	.mult		= NSEC_PER_JIFFY << JIFFIES_SHIFT, /* details above */
 | 
			
		||||
	.mult		= TICK_NSEC << JIFFIES_SHIFT, /* details above */
 | 
			
		||||
	.shift		= JIFFIES_SHIFT,
 | 
			
		||||
	.max_cycles	= 10,
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			@ -125,7 +125,7 @@ int register_refined_jiffies(long cycles_per_second)
 | 
			
		|||
	shift_hz += cycles_per_tick/2;
 | 
			
		||||
	do_div(shift_hz, cycles_per_tick);
 | 
			
		||||
	/* Calculate nsec_per_tick using shift_hz */
 | 
			
		||||
	nsec_per_tick = (u64)NSEC_PER_SEC << 8;
 | 
			
		||||
	nsec_per_tick = (u64)TICK_NSEC << 8;
 | 
			
		||||
	nsec_per_tick += (u32)shift_hz/2;
 | 
			
		||||
	do_div(nsec_per_tick, (u32)shift_hz);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue