diff options
Diffstat (limited to 'arch/x86/vdso/vclock_gettime.c')
-rw-r--r-- | arch/x86/vdso/vclock_gettime.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/arch/x86/vdso/vclock_gettime.c b/arch/x86/vdso/vclock_gettime.c index c74436e687bf..72074d528400 100644 --- a/arch/x86/vdso/vclock_gettime.c +++ b/arch/x86/vdso/vclock_gettime.c | |||
@@ -85,15 +85,18 @@ static notrace cycle_t vread_pvclock(int *mode) | |||
85 | cycle_t ret; | 85 | cycle_t ret; |
86 | u64 last; | 86 | u64 last; |
87 | u32 version; | 87 | u32 version; |
88 | u32 migrate_count; | ||
89 | u8 flags; | 88 | u8 flags; |
90 | unsigned cpu, cpu1; | 89 | unsigned cpu, cpu1; |
91 | 90 | ||
92 | 91 | ||
93 | /* | 92 | /* |
94 | * When looping to get a consistent (time-info, tsc) pair, we | 93 | * Note: hypervisor must guarantee that: |
95 | * also need to deal with the possibility we can switch vcpus, | 94 | * 1. cpu ID number maps 1:1 to per-CPU pvclock time info. |
96 | * so make sure we always re-fetch time-info for the current vcpu. | 95 | * 2. that per-CPU pvclock time info is updated if the |
96 | * underlying CPU changes. | ||
97 | * 3. that version is increased whenever underlying CPU | ||
98 | * changes. | ||
99 | * | ||
97 | */ | 100 | */ |
98 | do { | 101 | do { |
99 | cpu = __getcpu() & VGETCPU_CPU_MASK; | 102 | cpu = __getcpu() & VGETCPU_CPU_MASK; |
@@ -104,8 +107,6 @@ static notrace cycle_t vread_pvclock(int *mode) | |||
104 | 107 | ||
105 | pvti = get_pvti(cpu); | 108 | pvti = get_pvti(cpu); |
106 | 109 | ||
107 | migrate_count = pvti->migrate_count; | ||
108 | |||
109 | version = __pvclock_read_cycles(&pvti->pvti, &ret, &flags); | 110 | version = __pvclock_read_cycles(&pvti->pvti, &ret, &flags); |
110 | 111 | ||
111 | /* | 112 | /* |
@@ -117,8 +118,7 @@ static notrace cycle_t vread_pvclock(int *mode) | |||
117 | cpu1 = __getcpu() & VGETCPU_CPU_MASK; | 118 | cpu1 = __getcpu() & VGETCPU_CPU_MASK; |
118 | } while (unlikely(cpu != cpu1 || | 119 | } while (unlikely(cpu != cpu1 || |
119 | (pvti->pvti.version & 1) || | 120 | (pvti->pvti.version & 1) || |
120 | pvti->pvti.version != version || | 121 | pvti->pvti.version != version)); |
121 | pvti->migrate_count != migrate_count)); | ||
122 | 122 | ||
123 | if (unlikely(!(flags & PVCLOCK_TSC_STABLE_BIT))) | 123 | if (unlikely(!(flags & PVCLOCK_TSC_STABLE_BIT))) |
124 | *mode = VCLOCK_NONE; | 124 | *mode = VCLOCK_NONE; |