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/mm.h> 14#include <linux/sched.h> 15#include <asm/signal.h> 16 17#include "vmx.h" 18#include <linux/kvm.h> 19#include <linux/kvm_para.h> 20 21#define CR0_PE_MASK (1ULL << 0) 22#define CR0_TS_MASK (1ULL << 3) 23#define CR0_NE_MASK (1ULL << 5) 24#define CR0_WP_MASK (1ULL << 16) 25#define CR0_NW_MASK (1ULL << 29) 26#define CR0_CD_MASK (1ULL << 30) 27#define CR0_PG_MASK (1ULL << 31) 28 29#define CR3_WPT_MASK (1ULL << 3) 30#define CR3_PCD_MASK (1ULL << 4) 31 32#define CR3_RESEVED_BITS 0x07ULL 33#define CR3_L_MODE_RESEVED_BITS (~((1ULL << 40) - 1) | 0x0fe7ULL) 34#define CR3_FLAGS_MASK ((1ULL << 5) - 1) 35 36#define CR4_VME_MASK (1ULL << 0) 37#define CR4_PSE_MASK (1ULL << 4) 38#define CR4_PAE_MASK (1ULL << 5) 39#define CR4_PGE_MASK (1ULL << 7) 40#define CR4_VMXE_MASK (1ULL << 13) 41 42#define KVM_GUEST_CR0_MASK \ 43 (CR0_PG_MASK | CR0_PE_MASK | CR0_WP_MASK | CR0_NE_MASK \ 44 | CR0_NW_MASK | CR0_CD_MASK) 45#define KVM_VM_CR0_ALWAYS_ON \ 46 (CR0_PG_MASK | CR0_PE_MASK | CR0_WP_MASK | CR0_NE_MASK) 47#define KVM_GUEST_CR4_MASK \ 48 (CR4_PSE_MASK | CR4_PAE_MASK | CR4_PGE_MASK | CR4_VMXE_MASK | CR4_VME_MASK) 49#define KVM_PMODE_VM_CR4_ALWAYS_ON (CR4_VMXE_MASK | CR4_PAE_MASK) 50#define KVM_RMODE_VM_CR4_ALWAYS_ON (CR4_VMXE_MASK | CR4_PAE_MASK | CR4_VME_MASK) 51 52#define INVALID_PAGE (~(hpa_t)0) 53#define UNMAPPED_GVA (~(gpa_t)0) 54 55#define KVM_MAX_VCPUS 1 56#define KVM_ALIAS_SLOTS 4 57#define KVM_MEMORY_SLOTS 4 58#define KVM_NUM_MMU_PAGES 256 59#define KVM_MIN_FREE_MMU_PAGES 5 60#define KVM_REFILL_PAGES 25 61#define KVM_MAX_CPUID_ENTRIES 40 62 63#define FX_IMAGE_SIZE 512 64#define FX_IMAGE_ALIGN 16 65#define FX_BUF_SIZE (2 * FX_IMAGE_SIZE + FX_IMAGE_ALIGN) 66 67#define DE_VECTOR 0 68#define NM_VECTOR 7 69#define DF_VECTOR 8 70#define TS_VECTOR 10 71#define NP_VECTOR 11 72#define SS_VECTOR 12 73#define GP_VECTOR 13 74#define PF_VECTOR 14 75 76#define SELECTOR_TI_MASK (1 << 2) 77#define SELECTOR_RPL_MASK 0x03 78 79#define IOPL_SHIFT 12 80 81#define KVM_PIO_PAGE_OFFSET 1 82 83/* 84 * Address types: 85 * 86 * gva - guest virtual address 87 * gpa - guest physical address 88 * gfn - guest frame number 89 * hva - host virtual address 90 * hpa - host physical address 91 * hfn - host frame number 92 */ 93 94typedef unsigned long gva_t; 95typedef u64 gpa_t; 96typedef unsigned long gfn_t; 97 98typedef unsigned long hva_t; 99typedef u64 hpa_t; 100typedef unsigned long hfn_t; 101 102#define NR_PTE_CHAIN_ENTRIES 5 103 104struct kvm_pte_chain { 105 u64 *parent_ptes[NR_PTE_CHAIN_ENTRIES]; 106 struct hlist_node link; 107}; 108 109/* 110 * kvm_mmu_page_role, below, is defined as: 111 * 112 * bits 0:3 - total guest paging levels (2-4, or zero for real mode) 113 * bits 4:7 - page table level for this shadow (1-4) 114 * bits 8:9 - page table quadrant for 2-level guests 115 * bit 16 - "metaphysical" - gfn is not a real page (huge page/real mode) 116 * bits 17:18 - "access" - the user and writable bits of a huge page pde 117 */ 118union kvm_mmu_page_role { 119 unsigned word; 120 struct { 121 unsigned glevels : 4; 122 unsigned level : 4; 123 unsigned quadrant : 2; 124 unsigned pad_for_nice_hex_output : 6; 125 unsigned metaphysical : 1; 126 unsigned hugepage_access : 2; 127 }; 128}; 129 130struct kvm_mmu_page { 131 struct list_head link; 132 struct hlist_node hash_link; 133 134 /* 135 * The following two entries are used to key the shadow page in the 136 * hash table. 137 */ 138 gfn_t gfn; 139 union kvm_mmu_page_role role; 140 141 hpa_t page_hpa; 142 unsigned long slot_bitmap; /* One bit set per slot which has memory 143 * in this shadow page. 144 */ 145 int multimapped; /* More than one parent_pte? */ 146 int root_count; /* Currently serving as active root */ 147 union { 148 u64 *parent_pte; /* !multimapped */ 149 struct hlist_head parent_ptes; /* multimapped, kvm_pte_chain */ 150 }; 151}; 152 153struct vmcs { 154 u32 revision_id; 155 u32 abort; 156 char data[0]; 157}; 158 159#define vmx_msr_entry kvm_msr_entry 160 161struct kvm_vcpu; 162 163/* 164 * x86 supports 3 paging modes (4-level 64-bit, 3-level 64-bit, and 2-level 165 * 32-bit). The kvm_mmu structure abstracts the details of the current mmu 166 * mode. 167 */ 168struct kvm_mmu { 169 void (*new_cr3)(struct kvm_vcpu *vcpu); 170 int (*page_fault)(struct kvm_vcpu *vcpu, gva_t gva, u32 err); 171 void (*free)(struct kvm_vcpu *vcpu); 172 gpa_t (*gva_to_gpa)(struct kvm_vcpu *vcpu, gva_t gva); 173 hpa_t root_hpa; 174 int root_level; 175 int shadow_root_level; 176 177 u64 *pae_root; 178}; 179 180#define KVM_NR_MEM_OBJS 20 181 182struct kvm_mmu_memory_cache { 183 int nobjs; 184 void *objects[KVM_NR_MEM_OBJS]; 185}; 186 187/* 188 * We don't want allocation failures within the mmu code, so we preallocate 189 * enough memory for a single page fault in a cache. 190 */ 191struct kvm_guest_debug { 192 int enabled; 193 unsigned long bp[4]; 194 int singlestep; 195}; 196 197enum { 198 VCPU_REGS_RAX = 0, 199 VCPU_REGS_RCX = 1, 200 VCPU_REGS_RDX = 2, 201 VCPU_REGS_RBX = 3, 202 VCPU_REGS_RSP = 4, 203 VCPU_REGS_RBP = 5, 204 VCPU_REGS_RSI = 6, 205 VCPU_REGS_RDI = 7, 206#ifdef CONFIG_X86_64 207 VCPU_REGS_R8 = 8, 208 VCPU_REGS_R9 = 9, 209 VCPU_REGS_R10 = 10, 210 VCPU_REGS_R11 = 11, 211 VCPU_REGS_R12 = 12, 212 VCPU_REGS_R13 = 13, 213 VCPU_REGS_R14 = 14, 214 VCPU_REGS_R15 = 15, 215#endif 216 NR_VCPU_REGS 217}; 218 219enum { 220 VCPU_SREG_CS, 221 VCPU_SREG_DS, 222 VCPU_SREG_ES, 223 VCPU_SREG_FS, 224 VCPU_SREG_GS, 225 VCPU_SREG_SS, 226 VCPU_SREG_TR, 227 VCPU_SREG_LDTR, 228}; 229 230struct kvm_pio_request { 231 unsigned long count; 232 int cur_count; 233 struct page *guest_pages[2]; 234 unsigned guest_page_offset; 235 int in; 236 int size; 237 int string; 238 int down; 239 int rep; 240}; 241 242struct kvm_stat { 243 u32 pf_fixed; 244 u32 pf_guest; 245 u32 tlb_flush; 246 u32 invlpg; 247 248 u32 exits; 249 u32 io_exits; 250 u32 mmio_exits; 251 u32 signal_exits; 252 u32 irq_window_exits; 253 u32 halt_exits; 254 u32 request_irq_exits; 255 u32 irq_exits; 256}; 257 258struct kvm_vcpu { 259 struct kvm *kvm; 260 union { 261 struct vmcs *vmcs; 262 struct vcpu_svm *svm; 263 }; 264 struct mutex mutex; 265 int cpu; 266 int launched; 267 u64 host_tsc; 268 struct kvm_run *run; 269 int interrupt_window_open; 270 unsigned long irq_summary; /* bit vector: 1 per word in irq_pending */ 271#define NR_IRQ_WORDS KVM_IRQ_BITMAP_SIZE(unsigned long) 272 unsigned long irq_pending[NR_IRQ_WORDS]; 273 unsigned long regs[NR_VCPU_REGS]; /* for rsp: vcpu_load_rsp_rip() */ 274 unsigned long rip; /* needs vcpu_load_rsp_rip() */ 275 276 unsigned long cr0; 277 unsigned long cr2; 278 unsigned long cr3; 279 gpa_t para_state_gpa; 280 struct page *para_state_page; 281 gpa_t hypercall_gpa; 282 unsigned long cr4; 283 unsigned long cr8; 284 u64 pdptrs[4]; /* pae */ 285 u64 shadow_efer; 286 u64 apic_base; 287 u64 ia32_misc_enable_msr; 288 int nmsrs; 289 struct vmx_msr_entry *guest_msrs; 290 struct vmx_msr_entry *host_msrs; 291 292 struct list_head free_pages; 293 struct kvm_mmu_page page_header_buf[KVM_NUM_MMU_PAGES]; 294 struct kvm_mmu mmu; 295 296 struct kvm_mmu_memory_cache mmu_pte_chain_cache; 297 struct kvm_mmu_memory_cache mmu_rmap_desc_cache; 298 299 gfn_t last_pt_write_gfn; 300 int last_pt_write_count; 301 302 struct kvm_guest_debug guest_debug; 303 304 char fx_buf[FX_BUF_SIZE]; 305 char *host_fx_image; 306 char *guest_fx_image; 307 int fpu_active; 308 int guest_fpu_loaded; 309 310 int mmio_needed; 311 int mmio_read_completed; 312 int mmio_is_write; 313 int mmio_size; 314 unsigned char mmio_data[8]; 315 gpa_t mmio_phys_addr; 316 gva_t mmio_fault_cr2; 317 struct kvm_pio_request pio; 318 void *pio_data; 319 320 int sigset_active; 321 sigset_t sigset; 322 323 struct kvm_stat stat; 324 325 struct { 326 int active; 327 u8 save_iopl; 328 struct kvm_save_segment { 329 u16 selector; 330 unsigned long base; 331 u32 limit; 332 u32 ar; 333 } tr, es, ds, fs, gs; 334 } rmode; 335 336 int cpuid_nent; 337 struct kvm_cpuid_entry cpuid_entries[KVM_MAX_CPUID_ENTRIES]; 338}; 339 340struct kvm_mem_alias { 341 gfn_t base_gfn; 342 unsigned long npages; 343 gfn_t target_gfn; 344}; 345 346struct kvm_memory_slot { 347 gfn_t base_gfn; 348 unsigned long npages; 349 unsigned long flags; 350 struct page **phys_mem; 351 unsigned long *dirty_bitmap; 352}; 353 354struct kvm { 355 spinlock_t lock; /* protects everything except vcpus */ 356 int naliases; 357 struct kvm_mem_alias aliases[KVM_ALIAS_SLOTS]; 358 int nmemslots; 359 struct kvm_memory_slot memslots[KVM_MEMORY_SLOTS]; 360 /* 361 * Hash table of struct kvm_mmu_page. 362 */ 363 struct list_head active_mmu_pages; 364 int n_free_mmu_pages; 365 struct hlist_head mmu_page_hash[KVM_NUM_MMU_PAGES]; 366 struct kvm_vcpu vcpus[KVM_MAX_VCPUS]; 367 int memory_config_version; 368 int busy; 369 unsigned long rmap_overflow; 370 struct list_head vm_list; 371 struct file *filp; 372}; 373 374struct descriptor_table { 375 u16 limit; 376 unsigned long base; 377} __attribute__((packed)); 378 379struct kvm_arch_ops { 380 int (*cpu_has_kvm_support)(void); /* __init */ 381 int (*disabled_by_bios)(void); /* __init */ 382 void (*hardware_enable)(void *dummy); /* __init */ 383 void (*hardware_disable)(void *dummy); 384 int (*hardware_setup)(void); /* __init */ 385 void (*hardware_unsetup)(void); /* __exit */ 386 387 int (*vcpu_create)(struct kvm_vcpu *vcpu); 388 void (*vcpu_free)(struct kvm_vcpu *vcpu); 389 390 void (*vcpu_load)(struct kvm_vcpu *vcpu); 391 void (*vcpu_put)(struct kvm_vcpu *vcpu); 392 void (*vcpu_decache)(struct kvm_vcpu *vcpu); 393 394 int (*set_guest_debug)(struct kvm_vcpu *vcpu, 395 struct kvm_debug_guest *dbg); 396 int (*get_msr)(struct kvm_vcpu *vcpu, u32 msr_index, u64 *pdata); 397 int (*set_msr)(struct kvm_vcpu *vcpu, u32 msr_index, u64 data); 398 u64 (*get_segment_base)(struct kvm_vcpu *vcpu, int seg); 399 void (*get_segment)(struct kvm_vcpu *vcpu, 400 struct kvm_segment *var, int seg); 401 void (*set_segment)(struct kvm_vcpu *vcpu, 402 struct kvm_segment *var, int seg); 403 void (*get_cs_db_l_bits)(struct kvm_vcpu *vcpu, int *db, int *l); 404 void (*decache_cr4_guest_bits)(struct kvm_vcpu *vcpu); 405 void (*set_cr0)(struct kvm_vcpu *vcpu, unsigned long cr0); 406 void (*set_cr3)(struct kvm_vcpu *vcpu, unsigned long cr3); 407 void (*set_cr4)(struct kvm_vcpu *vcpu, unsigned long cr4); 408 void (*set_efer)(struct kvm_vcpu *vcpu, u64 efer); 409 void (*get_idt)(struct kvm_vcpu *vcpu, struct descriptor_table *dt); 410 void (*set_idt)(struct kvm_vcpu *vcpu, struct descriptor_table *dt); 411 void (*get_gdt)(struct kvm_vcpu *vcpu, struct descriptor_table *dt); 412 void (*set_gdt)(struct kvm_vcpu *vcpu, struct descriptor_table *dt); 413 unsigned long (*get_dr)(struct kvm_vcpu *vcpu, int dr); 414 void (*set_dr)(struct kvm_vcpu *vcpu, int dr, unsigned long value, 415 int *exception); 416 void (*cache_regs)(struct kvm_vcpu *vcpu); 417 void (*decache_regs)(struct kvm_vcpu *vcpu); 418 unsigned long (*get_rflags)(struct kvm_vcpu *vcpu); 419 void (*set_rflags)(struct kvm_vcpu *vcpu, unsigned long rflags); 420 421 void (*invlpg)(struct kvm_vcpu *vcpu, gva_t addr); 422 void (*tlb_flush)(struct kvm_vcpu *vcpu); 423 void (*inject_page_fault)(struct kvm_vcpu *vcpu, 424 unsigned long addr, u32 err_code); 425 426 void (*inject_gp)(struct kvm_vcpu *vcpu, unsigned err_code); 427 428 int (*run)(struct kvm_vcpu *vcpu, struct kvm_run *run); 429 int (*vcpu_setup)(struct kvm_vcpu *vcpu); 430 void (*skip_emulated_instruction)(struct kvm_vcpu *vcpu); 431 void (*patch_hypercall)(struct kvm_vcpu *vcpu, 432 unsigned char *hypercall_addr); 433}; 434 435extern struct kvm_arch_ops *kvm_arch_ops; 436 437#define kvm_printf(kvm, fmt ...) printk(KERN_DEBUG fmt) 438#define vcpu_printf(vcpu, fmt...) kvm_printf(vcpu->kvm, fmt) 439 440int kvm_init_arch(struct kvm_arch_ops *ops, struct module *module); 441void kvm_exit_arch(void); 442 443int kvm_mmu_module_init(void); 444void kvm_mmu_module_exit(void); 445 446void kvm_mmu_destroy(struct kvm_vcpu *vcpu); 447int kvm_mmu_create(struct kvm_vcpu *vcpu); 448int kvm_mmu_setup(struct kvm_vcpu *vcpu); 449 450int kvm_mmu_reset_context(struct kvm_vcpu *vcpu); 451void kvm_mmu_slot_remove_write_access(struct kvm_vcpu *vcpu, int slot); 452void kvm_mmu_zap_all(struct kvm_vcpu *vcpu); 453 454hpa_t gpa_to_hpa(struct kvm_vcpu *vcpu, gpa_t gpa); 455#define HPA_MSB ((sizeof(hpa_t) * 8) - 1) 456#define HPA_ERR_MASK ((hpa_t)1 << HPA_MSB) 457static inline int is_error_hpa(hpa_t hpa) { return hpa >> HPA_MSB; } 458hpa_t gva_to_hpa(struct kvm_vcpu *vcpu, gva_t gva); 459struct page *gva_to_page(struct kvm_vcpu *vcpu, gva_t gva); 460 461void kvm_emulator_want_group7_invlpg(void); 462 463extern hpa_t bad_page_address; 464 465struct page *gfn_to_page(struct kvm *kvm, gfn_t gfn); 466struct kvm_memory_slot *gfn_to_memslot(struct kvm *kvm, gfn_t gfn); 467void mark_page_dirty(struct kvm *kvm, gfn_t gfn); 468 469enum emulation_result { 470 EMULATE_DONE, /* no further processing */ 471 EMULATE_DO_MMIO, /* kvm_run filled with mmio request */ 472 EMULATE_FAIL, /* can't emulate this instruction */ 473}; 474 475int emulate_instruction(struct kvm_vcpu *vcpu, struct kvm_run *run, 476 unsigned long cr2, u16 error_code); 477void realmode_lgdt(struct kvm_vcpu *vcpu, u16 size, unsigned long address); 478void realmode_lidt(struct kvm_vcpu *vcpu, u16 size, unsigned long address); 479void realmode_lmsw(struct kvm_vcpu *vcpu, unsigned long msw, 480 unsigned long *rflags); 481 482unsigned long realmode_get_cr(struct kvm_vcpu *vcpu, int cr); 483void realmode_set_cr(struct kvm_vcpu *vcpu, int cr, unsigned long value, 484 unsigned long *rflags); 485 486struct x86_emulate_ctxt; 487 488int kvm_setup_pio(struct kvm_vcpu *vcpu, struct kvm_run *run, int in, 489 int size, unsigned long count, int string, int down, 490 gva_t address, int rep, unsigned port); 491void kvm_emulate_cpuid(struct kvm_vcpu *vcpu); 492int emulate_invlpg(struct kvm_vcpu *vcpu, gva_t address); 493int emulate_clts(struct kvm_vcpu *vcpu); 494int emulator_get_dr(struct x86_emulate_ctxt* ctxt, int dr, 495 unsigned long *dest); 496int emulator_set_dr(struct x86_emulate_ctxt *ctxt, int dr, 497 unsigned long value); 498 499void set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0); 500void set_cr3(struct kvm_vcpu *vcpu, unsigned long cr0); 501void set_cr4(struct kvm_vcpu *vcpu, unsigned long cr0); 502void set_cr8(struct kvm_vcpu *vcpu, unsigned long cr0); 503void lmsw(struct kvm_vcpu *vcpu, unsigned long msw); 504 505int kvm_get_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 *pdata); 506int kvm_set_msr_common(struct kvm_vcpu *vcpu, u32 msr, u64 data); 507 508void fx_init(struct kvm_vcpu *vcpu); 509 510void load_msrs(struct vmx_msr_entry *e, int n); 511void save_msrs(struct vmx_msr_entry *e, int n); 512void kvm_resched(struct kvm_vcpu *vcpu); 513void kvm_load_guest_fpu(struct kvm_vcpu *vcpu); 514void kvm_put_guest_fpu(struct kvm_vcpu *vcpu); 515 516int kvm_read_guest(struct kvm_vcpu *vcpu, 517 gva_t addr, 518 unsigned long size, 519 void *dest); 520 521int kvm_write_guest(struct kvm_vcpu *vcpu, 522 gva_t addr, 523 unsigned long size, 524 void *data); 525 526unsigned long segment_base(u16 selector); 527 528void kvm_mmu_pre_write(struct kvm_vcpu *vcpu, gpa_t gpa, int bytes); 529void kvm_mmu_post_write(struct kvm_vcpu *vcpu, gpa_t gpa, int bytes); 530int kvm_mmu_unprotect_page_virt(struct kvm_vcpu *vcpu, gva_t gva); 531void kvm_mmu_free_some_pages(struct kvm_vcpu *vcpu); 532 533int kvm_hypercall(struct kvm_vcpu *vcpu, struct kvm_run *run); 534 535static inline void kvm_guest_enter(void) 536{ 537 current->flags |= PF_VCPU; 538} 539 540static inline void kvm_guest_exit(void) 541{ 542 current->flags &= ~PF_VCPU; 543} 544 545static inline int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva, 546 u32 error_code) 547{ 548 if (unlikely(vcpu->kvm->n_free_mmu_pages < KVM_MIN_FREE_MMU_PAGES)) 549 kvm_mmu_free_some_pages(vcpu); 550 return vcpu->mmu.page_fault(vcpu, gva, error_code); 551} 552 553static inline int is_long_mode(struct kvm_vcpu *vcpu) 554{ 555#ifdef CONFIG_X86_64 556 return vcpu->shadow_efer & EFER_LME; 557#else 558 return 0; 559#endif 560} 561 562static inline int is_pae(struct kvm_vcpu *vcpu) 563{ 564 return vcpu->cr4 & CR4_PAE_MASK; 565} 566 567static inline int is_pse(struct kvm_vcpu *vcpu) 568{ 569 return vcpu->cr4 & CR4_PSE_MASK; 570} 571 572static inline int is_paging(struct kvm_vcpu *vcpu) 573{ 574 return vcpu->cr0 & CR0_PG_MASK; 575} 576 577static inline int memslot_id(struct kvm *kvm, struct kvm_memory_slot *slot) 578{ 579 return slot - kvm->memslots; 580} 581 582static inline struct kvm_mmu_page *page_header(hpa_t shadow_page) 583{ 584 struct page *page = pfn_to_page(shadow_page >> PAGE_SHIFT); 585 586 return (struct kvm_mmu_page *)page_private(page); 587} 588 589static inline u16 read_fs(void) 590{ 591 u16 seg; 592 asm ("mov %%fs, %0" : "=g"(seg)); 593 return seg; 594} 595 596static inline u16 read_gs(void) 597{ 598 u16 seg; 599 asm ("mov %%gs, %0" : "=g"(seg)); 600 return seg; 601} 602 603static inline u16 read_ldt(void) 604{ 605 u16 ldt; 606 asm ("sldt %0" : "=g"(ldt)); 607 return ldt; 608} 609 610static inline void load_fs(u16 sel) 611{ 612 asm ("mov %0, %%fs" : : "rm"(sel)); 613} 614 615static inline void load_gs(u16 sel) 616{ 617 asm ("mov %0, %%gs" : : "rm"(sel)); 618} 619 620#ifndef load_ldt 621static inline void load_ldt(u16 sel) 622{ 623 asm ("lldt %0" : : "rm"(sel)); 624} 625#endif 626 627static inline void get_idt(struct descriptor_table *table) 628{ 629 asm ("sidt %0" : "=m"(*table)); 630} 631 632static inline void get_gdt(struct descriptor_table *table) 633{ 634 asm ("sgdt %0" : "=m"(*table)); 635} 636 637static inline unsigned long read_tr_base(void) 638{ 639 u16 tr; 640 asm ("str %0" : "=g"(tr)); 641 return segment_base(tr); 642} 643 644#ifdef CONFIG_X86_64 645static inline unsigned long read_msr(unsigned long msr) 646{ 647 u64 value; 648 649 rdmsrl(msr, value); 650 return value; 651} 652#endif 653 654static inline void fx_save(void *image) 655{ 656 asm ("fxsave (%0)":: "r" (image)); 657} 658 659static inline void fx_restore(void *image) 660{ 661 asm ("fxrstor (%0)":: "r" (image)); 662} 663 664static inline void fpu_init(void) 665{ 666 asm ("finit"); 667} 668 669static inline u32 get_rdx_init_val(void) 670{ 671 return 0x600; /* P6 family */ 672} 673 674#define ASM_VMX_VMCLEAR_RAX ".byte 0x66, 0x0f, 0xc7, 0x30" 675#define ASM_VMX_VMLAUNCH ".byte 0x0f, 0x01, 0xc2" 676#define ASM_VMX_VMRESUME ".byte 0x0f, 0x01, 0xc3" 677#define ASM_VMX_VMPTRLD_RAX ".byte 0x0f, 0xc7, 0x30" 678#define ASM_VMX_VMREAD_RDX_RAX ".byte 0x0f, 0x78, 0xd0" 679#define ASM_VMX_VMWRITE_RAX_RDX ".byte 0x0f, 0x79, 0xd0" 680#define ASM_VMX_VMWRITE_RSP_RDX ".byte 0x0f, 0x79, 0xd4" 681#define ASM_VMX_VMXOFF ".byte 0x0f, 0x01, 0xc4" 682#define ASM_VMX_VMXON_RAX ".byte 0xf3, 0x0f, 0xc7, 0x30" 683 684#define MSR_IA32_TIME_STAMP_COUNTER 0x010 685 686#define TSS_IOPB_BASE_OFFSET 0x66 687#define TSS_BASE_SIZE 0x68 688#define TSS_IOPB_SIZE (65536 / 8) 689#define TSS_REDIRECTION_SIZE (256 / 8) 690#define RMODE_TSS_SIZE (TSS_BASE_SIZE + TSS_REDIRECTION_SIZE + TSS_IOPB_SIZE + 1) 691 692#endif 693