aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorMarcelo Tosatti <mtosatti@redhat.com>2008-02-22 12:21:37 -0500
committerAvi Kivity <avi@qumranet.com>2008-04-27 05:00:27 -0400
commit2f333bcb4edd8daef99dabe4e7df8277af73cff1 (patch)
treec984466e7756e0910bf470a094558b52bd10df33 /include
parent9f81128591ca1e9907f2e7a7b195e33232167d60 (diff)
KVM: MMU: hypercall based pte updates and TLB flushes
Hypercall based pte updates are faster than faults, and also allow use of the lazy MMU mode to batch operations. Don't report the feature if two dimensional paging is enabled. [avi: - one mmu_op hypercall instead of one per op - allow 64-bit gpa on hypercall - don't pass host errors (-ENOMEM) to guest] [akpm: warning fix on i386] Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Avi Kivity <avi@qumranet.com>
Diffstat (limited to 'include')
-rw-r--r--include/asm-x86/kvm_host.h4
-rw-r--r--include/asm-x86/kvm_para.h29
-rw-r--r--include/linux/kvm.h1
-rw-r--r--include/linux/kvm_para.h5
4 files changed, 38 insertions, 1 deletions
diff --git a/include/asm-x86/kvm_host.h b/include/asm-x86/kvm_host.h
index 99d31f5ed9ff..772ba95f0a0e 100644
--- a/include/asm-x86/kvm_host.h
+++ b/include/asm-x86/kvm_host.h
@@ -434,6 +434,10 @@ int load_pdptrs(struct kvm_vcpu *vcpu, unsigned long cr3);
434 434
435int __emulator_write_phys(struct kvm_vcpu *vcpu, gpa_t gpa, 435int __emulator_write_phys(struct kvm_vcpu *vcpu, gpa_t gpa,
436 const void *val, int bytes); 436 const void *val, int bytes);
437int kvm_pv_mmu_op(struct kvm_vcpu *vcpu, unsigned long bytes,
438 gpa_t addr, unsigned long *ret);
439
440extern bool tdp_enabled;
437 441
438enum emulation_result { 442enum emulation_result {
439 EMULATE_DONE, /* no further processing */ 443 EMULATE_DONE, /* no further processing */
diff --git a/include/asm-x86/kvm_para.h b/include/asm-x86/kvm_para.h
index ed5df3a54aab..509845942070 100644
--- a/include/asm-x86/kvm_para.h
+++ b/include/asm-x86/kvm_para.h
@@ -12,10 +12,39 @@
12#define KVM_CPUID_FEATURES 0x40000001 12#define KVM_CPUID_FEATURES 0x40000001
13#define KVM_FEATURE_CLOCKSOURCE 0 13#define KVM_FEATURE_CLOCKSOURCE 0
14#define KVM_FEATURE_NOP_IO_DELAY 1 14#define KVM_FEATURE_NOP_IO_DELAY 1
15#define KVM_FEATURE_MMU_OP 2
15 16
16#define MSR_KVM_WALL_CLOCK 0x11 17#define MSR_KVM_WALL_CLOCK 0x11
17#define MSR_KVM_SYSTEM_TIME 0x12 18#define MSR_KVM_SYSTEM_TIME 0x12
18 19
20#define KVM_MAX_MMU_OP_BATCH 32
21
22/* Operations for KVM_HC_MMU_OP */
23#define KVM_MMU_OP_WRITE_PTE 1
24#define KVM_MMU_OP_FLUSH_TLB 2
25#define KVM_MMU_OP_RELEASE_PT 3
26
27/* Payload for KVM_HC_MMU_OP */
28struct kvm_mmu_op_header {
29 __u32 op;
30 __u32 pad;
31};
32
33struct kvm_mmu_op_write_pte {
34 struct kvm_mmu_op_header header;
35 __u64 pte_phys;
36 __u64 pte_val;
37};
38
39struct kvm_mmu_op_flush_tlb {
40 struct kvm_mmu_op_header header;
41};
42
43struct kvm_mmu_op_release_pt {
44 struct kvm_mmu_op_header header;
45 __u64 pt_phys;
46};
47
19#ifdef __KERNEL__ 48#ifdef __KERNEL__
20#include <asm/processor.h> 49#include <asm/processor.h>
21 50
diff --git a/include/linux/kvm.h b/include/linux/kvm.h
index 76f09474be98..c1b502a50a01 100644
--- a/include/linux/kvm.h
+++ b/include/linux/kvm.h
@@ -238,6 +238,7 @@ struct kvm_vapic_addr {
238#define KVM_CAP_NR_MEMSLOTS 10 /* returns max memory slots per vm */ 238#define KVM_CAP_NR_MEMSLOTS 10 /* returns max memory slots per vm */
239#define KVM_CAP_PIT 11 239#define KVM_CAP_PIT 11
240#define KVM_CAP_NOP_IO_DELAY 12 240#define KVM_CAP_NOP_IO_DELAY 12
241#define KVM_CAP_PV_MMU 13
241 242
242/* 243/*
243 * ioctls for VM fds 244 * ioctls for VM fds
diff --git a/include/linux/kvm_para.h b/include/linux/kvm_para.h
index 9c462c91a6b1..3ddce03766ca 100644
--- a/include/linux/kvm_para.h
+++ b/include/linux/kvm_para.h
@@ -11,8 +11,11 @@
11 11
12/* Return values for hypercalls */ 12/* Return values for hypercalls */
13#define KVM_ENOSYS 1000 13#define KVM_ENOSYS 1000
14#define KVM_EFAULT EFAULT
15#define KVM_E2BIG E2BIG
14 16
15#define KVM_HC_VAPIC_POLL_IRQ 1 17#define KVM_HC_VAPIC_POLL_IRQ 1
18#define KVM_HC_MMU_OP 2
16 19
17/* 20/*
18 * hypercalls use architecture specific 21 * hypercalls use architecture specific