MIPS: csrc-r4k: Don't register as sched_clock if unfit
When we have more than one CPU in system, counter synchronisation overhead can lead to a scenario that sched_clock goes backward when being read from different CPUs. This is accommodated by CONFIG_HAVE_UNSTABLE_SCHED_CLOCK, but it's unavailable on 32bit kernel. We don't want to risk sched_clock correctness, so if we have multiple CPU in system and CONFIG_HAVE_UNSTABLE_SCHED_CLOCK is not set, we just don't use counter as sched_clock source. Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
This commit is contained in:
parent
426fa8e4fe
commit
7464c0762e
@ -68,6 +68,18 @@ static bool rdhwr_count_usable(void)
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline __init bool count_can_be_sched_clock(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_CPU_FREQ))
|
||||
return false;
|
||||
|
||||
if (num_possible_cpus() > 1 &&
|
||||
!IS_ENABLED(CONFIG_HAVE_UNSTABLE_SCHED_CLOCK))
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
|
||||
static bool __read_mostly r4k_clock_unstable;
|
||||
@ -125,9 +137,8 @@ int __init init_r4k_clocksource(void)
|
||||
|
||||
clocksource_register_hz(&clocksource_mips, mips_hpt_frequency);
|
||||
|
||||
#ifndef CONFIG_CPU_FREQ
|
||||
sched_clock_register(r4k_read_sched_clock, 32, mips_hpt_frequency);
|
||||
#endif
|
||||
if (count_can_be_sched_clock())
|
||||
sched_clock_register(r4k_read_sched_clock, 32, mips_hpt_frequency);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user