diff options
Diffstat (limited to 'arch/x86/kvm/x86.c')
-rw-r--r-- | arch/x86/kvm/x86.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index c3fbe8c55c13..a1f14611f4b9 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c | |||
@@ -993,6 +993,7 @@ int kvm_dev_ioctl_check_extension(long ext) | |||
993 | case KVM_CAP_NOP_IO_DELAY: | 993 | case KVM_CAP_NOP_IO_DELAY: |
994 | case KVM_CAP_MP_STATE: | 994 | case KVM_CAP_MP_STATE: |
995 | case KVM_CAP_SYNC_MMU: | 995 | case KVM_CAP_SYNC_MMU: |
996 | case KVM_CAP_REINJECT_CONTROL: | ||
996 | r = 1; | 997 | r = 1; |
997 | break; | 998 | break; |
998 | case KVM_CAP_COALESCED_MMIO: | 999 | case KVM_CAP_COALESCED_MMIO: |
@@ -1728,6 +1729,15 @@ static int kvm_vm_ioctl_set_pit(struct kvm *kvm, struct kvm_pit_state *ps) | |||
1728 | return r; | 1729 | return r; |
1729 | } | 1730 | } |
1730 | 1731 | ||
1732 | static int kvm_vm_ioctl_reinject(struct kvm *kvm, | ||
1733 | struct kvm_reinject_control *control) | ||
1734 | { | ||
1735 | if (!kvm->arch.vpit) | ||
1736 | return -ENXIO; | ||
1737 | kvm->arch.vpit->pit_state.pit_timer.reinject = control->pit_reinject; | ||
1738 | return 0; | ||
1739 | } | ||
1740 | |||
1731 | /* | 1741 | /* |
1732 | * Get (and clear) the dirty memory log for a memory slot. | 1742 | * Get (and clear) the dirty memory log for a memory slot. |
1733 | */ | 1743 | */ |
@@ -1925,6 +1935,17 @@ long kvm_arch_vm_ioctl(struct file *filp, | |||
1925 | r = 0; | 1935 | r = 0; |
1926 | break; | 1936 | break; |
1927 | } | 1937 | } |
1938 | case KVM_REINJECT_CONTROL: { | ||
1939 | struct kvm_reinject_control control; | ||
1940 | r = -EFAULT; | ||
1941 | if (copy_from_user(&control, argp, sizeof(control))) | ||
1942 | goto out; | ||
1943 | r = kvm_vm_ioctl_reinject(kvm, &control); | ||
1944 | if (r) | ||
1945 | goto out; | ||
1946 | r = 0; | ||
1947 | break; | ||
1948 | } | ||
1928 | default: | 1949 | default: |
1929 | ; | 1950 | ; |
1930 | } | 1951 | } |