diff options
author | Tiejun Chen <tiejun.chen@intel.com> | 2014-09-26 02:00:04 -0400 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2014-11-03 06:07:33 -0500 |
commit | c6338ce494456ed9c92ef10f63c0a8408bfeac6d (patch) | |
tree | 0ed47a0d66df4ea344cc9c96760a816b3c75069e /arch/x86/kernel/kvmclock.c | |
parent | f30ebc312ca9def25650b4e1d01cdb425c310dca (diff) |
kvm: kvmclock: use get_cpu() and put_cpu()
We can use get_cpu() and put_cpu() to replace
preempt_disable()/cpu = smp_processor_id() and
preempt_enable() for slightly better code.
Signed-off-by: Tiejun Chen <tiejun.chen@intel.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/kernel/kvmclock.c')
-rw-r--r-- | arch/x86/kernel/kvmclock.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index d9156ceecdff..0bf3467d7f30 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c | |||
@@ -59,13 +59,12 @@ static void kvm_get_wallclock(struct timespec *now) | |||
59 | 59 | ||
60 | native_write_msr(msr_kvm_wall_clock, low, high); | 60 | native_write_msr(msr_kvm_wall_clock, low, high); |
61 | 61 | ||
62 | preempt_disable(); | 62 | cpu = get_cpu(); |
63 | cpu = smp_processor_id(); | ||
64 | 63 | ||
65 | vcpu_time = &hv_clock[cpu].pvti; | 64 | vcpu_time = &hv_clock[cpu].pvti; |
66 | pvclock_read_wallclock(&wall_clock, vcpu_time, now); | 65 | pvclock_read_wallclock(&wall_clock, vcpu_time, now); |
67 | 66 | ||
68 | preempt_enable(); | 67 | put_cpu(); |
69 | } | 68 | } |
70 | 69 | ||
71 | static int kvm_set_wallclock(const struct timespec *now) | 70 | static int kvm_set_wallclock(const struct timespec *now) |
@@ -107,11 +106,10 @@ static unsigned long kvm_get_tsc_khz(void) | |||
107 | int cpu; | 106 | int cpu; |
108 | unsigned long tsc_khz; | 107 | unsigned long tsc_khz; |
109 | 108 | ||
110 | preempt_disable(); | 109 | cpu = get_cpu(); |
111 | cpu = smp_processor_id(); | ||
112 | src = &hv_clock[cpu].pvti; | 110 | src = &hv_clock[cpu].pvti; |
113 | tsc_khz = pvclock_tsc_khz(src); | 111 | tsc_khz = pvclock_tsc_khz(src); |
114 | preempt_enable(); | 112 | put_cpu(); |
115 | return tsc_khz; | 113 | return tsc_khz; |
116 | } | 114 | } |
117 | 115 | ||
@@ -284,23 +282,22 @@ int __init kvm_setup_vsyscall_timeinfo(void) | |||
284 | 282 | ||
285 | size = PAGE_ALIGN(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS); | 283 | size = PAGE_ALIGN(sizeof(struct pvclock_vsyscall_time_info)*NR_CPUS); |
286 | 284 | ||
287 | preempt_disable(); | 285 | cpu = get_cpu(); |
288 | cpu = smp_processor_id(); | ||
289 | 286 | ||
290 | vcpu_time = &hv_clock[cpu].pvti; | 287 | vcpu_time = &hv_clock[cpu].pvti; |
291 | flags = pvclock_read_flags(vcpu_time); | 288 | flags = pvclock_read_flags(vcpu_time); |
292 | 289 | ||
293 | if (!(flags & PVCLOCK_TSC_STABLE_BIT)) { | 290 | if (!(flags & PVCLOCK_TSC_STABLE_BIT)) { |
294 | preempt_enable(); | 291 | put_cpu(); |
295 | return 1; | 292 | return 1; |
296 | } | 293 | } |
297 | 294 | ||
298 | if ((ret = pvclock_init_vsyscall(hv_clock, size))) { | 295 | if ((ret = pvclock_init_vsyscall(hv_clock, size))) { |
299 | preempt_enable(); | 296 | put_cpu(); |
300 | return ret; | 297 | return ret; |
301 | } | 298 | } |
302 | 299 | ||
303 | preempt_enable(); | 300 | put_cpu(); |
304 | 301 | ||
305 | kvm_clock.archdata.vclock_mode = VCLOCK_PVCLOCK; | 302 | kvm_clock.archdata.vclock_mode = VCLOCK_PVCLOCK; |
306 | #endif | 303 | #endif |