aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/x86.c
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2010-10-04 06:55:49 -0400
committerAvi Kivity <avi@redhat.com>2010-10-24 04:53:14 -0400
commit395c6b0a9d56fe7fdb7aeda12795d0eb02475d24 (patch)
tree86922dc53a722cca079e7ce911c47a566e05fc11 /arch/x86/kvm/x86.c
parent7ebaf15eefe7b019def72bd9d4420c7bc51ed69e (diff)
KVM: Disable interrupts around get_kernel_ns()
get_kernel_ns() wants preemption disabled. It doesn't make a lot of sense during the get/set ioctls (no way to make them non-racy) but the callee wants it. Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r--arch/x86/kvm/x86.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index ffcb90669ec5..e96038e1bc3a 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -3469,8 +3469,10 @@ long kvm_arch_vm_ioctl(struct file *filp,
3469 goto out; 3469 goto out;
3470 3470
3471 r = 0; 3471 r = 0;
3472 local_irq_disable();
3472 now_ns = get_kernel_ns(); 3473 now_ns = get_kernel_ns();
3473 delta = user_ns.clock - now_ns; 3474 delta = user_ns.clock - now_ns;
3475 local_irq_enable();
3474 kvm->arch.kvmclock_offset = delta; 3476 kvm->arch.kvmclock_offset = delta;
3475 break; 3477 break;
3476 } 3478 }
@@ -3478,8 +3480,10 @@ long kvm_arch_vm_ioctl(struct file *filp,
3478 struct kvm_clock_data user_ns; 3480 struct kvm_clock_data user_ns;
3479 u64 now_ns; 3481 u64 now_ns;
3480 3482
3483 local_irq_disable();
3481 now_ns = get_kernel_ns(); 3484 now_ns = get_kernel_ns();
3482 user_ns.clock = kvm->arch.kvmclock_offset + now_ns; 3485 user_ns.clock = kvm->arch.kvmclock_offset + now_ns;
3486 local_irq_enable();
3483 user_ns.flags = 0; 3487 user_ns.flags = 0;
3484 3488
3485 r = -EFAULT; 3489 r = -EFAULT;