Merge branch 'x86-timers-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull x86 timer updates from Thomas Gleixner: "These updates are related to TSC handling: - Support platforms which have synchronized TSCs but the boot CPU has a non zero TSC_ADJUST value, which is considered a firmware bug on normal systems. This applies to HPE/SGI UV platforms where the platform firmware uses TSC_ADJUST to ensure TSC synchronization across a huge number of sockets, but due to power on timings the boot CPU cannot be guaranteed to have a zero TSC_ADJUST register value. - Fix the ordering of udelay calibration and kvmclock_init() - Cleanup the udelay and calibration code" * 'x86-timers-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: x86/tsc: Mark cyc2ns_init() and detect_art() __init x86/platform/UV: Mark tsc_check_sync as an init function x86/tsc: Make CONFIG_X86_TSC=n build work again x86/platform/UV: Add check of TSC state set by UV BIOS x86/tsc: Provide a means to disable TSC ART x86/tsc: Drastically reduce the number of firmware bug warnings x86/tsc: Skip TSC test and error messages if already unstable x86/tsc: Add option that TSC on Socket 0 being non-zero is valid x86/timers: Move simple_udelay_calibration() past kvmclock_init() x86/timers: Make recalibrate_cpu_khz() void x86/timers: Move the simple udelay calibration to tsc.h
This commit is contained in:
@@ -812,26 +812,6 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __init simple_udelay_calibration(void)
|
||||
{
|
||||
unsigned int tsc_khz, cpu_khz;
|
||||
unsigned long lpj;
|
||||
|
||||
if (!boot_cpu_has(X86_FEATURE_TSC))
|
||||
return;
|
||||
|
||||
cpu_khz = x86_platform.calibrate_cpu();
|
||||
tsc_khz = x86_platform.calibrate_tsc();
|
||||
|
||||
tsc_khz = tsc_khz ? : cpu_khz;
|
||||
if (!tsc_khz)
|
||||
return;
|
||||
|
||||
lpj = tsc_khz * 1000;
|
||||
do_div(lpj, HZ);
|
||||
loops_per_jiffy = lpj;
|
||||
}
|
||||
|
||||
/*
|
||||
* Determine if we were loaded by an EFI loader. If so, then we have also been
|
||||
* passed the efi memmap, systab, etc., so we should use these data structures
|
||||
@@ -1039,8 +1019,6 @@ void __init setup_arch(char **cmdline_p)
|
||||
*/
|
||||
init_hypervisor_platform();
|
||||
|
||||
simple_udelay_calibration();
|
||||
|
||||
x86_init.resources.probe_roms();
|
||||
|
||||
/* after parse_early_param, so could debug it */
|
||||
@@ -1125,9 +1103,6 @@ void __init setup_arch(char **cmdline_p)
|
||||
memblock_set_current_limit(ISA_END_ADDRESS);
|
||||
e820__memblock_setup();
|
||||
|
||||
if (!early_xdbc_setup_hardware())
|
||||
early_xdbc_register_console();
|
||||
|
||||
reserve_bios_regions();
|
||||
|
||||
if (efi_enabled(EFI_MEMMAP)) {
|
||||
@@ -1233,6 +1208,10 @@ void __init setup_arch(char **cmdline_p)
|
||||
kvmclock_init();
|
||||
#endif
|
||||
|
||||
tsc_early_delay_calibrate();
|
||||
if (!early_xdbc_setup_hardware())
|
||||
early_xdbc_register_console();
|
||||
|
||||
x86_init.paging.pagetable_init();
|
||||
|
||||
kasan_init();
|
||||
|
Reference in New Issue
Block a user