aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm/x86.c
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@web.de>2009-05-14 16:42:53 -0400
committerAvi Kivity <avi@redhat.com>2009-09-10 01:32:41 -0400
commitc5ff41ce66382d657a76bc06ba252d848826950f (patch)
tree4b7bc3674faa6259b1e6b07fc616b17dcf281d98 /arch/x86/kvm/x86.c
parent721eecbf4fe995ca94a9edec0c9843b1cc0eaaf3 (diff)
KVM: Allow PIT emulation without speaker port
The in-kernel speaker emulation is only a dummy and also unneeded from the performance point of view. Rather, it takes user space support to generate sound output on the host, e.g. console beeps. To allow this, introduce KVM_CREATE_PIT2 which controls in-kernel speaker port emulation via a flag passed along the new IOCTL. It also leaves room for future extensions of the PIT configuration interface. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> Signed-off-by: Avi Kivity <avi@redhat.com>
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: