aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcelo Tosatti <mtosatti@redhat.com>2012-11-27 20:28:52 -0500
committerMarcelo Tosatti <mtosatti@redhat.com>2012-11-27 20:29:08 -0500
commit2697902be89d7f38e9736dfe946cd0e5d4f47b80 (patch)
treec1588307560a7a4ecd05bc3d1eff8a36bf3b4fe3
parentdce2db0a35197e2f4421245079f19ab753e97348 (diff)
x86: pvclock: introduce helper to read flags
Acked-by: Glauber Costa <glommer@parallels.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
-rw-r--r--arch/x86/include/asm/pvclock.h1
-rw-r--r--arch/x86/kernel/pvclock.c13
2 files changed, 14 insertions, 0 deletions
diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h
index 47e25d464104..ea27a8dd189c 100644
--- a/arch/x86/include/asm/pvclock.h
+++ b/arch/x86/include/asm/pvclock.h
@@ -6,6 +6,7 @@
6 6
7/* some helper functions for xen and kvm pv clock sources */ 7/* some helper functions for xen and kvm pv clock sources */
8cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src); 8cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src);
9u8 pvclock_read_flags(struct pvclock_vcpu_time_info *src);
9void pvclock_set_flags(u8 flags); 10void pvclock_set_flags(u8 flags);
10unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src); 11unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src);
11void pvclock_read_wallclock(struct pvclock_wall_clock *wall, 12void pvclock_read_wallclock(struct pvclock_wall_clock *wall,
diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c
index a7d90910c61a..c8fb043a8695 100644
--- a/arch/x86/kernel/pvclock.c
+++ b/arch/x86/kernel/pvclock.c
@@ -45,6 +45,19 @@ void pvclock_resume(void)
45 atomic64_set(&last_value, 0); 45 atomic64_set(&last_value, 0);
46} 46}
47 47
48u8 pvclock_read_flags(struct pvclock_vcpu_time_info *src)
49{
50 unsigned version;
51 cycle_t ret;
52 u8 flags;
53
54 do {
55 version = __pvclock_read_cycles(src, &ret, &flags);
56 } while ((src->version & 1) || version != src->version);
57
58 return flags & valid_flags;
59}
60
48cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src) 61cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src)
49{ 62{
50 unsigned version; 63 unsigned version;