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.c21
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
1732static 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 }