aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kvm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kvm')
-rw-r--r--arch/x86/kvm/svm.c60
1 files changed, 0 insertions, 60 deletions
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 68b6d4cdd153..d458297d54c8 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -1421,66 +1421,6 @@ static void nested_svm_unmap(void *addr, enum km_type idx)
1421 kvm_release_page_dirty(page); 1421 kvm_release_page_dirty(page);
1422} 1422}
1423 1423
1424static struct page *nested_svm_get_page(struct vcpu_svm *svm, u64 gpa)
1425{
1426 struct page *page;
1427
1428 down_read(&current->mm->mmap_sem);
1429 page = gfn_to_page(svm->vcpu.kvm, gpa >> PAGE_SHIFT);
1430 up_read(&current->mm->mmap_sem);
1431
1432 if (is_error_page(page)) {
1433 printk(KERN_INFO "%s: could not find page at 0x%llx\n",
1434 __func__, gpa);
1435 kvm_release_page_clean(page);
1436 kvm_inject_gp(&svm->vcpu, 0);
1437 return NULL;
1438 }
1439 return page;
1440}
1441
1442static int nested_svm_do(struct vcpu_svm *svm,
1443 u64 arg1_gpa, u64 arg2_gpa, void *opaque,
1444 int (*handler)(struct vcpu_svm *svm,
1445 void *arg1,
1446 void *arg2,
1447 void *opaque))
1448{
1449 struct page *arg1_page;
1450 struct page *arg2_page = NULL;
1451 void *arg1;
1452 void *arg2 = NULL;
1453 int retval;
1454
1455 arg1_page = nested_svm_get_page(svm, arg1_gpa);
1456 if(arg1_page == NULL)
1457 return 1;
1458
1459 if (arg2_gpa) {
1460 arg2_page = nested_svm_get_page(svm, arg2_gpa);
1461 if(arg2_page == NULL) {
1462 kvm_release_page_clean(arg1_page);
1463 return 1;
1464 }
1465 }
1466
1467 arg1 = kmap_atomic(arg1_page, KM_USER0);
1468 if (arg2_gpa)
1469 arg2 = kmap_atomic(arg2_page, KM_USER1);
1470
1471 retval = handler(svm, arg1, arg2, opaque);
1472
1473 kunmap_atomic(arg1, KM_USER0);
1474 if (arg2_gpa)
1475 kunmap_atomic(arg2, KM_USER1);
1476
1477 kvm_release_page_dirty(arg1_page);
1478 if (arg2_gpa)
1479 kvm_release_page_dirty(arg2_page);
1480
1481 return retval;
1482}
1483
1484static bool nested_svm_exit_handled_msr(struct vcpu_svm *svm) 1424static bool nested_svm_exit_handled_msr(struct vcpu_svm *svm)
1485{ 1425{
1486 u32 param = svm->vmcb->control.exit_info_1 & 1; 1426 u32 param = svm->vmcb->control.exit_info_1 & 1;