diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-06 16:21:18 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-05-06 16:21:18 -0400 |
| commit | 6de410c2b0cc055ae9ee640c84331f6a70878d9b (patch) | |
| tree | 49dfc7df2f1977c2d665c99266ded92afc98734b /include/linux | |
| parent | c6799ade4ae04b53a5f677e5289116155ff01574 (diff) | |
| parent | 2ff81f70b56dc1cdd3bf2f08414608069db6ef1a (diff) | |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm: (66 commits)
KVM: Remove unused 'instruction_length'
KVM: Don't require explicit indication of completion of mmio or pio
KVM: Remove extraneous guest entry on mmio read
KVM: SVM: Only save/restore MSRs when needed
KVM: fix an if() condition
KVM: VMX: Add lazy FPU support for VT
KVM: VMX: Properly shadow the CR0 register in the vcpu struct
KVM: Don't complain about cpu erratum AA15
KVM: Lazy FPU support for SVM
KVM: Allow passing 64-bit values to the emulated read/write API
KVM: Per-vcpu statistics
KVM: VMX: Avoid unnecessary vcpu_load()/vcpu_put() cycles
KVM: MMU: Avoid heavy ASSERT at non debug mode.
KVM: VMX: Only save/restore MSR_K6_STAR if necessary
KVM: Fold drivers/kvm/kvm_vmx.h into drivers/kvm/vmx.c
KVM: VMX: Don't switch 64-bit msrs for 32-bit guests
KVM: VMX: Reduce unnecessary saving of host msrs
KVM: Handle guest page faults when emulating mmio
KVM: SVM: Report hardware exit reason to userspace instead of dmesg
KVM: Retry sleeping allocation if atomic allocation fails
...
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/Kbuild | 1 | ||||
| -rw-r--r-- | include/linux/kvm.h | 133 | ||||
| -rw-r--r-- | include/linux/miscdevice.h | 1 |
3 files changed, 97 insertions, 38 deletions
diff --git a/include/linux/Kbuild b/include/linux/Kbuild index 4ff0f57d0add..9f05279e7dd3 100644 --- a/include/linux/Kbuild +++ b/include/linux/Kbuild | |||
| @@ -96,6 +96,7 @@ header-y += iso_fs.h | |||
| 96 | header-y += ixjuser.h | 96 | header-y += ixjuser.h |
| 97 | header-y += jffs2.h | 97 | header-y += jffs2.h |
| 98 | header-y += keyctl.h | 98 | header-y += keyctl.h |
| 99 | header-y += kvm.h | ||
| 99 | header-y += limits.h | 100 | header-y += limits.h |
| 100 | header-y += lock_dlm_plock.h | 101 | header-y += lock_dlm_plock.h |
| 101 | header-y += magic.h | 102 | header-y += magic.h |
diff --git a/include/linux/kvm.h b/include/linux/kvm.h index 275354ffa1cb..e6edca81ab84 100644 --- a/include/linux/kvm.h +++ b/include/linux/kvm.h | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | #include <asm/types.h> | 11 | #include <asm/types.h> |
| 12 | #include <linux/ioctl.h> | 12 | #include <linux/ioctl.h> |
| 13 | 13 | ||
| 14 | #define KVM_API_VERSION 4 | 14 | #define KVM_API_VERSION 12 |
| 15 | 15 | ||
| 16 | /* | 16 | /* |
| 17 | * Architectural interrupt line count, and the size of the bitmap needed | 17 | * Architectural interrupt line count, and the size of the bitmap needed |
| @@ -33,37 +33,39 @@ struct kvm_memory_region { | |||
| 33 | /* for kvm_memory_region::flags */ | 33 | /* for kvm_memory_region::flags */ |
| 34 | #define KVM_MEM_LOG_DIRTY_PAGES 1UL | 34 | #define KVM_MEM_LOG_DIRTY_PAGES 1UL |
| 35 | 35 | ||
| 36 | 36 | struct kvm_memory_alias { | |
| 37 | #define KVM_EXIT_TYPE_FAIL_ENTRY 1 | 37 | __u32 slot; /* this has a different namespace than memory slots */ |
| 38 | #define KVM_EXIT_TYPE_VM_EXIT 2 | 38 | __u32 flags; |
| 39 | __u64 guest_phys_addr; | ||
| 40 | __u64 memory_size; | ||
| 41 | __u64 target_phys_addr; | ||
| 42 | }; | ||
| 39 | 43 | ||
| 40 | enum kvm_exit_reason { | 44 | enum kvm_exit_reason { |
| 41 | KVM_EXIT_UNKNOWN = 0, | 45 | KVM_EXIT_UNKNOWN = 0, |
| 42 | KVM_EXIT_EXCEPTION = 1, | 46 | KVM_EXIT_EXCEPTION = 1, |
| 43 | KVM_EXIT_IO = 2, | 47 | KVM_EXIT_IO = 2, |
| 44 | KVM_EXIT_CPUID = 3, | 48 | KVM_EXIT_HYPERCALL = 3, |
| 45 | KVM_EXIT_DEBUG = 4, | 49 | KVM_EXIT_DEBUG = 4, |
| 46 | KVM_EXIT_HLT = 5, | 50 | KVM_EXIT_HLT = 5, |
| 47 | KVM_EXIT_MMIO = 6, | 51 | KVM_EXIT_MMIO = 6, |
| 48 | KVM_EXIT_IRQ_WINDOW_OPEN = 7, | 52 | KVM_EXIT_IRQ_WINDOW_OPEN = 7, |
| 49 | KVM_EXIT_SHUTDOWN = 8, | 53 | KVM_EXIT_SHUTDOWN = 8, |
| 54 | KVM_EXIT_FAIL_ENTRY = 9, | ||
| 55 | KVM_EXIT_INTR = 10, | ||
| 50 | }; | 56 | }; |
| 51 | 57 | ||
| 52 | /* for KVM_RUN */ | 58 | /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */ |
| 53 | struct kvm_run { | 59 | struct kvm_run { |
| 54 | /* in */ | 60 | /* in */ |
| 55 | __u32 emulated; /* skip current instruction */ | ||
| 56 | __u32 mmio_completed; /* mmio request completed */ | ||
| 57 | __u8 request_interrupt_window; | 61 | __u8 request_interrupt_window; |
| 58 | __u8 padding1[7]; | 62 | __u8 padding1[7]; |
| 59 | 63 | ||
| 60 | /* out */ | 64 | /* out */ |
| 61 | __u32 exit_type; | ||
| 62 | __u32 exit_reason; | 65 | __u32 exit_reason; |
| 63 | __u32 instruction_length; | ||
| 64 | __u8 ready_for_interrupt_injection; | 66 | __u8 ready_for_interrupt_injection; |
| 65 | __u8 if_flag; | 67 | __u8 if_flag; |
| 66 | __u16 padding2; | 68 | __u8 padding2[2]; |
| 67 | 69 | ||
| 68 | /* in (pre_kvm_run), out (post_kvm_run) */ | 70 | /* in (pre_kvm_run), out (post_kvm_run) */ |
| 69 | __u64 cr8; | 71 | __u64 cr8; |
| @@ -72,29 +74,26 @@ struct kvm_run { | |||
| 72 | union { | 74 | union { |
| 73 | /* KVM_EXIT_UNKNOWN */ | 75 | /* KVM_EXIT_UNKNOWN */ |
| 74 | struct { | 76 | struct { |
| 75 | __u32 hardware_exit_reason; | 77 | __u64 hardware_exit_reason; |
| 76 | } hw; | 78 | } hw; |
| 79 | /* KVM_EXIT_FAIL_ENTRY */ | ||
| 80 | struct { | ||
| 81 | __u64 hardware_entry_failure_reason; | ||
| 82 | } fail_entry; | ||
| 77 | /* KVM_EXIT_EXCEPTION */ | 83 | /* KVM_EXIT_EXCEPTION */ |
| 78 | struct { | 84 | struct { |
| 79 | __u32 exception; | 85 | __u32 exception; |
| 80 | __u32 error_code; | 86 | __u32 error_code; |
| 81 | } ex; | 87 | } ex; |
| 82 | /* KVM_EXIT_IO */ | 88 | /* KVM_EXIT_IO */ |
| 83 | struct { | 89 | struct kvm_io { |
| 84 | #define KVM_EXIT_IO_IN 0 | 90 | #define KVM_EXIT_IO_IN 0 |
| 85 | #define KVM_EXIT_IO_OUT 1 | 91 | #define KVM_EXIT_IO_OUT 1 |
| 86 | __u8 direction; | 92 | __u8 direction; |
| 87 | __u8 size; /* bytes */ | 93 | __u8 size; /* bytes */ |
| 88 | __u8 string; | ||
| 89 | __u8 string_down; | ||
| 90 | __u8 rep; | ||
| 91 | __u8 pad; | ||
| 92 | __u16 port; | 94 | __u16 port; |
| 93 | __u64 count; | 95 | __u32 count; |
| 94 | union { | 96 | __u64 data_offset; /* relative to kvm_run start */ |
| 95 | __u64 address; | ||
| 96 | __u32 value; | ||
| 97 | }; | ||
| 98 | } io; | 97 | } io; |
| 99 | struct { | 98 | struct { |
| 100 | } debug; | 99 | } debug; |
| @@ -105,6 +104,13 @@ struct kvm_run { | |||
| 105 | __u32 len; | 104 | __u32 len; |
| 106 | __u8 is_write; | 105 | __u8 is_write; |
| 107 | } mmio; | 106 | } mmio; |
| 107 | /* KVM_EXIT_HYPERCALL */ | ||
| 108 | struct { | ||
| 109 | __u64 args[6]; | ||
| 110 | __u64 ret; | ||
| 111 | __u32 longmode; | ||
| 112 | __u32 pad; | ||
| 113 | } hypercall; | ||
| 108 | }; | 114 | }; |
| 109 | }; | 115 | }; |
| 110 | 116 | ||
| @@ -118,6 +124,21 @@ struct kvm_regs { | |||
| 118 | __u64 rip, rflags; | 124 | __u64 rip, rflags; |
| 119 | }; | 125 | }; |
| 120 | 126 | ||
| 127 | /* for KVM_GET_FPU and KVM_SET_FPU */ | ||
| 128 | struct kvm_fpu { | ||
| 129 | __u8 fpr[8][16]; | ||
| 130 | __u16 fcw; | ||
| 131 | __u16 fsw; | ||
| 132 | __u8 ftwx; /* in fxsave format */ | ||
| 133 | __u8 pad1; | ||
| 134 | __u16 last_opcode; | ||
| 135 | __u64 last_ip; | ||
| 136 | __u64 last_dp; | ||
| 137 | __u8 xmm[16][16]; | ||
| 138 | __u32 mxcsr; | ||
| 139 | __u32 pad2; | ||
| 140 | }; | ||
| 141 | |||
| 121 | struct kvm_segment { | 142 | struct kvm_segment { |
| 122 | __u64 base; | 143 | __u64 base; |
| 123 | __u32 limit; | 144 | __u32 limit; |
| @@ -210,38 +231,74 @@ struct kvm_dirty_log { | |||
| 210 | }; | 231 | }; |
| 211 | }; | 232 | }; |
| 212 | 233 | ||
| 234 | struct kvm_cpuid_entry { | ||
| 235 | __u32 function; | ||
| 236 | __u32 eax; | ||
| 237 | __u32 ebx; | ||
| 238 | __u32 ecx; | ||
| 239 | __u32 edx; | ||
| 240 | __u32 padding; | ||
| 241 | }; | ||
| 242 | |||
| 243 | /* for KVM_SET_CPUID */ | ||
| 244 | struct kvm_cpuid { | ||
| 245 | __u32 nent; | ||
| 246 | __u32 padding; | ||
| 247 | struct kvm_cpuid_entry entries[0]; | ||
| 248 | }; | ||
| 249 | |||
| 250 | /* for KVM_SET_SIGNAL_MASK */ | ||
| 251 | struct kvm_signal_mask { | ||
| 252 | __u32 len; | ||
| 253 | __u8 sigset[0]; | ||
| 254 | }; | ||
| 255 | |||
| 213 | #define KVMIO 0xAE | 256 | #define KVMIO 0xAE |
| 214 | 257 | ||
| 215 | /* | 258 | /* |
| 216 | * ioctls for /dev/kvm fds: | 259 | * ioctls for /dev/kvm fds: |
| 217 | */ | 260 | */ |
| 218 | #define KVM_GET_API_VERSION _IO(KVMIO, 1) | 261 | #define KVM_GET_API_VERSION _IO(KVMIO, 0x00) |
| 219 | #define KVM_CREATE_VM _IO(KVMIO, 2) /* returns a VM fd */ | 262 | #define KVM_CREATE_VM _IO(KVMIO, 0x01) /* returns a VM fd */ |
| 220 | #define KVM_GET_MSR_INDEX_LIST _IOWR(KVMIO, 15, struct kvm_msr_list) | 263 | #define KVM_GET_MSR_INDEX_LIST _IOWR(KVMIO, 0x02, struct kvm_msr_list) |
| 264 | /* | ||
| 265 | * Check if a kvm extension is available. Argument is extension number, | ||
| 266 | * return is 1 (yes) or 0 (no, sorry). | ||
| 267 | */ | ||
| 268 | #define KVM_CHECK_EXTENSION _IO(KVMIO, 0x03) | ||
| 269 | /* | ||
| 270 | * Get size for mmap(vcpu_fd) | ||
| 271 | */ | ||
| 272 | #define KVM_GET_VCPU_MMAP_SIZE _IO(KVMIO, 0x04) /* in bytes */ | ||
| 221 | 273 | ||
| 222 | /* | 274 | /* |
| 223 | * ioctls for VM fds | 275 | * ioctls for VM fds |
| 224 | */ | 276 | */ |
| 225 | #define KVM_SET_MEMORY_REGION _IOW(KVMIO, 10, struct kvm_memory_region) | 277 | #define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region) |
| 226 | /* | 278 | /* |
| 227 | * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns | 279 | * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns |
| 228 | * a vcpu fd. | 280 | * a vcpu fd. |
| 229 | */ | 281 | */ |
| 230 | #define KVM_CREATE_VCPU _IOW(KVMIO, 11, int) | 282 | #define KVM_CREATE_VCPU _IO(KVMIO, 0x41) |
| 231 | #define KVM_GET_DIRTY_LOG _IOW(KVMIO, 12, struct kvm_dirty_log) | 283 | #define KVM_GET_DIRTY_LOG _IOW(KVMIO, 0x42, struct kvm_dirty_log) |
| 284 | #define KVM_SET_MEMORY_ALIAS _IOW(KVMIO, 0x43, struct kvm_memory_alias) | ||
| 232 | 285 | ||
| 233 | /* | 286 | /* |
| 234 | * ioctls for vcpu fds | 287 | * ioctls for vcpu fds |
| 235 | */ | 288 | */ |
| 236 | #define KVM_RUN _IOWR(KVMIO, 2, struct kvm_run) | 289 | #define KVM_RUN _IO(KVMIO, 0x80) |
| 237 | #define KVM_GET_REGS _IOR(KVMIO, 3, struct kvm_regs) | 290 | #define KVM_GET_REGS _IOR(KVMIO, 0x81, struct kvm_regs) |
| 238 | #define KVM_SET_REGS _IOW(KVMIO, 4, struct kvm_regs) | 291 | #define KVM_SET_REGS _IOW(KVMIO, 0x82, struct kvm_regs) |
| 239 | #define KVM_GET_SREGS _IOR(KVMIO, 5, struct kvm_sregs) | 292 | #define KVM_GET_SREGS _IOR(KVMIO, 0x83, struct kvm_sregs) |
| 240 | #define KVM_SET_SREGS _IOW(KVMIO, 6, struct kvm_sregs) | 293 | #define KVM_SET_SREGS _IOW(KVMIO, 0x84, struct kvm_sregs) |
| 241 | #define KVM_TRANSLATE _IOWR(KVMIO, 7, struct kvm_translation) | 294 | #define KVM_TRANSLATE _IOWR(KVMIO, 0x85, struct kvm_translation) |
| 242 | #define KVM_INTERRUPT _IOW(KVMIO, 8, struct kvm_interrupt) | 295 | #define KVM_INTERRUPT _IOW(KVMIO, 0x86, struct kvm_interrupt) |
| 243 | #define KVM_DEBUG_GUEST _IOW(KVMIO, 9, struct kvm_debug_guest) | 296 | #define KVM_DEBUG_GUEST _IOW(KVMIO, 0x87, struct kvm_debug_guest) |
| 244 | #define KVM_GET_MSRS _IOWR(KVMIO, 13, struct kvm_msrs) | 297 | #define KVM_GET_MSRS _IOWR(KVMIO, 0x88, struct kvm_msrs) |
| 245 | #define KVM_SET_MSRS _IOW(KVMIO, 14, struct kvm_msrs) | 298 | #define KVM_SET_MSRS _IOW(KVMIO, 0x89, struct kvm_msrs) |
| 299 | #define KVM_SET_CPUID _IOW(KVMIO, 0x8a, struct kvm_cpuid) | ||
| 300 | #define KVM_SET_SIGNAL_MASK _IOW(KVMIO, 0x8b, struct kvm_signal_mask) | ||
| 301 | #define KVM_GET_FPU _IOR(KVMIO, 0x8c, struct kvm_fpu) | ||
| 302 | #define KVM_SET_FPU _IOW(KVMIO, 0x8d, struct kvm_fpu) | ||
| 246 | 303 | ||
| 247 | #endif | 304 | #endif |
diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h index 326da7d500c7..dff9ea32606a 100644 --- a/include/linux/miscdevice.h +++ b/include/linux/miscdevice.h | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | 29 | ||
| 30 | #define TUN_MINOR 200 | 30 | #define TUN_MINOR 200 |
| 31 | #define HPET_MINOR 228 | 31 | #define HPET_MINOR 228 |
| 32 | #define KVM_MINOR 232 | ||
| 32 | 33 | ||
| 33 | struct device; | 34 | struct device; |
| 34 | 35 | ||
