diff options
Diffstat (limited to 'drivers/kvm/vmx.c')
-rw-r--r-- | drivers/kvm/vmx.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/kvm/vmx.c b/drivers/kvm/vmx.c index 8eb49e055ec..27a3318fa6c 100644 --- a/drivers/kvm/vmx.c +++ b/drivers/kvm/vmx.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/mm.h> | 26 | #include <linux/mm.h> |
27 | #include <linux/highmem.h> | 27 | #include <linux/highmem.h> |
28 | #include <linux/sched.h> | 28 | #include <linux/sched.h> |
29 | #include <linux/moduleparam.h> | ||
29 | 30 | ||
30 | #include <asm/io.h> | 31 | #include <asm/io.h> |
31 | #include <asm/desc.h> | 32 | #include <asm/desc.h> |
@@ -33,6 +34,9 @@ | |||
33 | MODULE_AUTHOR("Qumranet"); | 34 | MODULE_AUTHOR("Qumranet"); |
34 | MODULE_LICENSE("GPL"); | 35 | MODULE_LICENSE("GPL"); |
35 | 36 | ||
37 | static int bypass_guest_pf = 1; | ||
38 | module_param(bypass_guest_pf, bool, 0); | ||
39 | |||
36 | struct vmcs { | 40 | struct vmcs { |
37 | u32 revision_id; | 41 | u32 revision_id; |
38 | u32 abort; | 42 | u32 abort; |
@@ -1535,8 +1539,8 @@ static int vmx_vcpu_setup(struct vcpu_vmx *vmx) | |||
1535 | } | 1539 | } |
1536 | vmcs_write32(CPU_BASED_VM_EXEC_CONTROL, exec_control); | 1540 | vmcs_write32(CPU_BASED_VM_EXEC_CONTROL, exec_control); |
1537 | 1541 | ||
1538 | vmcs_write32(PAGE_FAULT_ERROR_CODE_MASK, 0); | 1542 | vmcs_write32(PAGE_FAULT_ERROR_CODE_MASK, !!bypass_guest_pf); |
1539 | vmcs_write32(PAGE_FAULT_ERROR_CODE_MATCH, 0); | 1543 | vmcs_write32(PAGE_FAULT_ERROR_CODE_MATCH, !!bypass_guest_pf); |
1540 | vmcs_write32(CR3_TARGET_COUNT, 0); /* 22.2.1 */ | 1544 | vmcs_write32(CR3_TARGET_COUNT, 0); /* 22.2.1 */ |
1541 | 1545 | ||
1542 | vmcs_writel(HOST_CR0, read_cr0()); /* 22.2.3 */ | 1546 | vmcs_writel(HOST_CR0, read_cr0()); /* 22.2.3 */ |
@@ -2582,6 +2586,9 @@ static int __init vmx_init(void) | |||
2582 | if (r) | 2586 | if (r) |
2583 | goto out1; | 2587 | goto out1; |
2584 | 2588 | ||
2589 | if (bypass_guest_pf) | ||
2590 | kvm_mmu_set_nonpresent_ptes(~0xffeull, 0ull); | ||
2591 | |||
2585 | return 0; | 2592 | return 0; |
2586 | 2593 | ||
2587 | out1: | 2594 | out1: |