#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt#include<linux/kernel.h>#include<linux/sched.h>#include<linux/sched/clock.h>#include<linux/init.h>#include<linux/export.h>#include<linux/timer.h>#include<linux/acpi_pmtmr.h>#include<linux/cpufreq.h>#include<linux/delay.h>#include<linux/clocksource.h>#include<linux/percpu.h>#include<linux/timex.h>#include<linux/static_key.h>#include<asm/hpet.h>#include<asm/timer.h>#include<asm/vgtod.h>#include<asm/time.h>#include<asm/delay.h>#include<asm/hypervisor.h>#include<asm/nmi.h>#include<asm/x86_init.h>#include<asm/geode.h>#include<asm/apic.h>#include<asm/intel-family.h>#include<asm/i8259.h>#include<asm/uv/uv.h>unsignedint__read_mostlycpu_khz;/* TSC clocks / usec, not used here */EXPORT_SYMBOL(cpu_khz);unsignedint__read_mostlytsc_khz;EXPORT_SYMBOL(tsc_khz);#define KHZ 1000/* * TSC can be unstable due to cpufreq or due to unsynced TSCs */staticint__read_mostlytsc_unstable;staticDEFINE_STATIC_KEY_FALSE(__use_tsc);inttsc_clocksource_reliable;staticu32art_to_tsc_numerator;staticu32art_to_tsc_denominator;staticu64art_to_tsc_off