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.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index c7ec0c921c01..f4cb1baaa04b 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -1206,6 +1206,7 @@ int kvm_dev_ioctl_check_extension(long ext)
1206 case KVM_CAP_IOEVENTFD: 1206 case KVM_CAP_IOEVENTFD:
1207 case KVM_CAP_PIT2: 1207 case KVM_CAP_PIT2:
1208 case KVM_CAP_PIT_STATE2: 1208 case KVM_CAP_PIT_STATE2:
1209 case KVM_CAP_SET_IDENTITY_MAP_ADDR:
1209 r = 1; 1210 r = 1;
1210 break; 1211 break;
1211 case KVM_CAP_COALESCED_MMIO: 1212 case KVM_CAP_COALESCED_MMIO:
@@ -1906,6 +1907,13 @@ static int kvm_vm_ioctl_set_tss_addr(struct kvm *kvm, unsigned long addr)
1906 return ret; 1907 return ret;
1907} 1908}
1908 1909
1910static int kvm_vm_ioctl_set_identity_map_addr(struct kvm *kvm,
1911 u64 ident_addr)
1912{
1913 kvm->arch.ept_identity_map_addr = ident_addr;
1914 return 0;
1915}
1916
1909static int kvm_vm_ioctl_set_nr_mmu_pages(struct kvm *kvm, 1917static int kvm_vm_ioctl_set_nr_mmu_pages(struct kvm *kvm,
1910 u32 kvm_nr_mmu_pages) 1918 u32 kvm_nr_mmu_pages)
1911{ 1919{
@@ -2173,6 +2181,17 @@ long kvm_arch_vm_ioctl(struct file *filp,
2173 if (r < 0) 2181 if (r < 0)
2174 goto out; 2182 goto out;
2175 break; 2183 break;
2184 case KVM_SET_IDENTITY_MAP_ADDR: {
2185 u64 ident_addr;
2186
2187 r = -EFAULT;
2188 if (copy_from_user(&ident_addr, argp, sizeof ident_addr))
2189 goto out;
2190 r = kvm_vm_ioctl_set_identity_map_addr(kvm, ident_addr);
2191 if (r < 0)
2192 goto out;
2193 break;
2194 }
2176 case KVM_SET_MEMORY_REGION: { 2195 case KVM_SET_MEMORY_REGION: {
2177 struct kvm_memory_region kvm_mem; 2196 struct kvm_memory_region kvm_mem;
2178 struct kvm_userspace_memory_region kvm_userspace_mem; 2197 struct kvm_userspace_memory_region kvm_userspace_mem;