aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/x86.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r--arch/x86/kvm/x86.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 15f39fc08ece..5eb3b8dd74b8 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -1127,6 +1127,7 @@ int kvm_dev_ioctl_check_extension(long ext)
1127 case KVM_CAP_IRQ_INJECT_STATUS: 1127 case KVM_CAP_IRQ_INJECT_STATUS:
1128 case KVM_CAP_ASSIGN_DEV_IRQ: 1128 case KVM_CAP_ASSIGN_DEV_IRQ:
1129 case KVM_CAP_IRQFD: 1129 case KVM_CAP_IRQFD:
1130 case KVM_CAP_PIT2:
1130 r = 1; 1131 r = 1;
1131 break; 1132 break;
1132 case KVM_CAP_COALESCED_MMIO: 1133 case KVM_CAP_COALESCED_MMIO:
@@ -2038,6 +2039,7 @@ long kvm_arch_vm_ioctl(struct file *filp,
2038 union { 2039 union {
2039 struct kvm_pit_state ps; 2040 struct kvm_pit_state ps;
2040 struct kvm_memory_alias alias; 2041 struct kvm_memory_alias alias;
2042 struct kvm_pit_config pit_config;
2041 } u; 2043 } u;
2042 2044
2043 switch (ioctl) { 2045 switch (ioctl) {
@@ -2098,12 +2100,20 @@ long kvm_arch_vm_ioctl(struct file *filp,
2098 } 2100 }
2099 break; 2101 break;
2100 case KVM_CREATE_PIT: 2102 case KVM_CREATE_PIT:
2103 u.pit_config.flags = KVM_PIT_SPEAKER_DUMMY;
2104 goto create_pit;
2105 case KVM_CREATE_PIT2:
2106 r = -EFAULT;
2107 if (copy_from_user(&u.pit_config, argp,
2108 sizeof(struct kvm_pit_config)))
2109 goto out;
2110 create_pit:
2101 mutex_lock(&kvm->lock); 2111 mutex_lock(&kvm->lock);
2102 r = -EEXIST; 2112 r = -EEXIST;
2103 if (kvm->arch.vpit) 2113 if (kvm->arch.vpit)
2104 goto create_pit_unlock; 2114 goto create_pit_unlock;
2105 r = -ENOMEM; 2115 r = -ENOMEM;
2106 kvm->arch.vpit = kvm_create_pit(kvm); 2116 kvm->arch.vpit = kvm_create_pit(kvm, u.pit_config.flags);
2107 if (kvm->arch.vpit) 2117 if (kvm->arch.vpit)
2108 r = 0; 2118 r = 0;
2109 create_pit_unlock: 2119 create_pit_unlock: