forked from Minki/linux
[S390] fix/cleanup sched_clock
CONFIG_PRINTK_TIME reveals that sched_clock has a wrong offset during boot: .. [ 0.000000] Movable zone: 0 pages used for memmap [ 0.000000] Built 1 zonelists in Zone order, mobility grouping on. Total pages: 775679 [ 0.000000] Kernel command line: dasd=4b6c root=/dev/dasda1 ro noinitrd [ 0.000000] PID hash table entries: 4096 (order: 12, 32768 bytes) [6920575.975232] console [ttyS0] enabled [6920575.987586] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes) [6920575.991404] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes) .. The s390 implementation of sched_clock uses the store clock instruction and subtracts jiffies_timer_cc. jiffies_timer_cc is a local variable in arch/s390/kernel/time.c and only used for sched_clock and monotonic clock. For historical reasons there is an offset on that value. With todays code this offset is unnecessary. By removing that offset we can get a sched_clock which returns the nanoseconds after time_init. This improves CONFIG_PRINTK_TIME. Since sched_clock is the only user, I have also renamed jiffies_timer_cc to sched_clock_base_cc. In addition, the local variable init_timer_cc is redundant and can be romved as well. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
59da21398e
commit
8107d8296b
@ -59,7 +59,7 @@
|
||||
|
||||
static ext_int_info_t ext_int_info_cc;
|
||||
static ext_int_info_t ext_int_etr_cc;
|
||||
static u64 jiffies_timer_cc;
|
||||
static u64 sched_clock_base_cc;
|
||||
|
||||
static DEFINE_PER_CPU(struct clock_event_device, comparators);
|
||||
|
||||
@ -68,7 +68,7 @@ static DEFINE_PER_CPU(struct clock_event_device, comparators);
|
||||
*/
|
||||
unsigned long long sched_clock(void)
|
||||
{
|
||||
return ((get_clock_xt() - jiffies_timer_cc) * 125) >> 9;
|
||||
return ((get_clock_xt() - sched_clock_base_cc) * 125) >> 9;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -229,13 +229,10 @@ static struct clocksource clocksource_tod = {
|
||||
*/
|
||||
void __init time_init(void)
|
||||
{
|
||||
u64 init_timer_cc;
|
||||
|
||||
init_timer_cc = reset_tod_clock();
|
||||
jiffies_timer_cc = init_timer_cc - jiffies_64 * CLK_TICKS_PER_JIFFY;
|
||||
sched_clock_base_cc = reset_tod_clock();
|
||||
|
||||
/* set xtime */
|
||||
tod_to_timeval(init_timer_cc - TOD_UNIX_EPOCH, &xtime);
|
||||
tod_to_timeval(sched_clock_base_cc - TOD_UNIX_EPOCH, &xtime);
|
||||
set_normalized_timespec(&wall_to_monotonic,
|
||||
-xtime.tv_sec, -xtime.tv_nsec);
|
||||
|
||||
@ -289,7 +286,7 @@ static unsigned long long adjust_time(unsigned long long old,
|
||||
delta = -delta;
|
||||
adjust.offset = -ticks * (1000000 / HZ);
|
||||
}
|
||||
jiffies_timer_cc += delta;
|
||||
sched_clock_base_cc += delta;
|
||||
if (adjust.offset != 0) {
|
||||
printk(KERN_NOTICE "etr: time adjusted by %li micro-seconds\n",
|
||||
adjust.offset);
|
||||
|
Loading…
Reference in New Issue
Block a user