/* * linux/kernel/time/timekeeping.c * * Kernel timekeeping code and accessor functions * * This code was moved from linux/kernel/timer.c. * Please see that file for copyright and history logs. * */#include<linux/timekeeper_internal.h>#include<linux/module.h>#include<linux/interrupt.h>#include<linux/percpu.h>#include<linux/init.h>#include<linux/mm.h>#include<linux/sched.h>#include<linux/syscore_ops.h>#include<linux/clocksource.h>#include<linux/jiffies.h>#include<linux/time.h>#include<linux/tick.h>#include<linux/stop_machine.h>#include<linux/pvclock_gtod.h>staticstructtimekeepertimekeeper;/* flag for if timekeeping is suspended */int__read_mostlytimekeeping_suspended;/* Flag for if there is a persistent clock on this platform */bool__read_mostlypersistent_clock_exist=false;staticinlinevoidtk_normalize_xtime(structtimekeeper*tk){while(tk->xtime_nsec>=((u64)NSEC_PER_SEC<<tk->shift)){tk->xtime_nsec-=(u64)NSEC_PER_SEC<<tk->shift;tk->xtime_sec++;}}staticvoidtk_set_xtime(structtimekeeper*tk,conststructtimespec*ts){tk->xtime_sec=ts->tv_sec;tk->xtime_nsec= <