|
@@ -47,14 +47,12 @@
|
|
|
#include <asm/segment.h>
|
|
|
#include <asm/desc.h>
|
|
|
#include <asm/topology.h>
|
|
|
-#include <asm/vgtod.h>
|
|
|
#include <asm/traps.h>
|
|
|
|
|
|
#define CREATE_TRACE_POINTS
|
|
|
#include "vsyscall_trace.h"
|
|
|
|
|
|
DEFINE_VVAR(int, vgetcpu_mode);
|
|
|
-DEFINE_VVAR(struct vsyscall_gtod_data, vsyscall_gtod_data);
|
|
|
|
|
|
static enum { EMULATE, NATIVE, NONE } vsyscall_mode = EMULATE;
|
|
|
|
|
@@ -77,48 +75,6 @@ static int __init vsyscall_setup(char *str)
|
|
|
}
|
|
|
early_param("vsyscall", vsyscall_setup);
|
|
|
|
|
|
-void update_vsyscall_tz(void)
|
|
|
-{
|
|
|
- vsyscall_gtod_data.sys_tz = sys_tz;
|
|
|
-}
|
|
|
-
|
|
|
-void update_vsyscall(struct timekeeper *tk)
|
|
|
-{
|
|
|
- struct vsyscall_gtod_data *vdata = &vsyscall_gtod_data;
|
|
|
-
|
|
|
- write_seqcount_begin(&vdata->seq);
|
|
|
-
|
|
|
- /* copy vsyscall data */
|
|
|
- vdata->clock.vclock_mode = tk->clock->archdata.vclock_mode;
|
|
|
- vdata->clock.cycle_last = tk->clock->cycle_last;
|
|
|
- vdata->clock.mask = tk->clock->mask;
|
|
|
- vdata->clock.mult = tk->mult;
|
|
|
- vdata->clock.shift = tk->shift;
|
|
|
-
|
|
|
- vdata->wall_time_sec = tk->xtime_sec;
|
|
|
- vdata->wall_time_snsec = tk->xtime_nsec;
|
|
|
-
|
|
|
- vdata->monotonic_time_sec = tk->xtime_sec
|
|
|
- + tk->wall_to_monotonic.tv_sec;
|
|
|
- vdata->monotonic_time_snsec = tk->xtime_nsec
|
|
|
- + (tk->wall_to_monotonic.tv_nsec
|
|
|
- << tk->shift);
|
|
|
- while (vdata->monotonic_time_snsec >=
|
|
|
- (((u64)NSEC_PER_SEC) << tk->shift)) {
|
|
|
- vdata->monotonic_time_snsec -=
|
|
|
- ((u64)NSEC_PER_SEC) << tk->shift;
|
|
|
- vdata->monotonic_time_sec++;
|
|
|
- }
|
|
|
-
|
|
|
- vdata->wall_time_coarse.tv_sec = tk->xtime_sec;
|
|
|
- vdata->wall_time_coarse.tv_nsec = (long)(tk->xtime_nsec >> tk->shift);
|
|
|
-
|
|
|
- vdata->monotonic_time_coarse = timespec_add(vdata->wall_time_coarse,
|
|
|
- tk->wall_to_monotonic);
|
|
|
-
|
|
|
- write_seqcount_end(&vdata->seq);
|
|
|
-}
|
|
|
-
|
|
|
static void warn_bad_vsyscall(const char *level, struct pt_regs *regs,
|
|
|
const char *message)
|
|
|
{
|
|
@@ -374,7 +330,6 @@ void __init map_vsyscall(void)
|
|
|
{
|
|
|
extern char __vsyscall_page;
|
|
|
unsigned long physaddr_vsyscall = __pa_symbol(&__vsyscall_page);
|
|
|
- extern char __vvar_page;
|
|
|
unsigned long physaddr_vvar_page = __pa_symbol(&__vvar_page);
|
|
|
|
|
|
__set_fixmap(VSYSCALL_FIRST_PAGE, physaddr_vsyscall,
|