diff options
author | Marcelo Tosatti <mtosatti@redhat.com> | 2012-11-27 20:28:52 -0500 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2012-11-27 20:29:08 -0500 |
commit | 2697902be89d7f38e9736dfe946cd0e5d4f47b80 (patch) | |
tree | c1588307560a7a4ecd05bc3d1eff8a36bf3b4fe3 | |
parent | dce2db0a35197e2f4421245079f19ab753e97348 (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.h | 1 | ||||
-rw-r--r-- | arch/x86/kernel/pvclock.c | 13 |
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 */ |
8 | cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src); | 8 | cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src); |
9 | u8 pvclock_read_flags(struct pvclock_vcpu_time_info *src); | ||
9 | void pvclock_set_flags(u8 flags); | 10 | void pvclock_set_flags(u8 flags); |
10 | unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src); | 11 | unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src); |
11 | void pvclock_read_wallclock(struct pvclock_wall_clock *wall, | 12 | void 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 | ||
48 | u8 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 | |||
48 | cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src) | 61 | cycle_t pvclock_clocksource_read(struct pvclock_vcpu_time_info *src) |
49 | { | 62 | { |
50 | unsigned version; | 63 | unsigned version; |