Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v2.6.24-rc2 796 lines 21 kB view raw
1#ifndef __KVM_H 2#define __KVM_H 3 4/* 5 * This work is licensed under the terms of the GNU GPL, version 2. See 6 * the COPYING file in the top-level directory. 7 */ 8 9#include <linux/types.h> 10#include <linux/list.h> 11#include <linux/mutex.h> 12#include <linux/spinlock.h> 13#include <linux/signal.h> 14#include <linux/sched.h> 15#include <linux/mm.h> 16#include <linux/preempt.h> 17#include <asm/signal.h> 18 19#include <linux/kvm.h> 20#include <linux/kvm_para.h> 21 22#define CR3_PAE_RESERVED_BITS ((X86_CR3_PWT | X86_CR3_PCD) - 1) 23#define CR3_NONPAE_RESERVED_BITS ((PAGE_SIZE-1) & ~(X86_CR3_PWT | X86_CR3_PCD)) 24#define CR3_L_MODE_RESERVED_BITS (CR3_NONPAE_RESERVED_BITS|0xFFFFFF0000000000ULL) 25 26#define KVM_GUEST_CR0_MASK \ 27 (X86_CR0_PG | X86_CR0_PE | X86_CR0_WP | X86_CR0_NE \ 28 | X86_CR0_NW | X86_CR0_CD) 29#define KVM_VM_CR0_ALWAYS_ON \ 30 (X86_CR0_PG | X86_CR0_PE | X86_CR0_WP | X86_CR0_NE | X86_CR0_TS \ 31 | X86_CR0_MP) 32#define KVM_GUEST_CR4_MASK \ 33 (X86_CR4_VME | X86_CR4_PSE | X86_CR4_PAE | X86_CR4_PGE | X86_CR4_VMXE) 34#define KVM_PMODE_VM_CR4_ALWAYS_ON (X86_CR4_PAE | X86_CR4_VMXE) 35#define KVM_RMODE_VM_CR4_ALWAYS_ON (X86_CR4_VME | X86_CR4_PAE | X86_CR4_VMXE) 36 37#define INVALID_PAGE (~(hpa_t)0) 38#define UNMAPPED_GVA (~(gpa_t)0) 39 40#define KVM_MAX_VCPUS 4 41#define KVM_ALIAS_SLOTS 4 42#define KVM_MEMORY_SLOTS 8 43#define KVM_NUM_MMU_PAGES 1024 44#define KVM_MIN_FREE_MMU_PAGES 5 45#define KVM_REFILL_PAGES 25 46#define KVM_MAX_CPUID_ENTRIES 40 47 48#define DE_VECTOR 0 49#define NM_VECTOR 7 50#define DF_VECTOR 8 51#define TS_VECTOR 10 52#define NP_VECTOR 11 53#define SS_VECTOR 12 54#define GP_VECTOR 13 55#define PF_VECTOR 14 56 57#define SELECTOR_TI_MASK (1 << 2) 58#define SELECTOR_RPL_MASK 0x03 59 60#define IOPL_SHIFT 12 61 62#define KVM_PIO_PAGE_OFFSET 1 63 64/* 65 * vcpu->requests bit members 66 */ 67#define KVM_TLB_FLUSH 0 68 69/* 70 * Address types: 71 * 72 * gva - guest virtual address 73 * gpa - guest physical address 74 * gfn - guest frame number 75 * hva - host virtual address 76 * hpa - host physical address 77 * hfn - host frame number 78 */ 79 80typedef unsigned long gva_t; 81typedef u64 gpa_t; 82typedef unsigned long gfn_t; 83 84typedef unsigned long hva_t; 85typedef u64 hpa_t; 86typedef unsigned long hfn_t; 87 88#define NR_PTE_CHAIN_ENTRIES 5 89 90struct kvm_pte_chain { 91 u64 *parent_ptes[NR_PTE_CHAIN_ENTRIES]; 92 struct hlist_node link; 93}; 94 95/* 96 * kvm_mmu_page_role, below, is defined as: 97 * 98 * bits 0:3 - total guest paging levels (2-4, or zero for real mode) 99 * bits 4:7 - page table level for this shadow (1-4) 100 * bits 8:9 - page table quadrant for 2-level guests 101 * bit 16 - "metaphysical" - gfn is not a real page (huge page/real mode) 102 * bits 17:19 - "access" - the user, writable, and nx bits of a huge page pde 103 */ 104union kvm_mmu_page_role { 105 unsigned word; 106 struct { 107 unsigned glevels : 4; 108 unsigned level : 4; 109 unsigned quadrant : 2; 110 unsigned pad_for_nice_hex_output : 6; 111 unsigned metaphysical : 1; 112 unsigned hugepage_access : 3; 113 }; 114}; 115 116struct kvm_mmu_page { 117 struct list_head link; 118 struct hlist_node hash_link; 119 120 /* 121 * The following two entries are used to key the shadow page in the 122 * hash table. 123 */ 124 gfn_t gfn; 125 union kvm_mmu_page_role role; 126 127 u64 *spt; 128 unsigned long slot_bitmap; /* One bit set per slot which has memory 129 * in this shadow page. 130 */ 131 int multimapped; /* More than one parent_pte? */ 132 int root_count; /* Currently serving as active root */ 133 union { 134 u64 *parent_pte; /* !multimapped */ 135 struct hlist_head parent_ptes; /* multimapped, kvm_pte_chain */ 136 }; 137}; 138 139struct kvm_vcpu; 140extern struct kmem_cache *kvm_vcpu_cache; 141 142/* 143 * x86 supports 3 paging modes (4-level 64-bit, 3-level 64-bit, and 2-level 144 * 32-bit). The kvm_mmu structure abstracts the details of the current mmu 145 * mode. 146 */ 147struct kvm_mmu { 148 void (*new_cr3)(struct kvm_vcpu *vcpu); 149 int (*page_fault)(struct kvm_vcpu *vcpu, gva_t gva, u32 err); 150 void (*free)(struct kvm_vcpu *vcpu); 151 gpa_t (*gva_to_gpa)(struct kvm_vcpu *vcpu, gva_t gva); 152 hpa_t root_hpa; 153 int root_level; 154 int shadow_root_level; 155 156 u64 *pae_root; 157}; 158 159#define KVM_NR_MEM_OBJS 20 160 161struct kvm_mmu_memory_cache { 162 int nobjs; 163 void *objects[KVM_NR_MEM_OBJS]; 164}; 165 166/* 167 * We don't want allocation failures within the mmu code, so we preallocate 168 * enough memory for a single page fault in a cache. 169 */ 170struct kvm_guest_debug { 171 int enabled; 172 unsigned long bp[4]; 173 int singlestep; 174}; 175 176enum { 177 VCPU_REGS_RAX = 0, 178 VCPU_REGS_RCX = 1, 179 VCPU_REGS_RDX = 2, 180 VCPU_REGS_RBX = 3, 181 VCPU_REGS_RSP = 4, 182 VCPU_REGS_RBP = 5, 183 VCPU_REGS_RSI = 6, 184 VCPU_REGS_RDI = 7, 185#ifdef CONFIG_X86_64 186 VCPU_REGS_R8 = 8, 187 VCPU_REGS_R9 = 9, 188 VCPU_REGS_R10 = 10, 189 VCPU_REGS_R11 = 11, 190 VCPU_REGS_R12 = 12, 191 VCPU_REGS_R13 = 13, 192 VCPU_REGS_R14 = 14, 193 VCPU_REGS_R15 = 15, 194#endif 195 NR_VCPU_REGS 196}; 197 198enum { 199 VCPU_SREG_CS, 200 VCPU_SREG_DS, 201 VCPU_SREG_ES, 202 VCPU_SREG_FS, 203 VCPU_SREG_GS, 204 VCPU_SREG_SS, 205 VCPU_SREG_TR, 206 VCPU_SREG_LDTR, 207}; 208 209struct kvm_pio_request { 210 unsigned long count; 211 int cur_count; 212 struct page *guest_pages[2]; 213 unsigned guest_page_offset; 214 int in; 215 int port; 216 int size; 217 int string; 218 int down; 219 int rep; 220}; 221 222struct kvm_stat { 223 u32 pf_fixed; 224 u32 pf_guest; 225 u32 tlb_flush; 226 u32 invlpg; 227 228 u32 exits; 229 u32 io_exits; 230 u32 mmio_exits; 231 u32 signal_exits; 232 u32 irq_window_exits; 233 u32 halt_exits; 234 u32 halt_wakeup; 235 u32 request_irq_exits; 236 u32 irq_exits; 237 u32 light_exits; 238 u32 efer_reload; 239}; 240 241struct kvm_io_device { 242 void (*read)(struct kvm_io_device *this, 243 gpa_t addr, 244 int len, 245 void *val); 246 void (*write)(struct kvm_io_device *this, 247 gpa_t addr, 248 int len, 249 const void *val); 250 int (*in_range)(struct kvm_io_device *this, gpa_t addr); 251 void (*destructor)(struct kvm_io_device *this); 252 253 void *private; 254}; 255 256static inline void kvm_iodevice_read(struct kvm_io_device *dev, 257 gpa_t addr, 258 int len, 259 void *val) 260{ 261 dev->read(dev, addr, len, val); 262} 263 264static inline void kvm_iodevice_write(struct kvm_io_device *dev, 265 gpa_t addr, 266 int len, 267 const void *val) 268{ 269 dev->write(dev, addr, len, val); 270} 271 272static inline int kvm_iodevice_inrange(struct kvm_io_device *dev, gpa_t addr) 273{ 274 return dev->in_range(dev, addr); 275} 276 277static inline void kvm_iodevice_destructor(struct kvm_io_device *dev) 278{ 279 if (dev->destructor) 280 dev->destructor(dev); 281} 282 283/* 284 * It would be nice to use something smarter than a linear search, TBD... 285 * Thankfully we dont expect many devices to register (famous last words :), 286 * so until then it will suffice. At least its abstracted so we can change 287 * in one place. 288 */ 289struct kvm_io_bus { 290 int dev_count; 291#define NR_IOBUS_DEVS 6 292 struct kvm_io_device *devs[NR_IOBUS_DEVS]; 293}; 294 295void kvm_io_bus_init(struct kvm_io_bus *bus); 296void kvm_io_bus_destroy(struct kvm_io_bus *bus); 297struct kvm_io_device *kvm_io_bus_find_dev(struct kvm_io_bus *bus, gpa_t addr); 298void kvm_io_bus_register_dev(struct kvm_io_bus *bus, 299 struct kvm_io_device *dev); 300 301struct kvm_vcpu { 302 struct kvm *kvm; 303 struct preempt_notifier preempt_notifier; 304 int vcpu_id; 305 struct mutex mutex; 306 int cpu; 307 u64 host_tsc; 308 struct kvm_run *run; 309 int interrupt_window_open; 310 int guest_mode; 311 unsigned long requests; 312 unsigned long irq_summary; /* bit vector: 1 per word in irq_pending */ 313 DECLARE_BITMAP(irq_pending, KVM_NR_INTERRUPTS); 314 unsigned long regs[NR_VCPU_REGS]; /* for rsp: vcpu_load_rsp_rip() */ 315 unsigned long rip; /* needs vcpu_load_rsp_rip() */ 316 317 unsigned long cr0; 318 unsigned long cr2; 319 unsigned long cr3; 320 gpa_t para_state_gpa; 321 struct page *para_state_page; 322 gpa_t hypercall_gpa; 323 unsigned long cr4; 324 unsigned long cr8; 325 u64 pdptrs[4]; /* pae */ 326 u64 shadow_efer; 327 u64 apic_base; 328 struct kvm_lapic *apic; /* kernel irqchip context */ 329#define VCPU_MP_STATE_RUNNABLE 0 330#define VCPU_MP_STATE_UNINITIALIZED 1 331#define VCPU_MP_STATE_INIT_RECEIVED 2 332#define VCPU_MP_STATE_SIPI_RECEIVED 3 333#define VCPU_MP_STATE_HALTED 4 334 int mp_state; 335 int sipi_vector; 336 u64 ia32_misc_enable_msr; 337 338 struct kvm_mmu mmu; 339 340 struct kvm_mmu_memory_cache mmu_pte_chain_cache; 341 struct kvm_mmu_memory_cache mmu_rmap_desc_cache; 342 struct kvm_mmu_memory_cache mmu_page_cache; 343 struct kvm_mmu_memory_cache mmu_page_header_cache; 344 345 gfn_t last_pt_write_gfn; 346 int last_pt_write_count; 347 348 struct kvm_guest_debug guest_debug; 349 350 struct i387_fxsave_struct host_fx_image; 351 struct i387_fxsave_struct guest_fx_image; 352 int fpu_active; 353 int guest_fpu_loaded; 354 355 int mmio_needed; 356 int mmio_read_completed; 357 int mmio_is_write; 358 int mmio_size; 359 unsigned char mmio_data[8]; 360 gpa_t mmio_phys_addr; 361 gva_t mmio_fault_cr2; 362 struct kvm_pio_request pio; 363 void *pio_data; 364 wait_queue_head_t wq; 365 366 int sigset_active; 367 sigset_t sigset; 368 369 struct kvm_stat stat; 370 371 struct { 372 int active; 373 u8 save_iopl; 374 struct kvm_save_segment { 375 u16 selector; 376 unsigned long base; 377 u32 limit; 378 u32 ar; 379 } tr, es, ds, fs, gs; 380 } rmode; 381 int halt_request; /* real mode on Intel only */ 382 383 int cpuid_nent; 384 struct kvm_cpuid_entry cpuid_entries[KVM_MAX_CPUID_ENTRIES]; 385}; 386 387struct kvm_mem_alias { 388 gfn_t base_gfn; 389 unsigned long npages; 390 gfn_t target_gfn; 391}; 392 393struct kvm_memory_slot { 394 gfn_t base_gfn; 395 unsigned long npages; 396 unsigned long flags; 397 struct page **phys_mem; 398 unsigned long *dirty_bitmap; 399}; 400 401struct kvm { 402 struct mutex lock; /* protects everything except vcpus */ 403 int naliases; 404 struct kvm_mem_alias aliases[KVM_ALIAS_SLOTS]; 405 int nmemslots; 406 struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS]; 407 /* 408 * Hash table of struct kvm_mmu_page. 409 */ 410 struct list_head active_mmu_pages; 411 int n_free_mmu_pages; 412 struct hlist_head mmu_page_hash[KVM_NUM_MMU_PAGES]; 413 struct kvm_vcpu *vcpus[KVM_MAX_VCPUS]; 414 unsigned long rmap_overflow; 415 struct list_head vm_list; 416 struct file *filp; 417 struct kvm_io_bus mmio_bus; 418 struct kvm_io_bus pio_bus; 419 struct kvm_pic *vpic; 420 struct kvm_ioapic *vioapic; 421 int round_robin_prev_vcpu; 422}; 423 424static inline struct kvm_pic *pic_irqchip(struct kvm *kvm) 425{ 426 return kvm->vpic; 427} 428 429static inline struct kvm_ioapic *ioapic_irqchip(struct kvm *kvm) 430{ 431 return kvm->vioapic; 432} 433 434static inline int irqchip_in_kernel(struct kvm *kvm) 435{ 436 return pic_irqchip(kvm) != 0; 437} 438 439struct descriptor_table { 440 u16 limit; 441 unsigned long base; 442} __attribute__((packed)); 443 444struct kvm_x86_ops { 445 int (*cpu_has_kvm_support)(void); /* __init */ 446 int (*disabled_by_bios)(void); /* __init */ 447 void (*hardware_enable)(void *dummy); /* __init */ 448 void (*hardware_disable)(void *dummy); 449 void (*check_processor_compatibility)(void *rtn); 450 int (*hardware_setup)(void); /* __init */ 451 void (*hardware_unsetup)(void); /* __exit */ 452 453 /* Create, but do not attach this VCPU */ 454 struct kvm_vcpu *(*vcpu_create)(struct kvm *kvm, unsigned id); 455 void (*vcpu_free)(struct kvm_vcpu *vcpu); 456 void (*vcpu_reset)(struct kvm_vcpu *vcpu); 457 458 void (*prepare_guest_switch)(struct kvm_vcpu *vcpu); 459 void (*vcpu_load)(struct kvm_vcpu *vcpu, int cpu); 460 void (*vcpu_put)(struct kvm_vcpu *vcpu); 461 void (*vcpu_decache)(struct kvm_vcpu *vcpu); 462 463 int (*set_guest_debug)(struct kvm_vcpu *vcpu, 464 struct kvm_debug_guest *dbg); 465 void (*guest_debug_pre)(struct kvm_vcpu *vcpu); 466 int (*get_msr)(struct kvm_vcpu *vcpu, u32 msr_index, u64 *pdata); 467 int (*set_msr)(struct kvm_vcpu *vcpu, u32 msr_index, u64 data); 468 u64 (*get_segment_base)(struct kvm_vcpu *vcpu, int seg); 469 void (*get_segment)(struct kvm_vcpu *vcpu, 470 struct kvm_segment *var, int seg); 471 void (*set_segment)(struct kvm_vcpu *vcpu, 472 struct kvm_segment *var, int seg); 473 void (*get_cs_db_l_bits)(struct kvm_vcpu *vcpu, int *db, int *l); 474 void (*decache_cr4_guest_bits)(struct kvm_vcpu *vcpu); 475 void (*set_cr0)(struct kvm_vcpu *vcpu, unsigned long cr0); 476 void (*set_cr3)(struct kvm_vcpu *vcpu, unsigned long cr3); 477 void (*set_cr4)(struct kvm_vcpu *vcpu, unsigned long cr4); 478 void (*set_efer)(struct kvm_vcpu *vcpu, u64 efer); 479 void (*get_idt)(struct kvm_vcpu *vcpu, struct descriptor_table *dt); 480 void (*set_idt)(struct kvm_vcpu *vcpu, struct descriptor_table *dt); 481 void (*get_gdt)(struct kvm_vcpu *vcpu, struct descriptor_table *dt); 482 void (*set_gdt)(struct kvm_vcpu *vcpu, struct descriptor_table *dt); 483 unsigned long (*get_dr)(struct kvm_vcpu *vcpu, int dr); 484 void (*set_dr)(struct kvm_vcpu *vcpu, int dr, unsigned long value, 485 int *exception); 486 void (*cache_regs)(struct kvm_vcpu *vcpu); 487 void (*decache_regs)(struct kvm_vcpu *vcpu); 488 unsigned long (*get_rflags)(struct kvm_vcpu *vcpu); 489 void (*set_rflags)(struct kvm_vcpu *vcpu, unsigned long rflags); 490 491 void (*tlb_flush)(struct kvm_vcpu *vcpu); 492 void (*inject_page_fault)(struct kvm_vcpu *vcpu, 493 unsigned long addr, u32 err_code); 494 495 void (*inject_gp)(struct kvm_vcpu *vcpu, unsigned err_code); 496 497 void (*run)(struct kvm_vcpu *vcpu, struct kvm_run *run); 498 int (*handle_exit)(struct kvm_run *run, struct kvm_vcpu *vcpu); 499 void (*skip_emulated_instruction)(struct kvm_vcpu *vcpu); 500 void (*patch_hypercall)(struct kvm_vcpu *vcpu, 501 unsigned char *hypercall_addr); 502 int (*get_irq)(struct kvm_vcpu *vcpu); 503 void (*set_irq)(struct kvm_vcpu *vcpu, int vec); 504 void (*inject_pending_irq)(struct kvm_vcpu *vcpu); 505 void (*inject_pending_vectors)(struct kvm_vcpu *vcpu, 506 struct kvm_run *run); 507}; 508 509extern struct kvm_x86_ops *kvm_x86_ops; 510 511/* The guest did something we don't support. */ 512#define pr_unimpl(vcpu, fmt, ...) \ 513 do { \ 514 if (printk_ratelimit()) \ 515 printk(KERN_ERR "kvm: %i: cpu%i " fmt, \ 516 current->tgid, (vcpu)->vcpu_id , ## __VA_ARGS__); \ 517 } while(0) 518 519#define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt) 520#define vcpu_printf(vcpu, fmt...) kvm_printf(vcpu->kvm, fmt) 521 522int kvm_vcpu_init(struct kvm_vcpu *vcpu, struct kvm *kvm, unsigned id); 523void kvm_vcpu_uninit(struct kvm_vcpu *vcpu); 524 525int kvm_init_x86(struct kvm_x86_ops *ops, unsigned int vcpu_size, 526 struct module *module); 527void kvm_exit_x86(void); 528 529int kvm_mmu_module_init(void); 530void kvm_mmu_module_exit(void); 531 532void kvm_mmu_destroy(struct kvm_vcpu *vcpu); 533int kvm_mmu_create(struct kvm_vcpu *vcpu); 534int kvm_mmu_setup(struct kvm_vcpu *vcpu); 535 536int kvm_mmu_reset_context(struct kvm_vcpu *vcpu); 537void kvm_mmu_slot_remove_write_access(struct kvm *kvm, int slot); 538void kvm_mmu_zap_all(struct kvm *kvm); 539 540hpa_t gpa_to_hpa(struct kvm_vcpu *vcpu, gpa_t gpa); 541#define HPA_MSB ((sizeof(hpa_t) * 8) - 1) 542#define HPA_ERR_MASK ((hpa_t)1 << HPA_MSB) 543static inline int is_error_hpa(hpa_t hpa) { return hpa >> HPA_MSB; } 544hpa_t gva_to_hpa(struct kvm_vcpu *vcpu, gva_t gva); 545struct page *gva_to_page(struct kvm_vcpu *vcpu, gva_t gva); 546 547extern hpa_t bad_page_address; 548 549struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn); 550struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn); 551void mark_page_dirty(struct kvm *kvm, gfn_t gfn); 552 553enum emulation_result { 554 EMULATE_DONE, /* no further processing */ 555 EMULATE_DO_MMIO, /* kvm_run filled with mmio request */ 556 EMULATE_FAIL, /* can't emulate this instruction */ 557}; 558 559int emulate_instruction(struct kvm_vcpu *vcpu, struct kvm_run *run, 560 unsigned long cr2, u16 error_code); 561void kvm_report_emulation_failure(struct kvm_vcpu *cvpu, const char *context); 562void realmode_lgdt(struct kvm_vcpu *vcpu, u16 size, unsigned long address); 563void realmode_lidt(struct kvm_vcpu *vcpu, u16 size, unsigned long address); 564void realmode_lmsw(struct kvm_vcpu *vcpu, unsigned long msw, 565 unsigned long *rflags); 566 567unsigned long realmode_get_cr(struct kvm_vcpu *vcpu, int cr); 568void realmode_set_cr(struct kvm_vcpu *vcpu, int cr, unsigned long value, 569 unsigned long *rflags); 570int kvm_get_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 *data); 571int kvm_set_msr(struct kvm_vcpu *vcpu, u32 msr_index, u64 data); 572 573struct x86_emulate_ctxt; 574 575int kvm_emulate_pio (struct kvm_vcpu *vcpu, struct kvm_run *run, int in, 576 int size, unsigned port); 577int kvm_emulate_pio_string(struct kvm_vcpu *vcpu, struct kvm_run *run, int in, 578 int size, unsigned long count, int down, 579 gva_t address, int rep, unsigned port); 580void kvm_emulate_cpuid(struct kvm_vcpu *vcpu); 581int kvm_emulate_halt(struct kvm_vcpu *vcpu); 582int emulate_invlpg(struct kvm_vcpu *vcpu, gva_t address); 583int emulate_clts(struct kvm_vcpu *vcpu); 584int emulator_get_dr(struct x86_emulate_ctxt* ctxt, int dr, 585 unsigned long *dest); 586int emulator_set_dr(struct x86_emulate_ctxt *ctxt, int dr, 587 unsigned long value); 588 589void set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0); 590void set_cr3(struct kvm_vcpu *vcpu, unsigned long cr0); 591void set_cr4(struct kvm_vcpu *vcpu, unsigned long cr0); 592void set_cr8(struct kvm_vcpu *vcpu, unsigned long cr0); 593unsigned long get_cr8(struct kvm_vcpu *vcpu); 594void lmsw(struct kvm_vcpu *vcpu, unsigned long msw); 595void kvm_get_cs_db_l_bits(struct kvm_vcpu *vcpu, int *db, int *l); 596 597int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata); 598int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data); 599 600void fx_init(struct kvm_vcpu *vcpu); 601 602void kvm_resched(struct kvm_vcpu *vcpu); 603void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); 604void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); 605void kvm_flush_remote_tlbs(struct kvm *kvm); 606 607int emulator_read_std(unsigned long addr, 608 void *val, 609 unsigned int bytes, 610 struct kvm_vcpu *vcpu); 611int emulator_write_emulated(unsigned long addr, 612 const void *val, 613 unsigned int bytes, 614 struct kvm_vcpu *vcpu); 615 616unsigned long segment_base(u16 selector); 617 618void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa, 619 const u8 *new, int bytes); 620int kvm_mmu_unprotect_page_virt(struct kvm_vcpu *vcpu, gva_t gva); 621void __kvm_mmu_free_some_pages(struct kvm_vcpu *vcpu); 622int kvm_mmu_load(struct kvm_vcpu *vcpu); 623void kvm_mmu_unload(struct kvm_vcpu *vcpu); 624 625int kvm_hypercall(struct kvm_vcpu *vcpu, struct kvm_run *run); 626 627static inline void kvm_guest_enter(void) 628{ 629 current->flags |= PF_VCPU; 630} 631 632static inline void kvm_guest_exit(void) 633{ 634 current->flags &= ~PF_VCPU; 635} 636 637static inline int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva, 638 u32 error_code) 639{ 640 return vcpu->mmu.page_fault(vcpu, gva, error_code); 641} 642 643static inline void kvm_mmu_free_some_pages(struct kvm_vcpu *vcpu) 644{ 645 if (unlikely(vcpu->kvm->n_free_mmu_pages < KVM_MIN_FREE_MMU_PAGES)) 646 __kvm_mmu_free_some_pages(vcpu); 647} 648 649static inline int kvm_mmu_reload(struct kvm_vcpu *vcpu) 650{ 651 if (likely(vcpu->mmu.root_hpa != INVALID_PAGE)) 652 return 0; 653 654 return kvm_mmu_load(vcpu); 655} 656 657static inline int is_long_mode(struct kvm_vcpu *vcpu) 658{ 659#ifdef CONFIG_X86_64 660 return vcpu->shadow_efer & EFER_LME; 661#else 662 return 0; 663#endif 664} 665 666static inline int is_pae(struct kvm_vcpu *vcpu) 667{ 668 return vcpu->cr4 & X86_CR4_PAE; 669} 670 671static inline int is_pse(struct kvm_vcpu *vcpu) 672{ 673 return vcpu->cr4 & X86_CR4_PSE; 674} 675 676static inline int is_paging(struct kvm_vcpu *vcpu) 677{ 678 return vcpu->cr0 & X86_CR0_PG; 679} 680 681static inline int memslot_id(struct kvm *kvm, struct kvm_memory_slot *slot) 682{ 683 return slot - kvm->memslots; 684} 685 686static inline struct kvm_mmu_page *page_header(hpa_t shadow_page) 687{ 688 struct page *page = pfn_to_page(shadow_page >> PAGE_SHIFT); 689 690 return (struct kvm_mmu_page *)page_private(page); 691} 692 693static inline u16 read_fs(void) 694{ 695 u16 seg; 696 asm ("mov %%fs, %0" : "=g"(seg)); 697 return seg; 698} 699 700static inline u16 read_gs(void) 701{ 702 u16 seg; 703 asm ("mov %%gs, %0" : "=g"(seg)); 704 return seg; 705} 706 707static inline u16 read_ldt(void) 708{ 709 u16 ldt; 710 asm ("sldt %0" : "=g"(ldt)); 711 return ldt; 712} 713 714static inline void load_fs(u16 sel) 715{ 716 asm ("mov %0, %%fs" : : "rm"(sel)); 717} 718 719static inline void load_gs(u16 sel) 720{ 721 asm ("mov %0, %%gs" : : "rm"(sel)); 722} 723 724#ifndef load_ldt 725static inline void load_ldt(u16 sel) 726{ 727 asm ("lldt %0" : : "rm"(sel)); 728} 729#endif 730 731static inline void get_idt(struct descriptor_table *table) 732{ 733 asm ("sidt %0" : "=m"(*table)); 734} 735 736static inline void get_gdt(struct descriptor_table *table) 737{ 738 asm ("sgdt %0" : "=m"(*table)); 739} 740 741static inline unsigned long read_tr_base(void) 742{ 743 u16 tr; 744 asm ("str %0" : "=g"(tr)); 745 return segment_base(tr); 746} 747 748#ifdef CONFIG_X86_64 749static inline unsigned long read_msr(unsigned long msr) 750{ 751 u64 value; 752 753 rdmsrl(msr, value); 754 return value; 755} 756#endif 757 758static inline void fx_save(struct i387_fxsave_struct *image) 759{ 760 asm ("fxsave (%0)":: "r" (image)); 761} 762 763static inline void fx_restore(struct i387_fxsave_struct *image) 764{ 765 asm ("fxrstor (%0)":: "r" (image)); 766} 767 768static inline void fpu_init(void) 769{ 770 asm ("finit"); 771} 772 773static inline u32 get_rdx_init_val(void) 774{ 775 return 0x600; /* P6 family */ 776} 777 778#define ASM_VMX_VMCLEAR_RAX ".byte 0x66, 0x0f, 0xc7, 0x30" 779#define ASM_VMX_VMLAUNCH ".byte 0x0f, 0x01, 0xc2" 780#define ASM_VMX_VMRESUME ".byte 0x0f, 0x01, 0xc3" 781#define ASM_VMX_VMPTRLD_RAX ".byte 0x0f, 0xc7, 0x30" 782#define ASM_VMX_VMREAD_RDX_RAX ".byte 0x0f, 0x78, 0xd0" 783#define ASM_VMX_VMWRITE_RAX_RDX ".byte 0x0f, 0x79, 0xd0" 784#define ASM_VMX_VMWRITE_RSP_RDX ".byte 0x0f, 0x79, 0xd4" 785#define ASM_VMX_VMXOFF ".byte 0x0f, 0x01, 0xc4" 786#define ASM_VMX_VMXON_RAX ".byte 0xf3, 0x0f, 0xc7, 0x30" 787 788#define MSR_IA32_TIME_STAMP_COUNTER 0x010 789 790#define TSS_IOPB_BASE_OFFSET 0x66 791#define TSS_BASE_SIZE 0x68 792#define TSS_IOPB_SIZE (65536 / 8) 793#define TSS_REDIRECTION_SIZE (256 / 8) 794#define RMODE_TSS_SIZE (TSS_BASE_SIZE + TSS_REDIRECTION_SIZE + TSS_IOPB_SIZE + 1) 795 796#endif