diff options
author | Sheng Yang <sheng.yang@intel.com> | 2008-01-28 05:10:22 +0800 |
---|---|---|
committer | Avi Kivity <avi@qumranet.com> | 2008-04-27 12:00:21 +0300 |
commit | 7837699fa6d7adf81f26ab73a5f6897ea1ab9d6a (patch) | |
tree | 37a89d5c10869a9ada59df75b49d685708661434 /arch/x86/kvm/x86.c | |
parent | 4fcaa98267efc4d39ded9b0bc33c6b4a2f62fecd (diff) | |
download | linux-7837699fa6d7adf81f26ab73a5f6897ea1ab9d6a.tar.bz2 |
KVM: In kernel PIT model
The patch moves the PIT model from userspace to kernel, and increases
the timer accuracy greatly.
[marcelo: make last_injected_time per-guest]
Signed-off-by: Sheng Yang <sheng.yang@intel.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
Tested-and-Acked-by: Alex Davis <alex14641@yahoo.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r-- | arch/x86/kvm/x86.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index bf78d6522d3d..c33a4578132c 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -17,6 +17,7 @@ #include <linux/kvm_host.h> #include "irq.h" #include "mmu.h" +#include "i8254.h" #include <linux/clocksource.h> #include <linux/kvm.h> @@ -818,6 +819,7 @@ int kvm_dev_ioctl_check_extension(long ext) case KVM_CAP_SET_TSS_ADDR: case KVM_CAP_EXT_CPUID: case KVM_CAP_CLOCKSOURCE: + case KVM_CAP_PIT: r = 1; break; case KVM_CAP_VAPIC: @@ -1594,6 +1596,12 @@ long kvm_arch_vm_ioctl(struct file *filp, } else goto out; break; + case KVM_CREATE_PIT: + r = -ENOMEM; + kvm->arch.vpit = kvm_create_pit(kvm); + if (kvm->arch.vpit) + r = 0; + break; case KVM_IRQ_LINE: { struct kvm_irq_level irq_event; @@ -3372,6 +3380,7 @@ static void kvm_free_vcpus(struct kvm *kvm) void kvm_arch_destroy_vm(struct kvm *kvm) { + kvm_free_pit(kvm); kfree(kvm->arch.vpic); kfree(kvm->arch.vioapic); kvm_free_vcpus(kvm); |