x86: pvclock: introduce helper to read flags
authorMarcelo Tosatti <mtosatti@redhat.com>
Wed, 28 Nov 2012 01:28:52 +0000 (23:28 -0200)
committerMarcelo Tosatti <mtosatti@redhat.com>
Wed, 28 Nov 2012 01:29:08 +0000 (23:29 -0200)
Acked-by: Glauber Costa <glommer@parallels.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
arch/x86/include/asm/pvclock.h
arch/x86/kernel/pvclock.c

index 47e25d464104b347ac348b4268434ff0a08be000..ea27a8dd189cbecfdd796046f51ef31da7f93c56 100644 (file)
@@ -6,6 +6,7 @@
 
 /* some helper functions for xen and kvm pv clock sources */
 cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src);
+u8 pvclock_read_flags(struct pvclock_vcpu_time_info *src);
 void pvclock_set_flags(u8 flags);
 unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src);
 void pvclock_read_wallclock(struct pvclock_wall_clock *wall,
index a7d90910c61a85d401e42c9c8c267f0495bd4ddf..c8fb043a8695793f6907cb6c5c789aff3f2274ec 100644 (file)
@@ -45,6 +45,19 @@ void pvclock_resume(void)
        atomic64_set(&last_value, 0);
 }
 
+u8 pvclock_read_flags(struct pvclock_vcpu_time_info *src)
+{
+       unsigned version;
+       cycle_t ret;
+       u8 flags;
+
+       do {
+               version = __pvclock_read_cycles(src, &ret, &flags);
+       } while ((src->version & 1) || version != src->version);
+
+       return flags & valid_flags;
+}
+
 cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src)
 {
        unsigned version;