|
@@ -66,6 +66,8 @@ u8 pvclock_read_flags(struct pvclock_vcpu_time_info *src)
|
|
|
|
|
|
do {
|
|
|
version = __pvclock_read_cycles(src, &ret, &flags);
|
|
|
+ /* Make sure that the version double-check is last. */
|
|
|
+ smp_rmb();
|
|
|
} while ((src->version & 1) || version != src->version);
|
|
|
|
|
|
return flags & valid_flags;
|
|
@@ -80,6 +82,8 @@ cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src)
|
|
|
|
|
|
do {
|
|
|
version = __pvclock_read_cycles(src, &ret, &flags);
|
|
|
+ /* Make sure that the version double-check is last. */
|
|
|
+ smp_rmb();
|
|
|
} while ((src->version & 1) || version != src->version);
|
|
|
|
|
|
if (unlikely((flags & PVCLOCK_GUEST_STOPPED) != 0)) {
|