Lines Matching defs:vmcs

207         dprintf(INFO, "can not set vmcs controls %#x\n", static_cast<uint>(controls));
211 dprintf(INFO, "can not clear vmcs controls %#x\n", static_cast<uint>(controls));
215 dprintf(INFO, "can not set and clear the same vmcs controls %#x\n",
280 AutoVmcs vmcs(vmcs_address);
282 status = vmcs.SetControl(VmcsField32::PROCBASED_CTLS2,
301 vmcs.SetControl(VmcsField32::PROCBASED_CTLS2,
303 vmcs.Read(VmcsField32::PROCBASED_CTLS2),
308 status = vmcs.SetControl(VmcsField32::PINBASED_CTLS,
320 status = vmcs.SetControl(VmcsField32::PROCBASED_CTLS,
350 vmcs.InterruptWindowExiting(false);
353 status = vmcs.SetControl(VmcsField32::EXIT_CTLS,
381 status = vmcs.SetControl(VmcsField32::ENTRY_CTLS,
398 vmcs.Write(VmcsField32::EXCEPTION_BITMAP, 0);
399 vmcs.Write(VmcsField32::PAGEFAULT_ERRORCODE_MASK, 0);
400 vmcs.Write(VmcsField32::PAGEFAULT_ERRORCODE_MATCH, 0);
425 vmcs.Write(VmcsField16::VPID, vpid);
435 vmcs.Write(VmcsField64::EPT_POINTER, eptp);
443 vmcs.Write(VmcsField64::MSR_BITMAPS_ADDRESS, msr_bitmaps_address);
453 vmcs.Write(VmcsField64::EXIT_MSR_LOAD_ADDRESS, host_msr_page->PhysicalAddress());
454 vmcs.Write(VmcsField32::EXIT_MSR_LOAD_COUNT, 6);
462 vmcs.Write(VmcsField64::EXIT_MSR_STORE_ADDRESS, guest_msr_page->PhysicalAddress());
463 vmcs.Write(VmcsField32::EXIT_MSR_STORE_COUNT, 6);
464 vmcs.Write(VmcsField64::ENTRY_MSR_LOAD_ADDRESS, guest_msr_page->PhysicalAddress());
465 vmcs.Write(VmcsField32::ENTRY_MSR_LOAD_COUNT, 6);
472 vmcs.Write(VmcsField64::HOST_IA32_PAT, read_msr(X86_MSR_IA32_PAT));
473 vmcs.Write(VmcsField64::HOST_IA32_EFER, read_msr(X86_MSR_IA32_EFER));
474 vmcs.Write(VmcsFieldXX::HOST_CR0, x86_get_cr0());
475 vmcs.Write(VmcsFieldXX::HOST_CR3, x86_get_cr3());
476 vmcs.Write(VmcsFieldXX::HOST_CR4, x86_get_cr4());
477 vmcs.Write(VmcsField16::HOST_ES_SELECTOR, 0);
478 vmcs.Write(VmcsField16::HOST_CS_SELECTOR, CODE_64_SELECTOR);
479 vmcs.Write(VmcsField16::HOST_SS_SELECTOR, DATA_SELECTOR);
480 vmcs.Write(VmcsField16::HOST_DS_SELECTOR, 0);
481 vmcs.Write(VmcsField16::HOST_FS_SELECTOR, 0);
482 vmcs.Write(VmcsField16::HOST_GS_SELECTOR, 0);
483 vmcs.Write(VmcsField16::HOST_TR_SELECTOR, TSS_SELECTOR(percpu->cpu_num));
484 vmcs.Write(VmcsFieldXX::HOST_FS_BASE, read_msr(X86_MSR_IA32_FS_BASE));
485 vmcs.Write(VmcsFieldXX::HOST_GS_BASE, read_msr(X86_MSR_IA32_GS_BASE));
486 vmcs.Write(VmcsFieldXX::HOST_TR_BASE, reinterpret_cast<uint64_t>(&percpu->default_tss));
487 vmcs.Write(VmcsFieldXX::HOST_GDTR_BASE, reinterpret_cast<uint64_t>(gdt_get()));
488 vmcs.Write(VmcsFieldXX::HOST_IDTR_BASE, reinterpret_cast<uint64_t>(idt_get_readonly()));
489 vmcs.Write(VmcsFieldXX::HOST_IA32_SYSENTER_ESP, 0);
490 vmcs.Write(VmcsFieldXX::HOST_IA32_SYSENTER_EIP, 0);
491 vmcs.Write(VmcsField32::HOST_IA32_SYSENTER_CS, 0);
492 vmcs.Write(VmcsFieldXX::HOST_RSP, reinterpret_cast<uint64_t>(vmx_state));
493 vmcs.Write(VmcsFieldXX::HOST_RIP, reinterpret_cast<uint64_t>(vmx_exit_entry));
503 if (cr0_is_invalid(&vmcs, cr0)) {
506 vmcs.Write(VmcsFieldXX::GUEST_CR0, cr0);
509 vmcs.Write(VmcsFieldXX::CR0_GUEST_HOST_MASK, X86_CR0_NE);
510 vmcs.Write(VmcsFieldXX::CR0_READ_SHADOW, X86_CR0_NE);
520 vmcs.Write(VmcsFieldXX::GUEST_CR4, cr4);
524 vmcs.Write(VmcsFieldXX::CR4_GUEST_HOST_MASK, X86_CR4_VMXE);
525 vmcs.Write(VmcsFieldXX::CR4_READ_SHADOW, 0);
527 vmcs.Write(VmcsField64::GUEST_IA32_PAT, read_msr(X86_MSR_IA32_PAT));
534 vmcs.Write(VmcsField64::GUEST_IA32_EFER, guest_efer);
543 vmcs.Write(VmcsField32::GUEST_CS_ACCESS_RIGHTS, cs_access_rights);
545 vmcs.Write(VmcsField32::GUEST_TR_ACCESS_RIGHTS,
548 vmcs.Write(VmcsField32::GUEST_SS_ACCESS_RIGHTS, kGuestXxAccessRightsDefault);
549 vmcs.Write(VmcsField32::GUEST_DS_ACCESS_RIGHTS, kGuestXxAccessRightsDefault);
550 vmcs.Write(VmcsField32::GUEST_ES_ACCESS_RIGHTS, kGuestXxAccessRightsDefault);
551 vmcs.Write(VmcsField32::GUEST_FS_ACCESS_RIGHTS, kGuestXxAccessRightsDefault);
552 vmcs.Write(VmcsField32::GUEST_GS_ACCESS_RIGHTS, kGuestXxAccessRightsDefault);
554 vmcs.Write(VmcsField32::GUEST_LDTR_ACCESS_RIGHTS,
559 vmcs.Write(VmcsFieldXX::GUEST_CS_BASE, 0);
560 vmcs.Write(VmcsField16::GUEST_CS_SELECTOR, 0);
561 vmcs.Write(VmcsFieldXX::GUEST_RIP, entry);
564 vmcs.Write(VmcsFieldXX::GUEST_CS_BASE, entry);
565 vmcs.Write(VmcsField16::GUEST_CS_SELECTOR, static_cast<uint16_t>(entry >> 4));
566 vmcs.Write(VmcsFieldXX::GUEST_RIP, 0);
568 vmcs.Write(VmcsField32::GUEST_CS_LIMIT, 0xffff);
569 vmcs.Write(VmcsFieldXX::GUEST_TR_BASE, 0);
570 vmcs.Write(VmcsField16::GUEST_TR_SELECTOR, 0);
571 vmcs.Write(VmcsField32::GUEST_TR_LIMIT, 0xffff);
572 vmcs.Write(VmcsFieldXX::GUEST_DS_BASE, 0);
573 vmcs.Write(VmcsField32::GUEST_DS_LIMIT, 0xffff);
574 vmcs.Write(VmcsFieldXX::GUEST_SS_BASE, 0);
575 vmcs.Write(VmcsField32::GUEST_SS_LIMIT, 0xffff);
576 vmcs.Write(VmcsFieldXX::GUEST_ES_BASE, 0);
577 vmcs.Write(VmcsField32::GUEST_ES_LIMIT, 0xffff);
578 vmcs.Write(VmcsFieldXX::GUEST_FS_BASE, 0);
579 vmcs.Write(VmcsField32::GUEST_FS_LIMIT, 0xffff);
580 vmcs.Write(VmcsFieldXX::GUEST_GS_BASE, 0);
581 vmcs.Write(VmcsField32::GUEST_GS_LIMIT, 0xffff);
582 vmcs.Write(VmcsField32::GUEST_LDTR_LIMIT, 0xffff);
583 vmcs.Write(VmcsFieldXX::GUEST_GDTR_BASE, 0);
584 vmcs.Write(VmcsField32::GUEST_GDTR_LIMIT, 0xffff);
585 vmcs.Write(VmcsFieldXX::GUEST_IDTR_BASE, 0);
586 vmcs.Write(VmcsField32::GUEST_IDTR_LIMIT, 0xffff);
589 vmcs.Write(VmcsFieldXX::GUEST_RFLAGS, X86_FLAGS_RESERVED_ONES);
591 vmcs.Write(VmcsField32::GUEST_ACTIVITY_STATE, 0);
592 vmcs.Write(VmcsField32::GUEST_INTERRUPTIBILITY_STATE, 0);
593 vmcs.Write(VmcsFieldXX::GUEST_PENDING_DEBUG_EXCEPTIONS, 0);
597 vmcs.Write(VmcsFieldXX::GUEST_IA32_SYSENTER_ESP, 0);
598 vmcs.Write(VmcsFieldXX::GUEST_IA32_SYSENTER_EIP, 0);
599 vmcs.Write(VmcsField32::GUEST_IA32_SYSENTER_CS, 0);
601 vmcs.Write(VmcsFieldXX::GUEST_RSP, 0);
602 vmcs.Write(VmcsFieldXX::GUEST_CR3, 0);
609 vmcs.Write(VmcsField64::LINK_POINTER, kLinkPointerInvalidate);
703 static zx_status_t local_apic_maybe_interrupt(AutoVmcs* vmcs, LocalApicState* local_apic_state) {
710 if (vector < X86_INT_PLATFORM_BASE || vmcs->Read(VmcsFieldXX::GUEST_RFLAGS) & X86_FLAGS_IF) {
712 vmcs->IssueInterrupt(vector);
716 vmcs->InterruptWindowExiting(true);
726 AutoVmcs vmcs(vmcs_page_.PhysicalAddress());
727 status = local_apic_maybe_interrupt(&vmcs, &local_apic_state_);
751 ktrace_vcpu_exit(VCPU_FAILURE, vmcs.Read(VmcsFieldXX::GUEST_RIP));
752 uint64_t error = vmcs.Read(VmcsField32::INSTRUCTION_ERROR);
756 status = vmexit_handler(&vmcs, &vmx_state_.guest_state, &local_apic_state_,
813 AutoVmcs vmcs(vmcs_page_.PhysicalAddress());
814 state->rsp = vmcs.Read(VmcsFieldXX::GUEST_RSP);
815 state->rflags = vmcs.Read(VmcsFieldXX::GUEST_RFLAGS) & X86_FLAGS_USER;
831 AutoVmcs vmcs(vmcs_page_.PhysicalAddress());
832 vmcs.Write(VmcsFieldXX::GUEST_RSP, state->rsp);
834 const uint64_t rflags = vmcs.Read(VmcsFieldXX::GUEST_RFLAGS);
837 vmcs.Write(VmcsFieldXX::GUEST_RFLAGS, user_flags);
852 bool cr0_is_invalid(AutoVmcs* vmcs, uint64_t cr0_value) {
856 if (vmcs->Read(VmcsField32::PROCBASED_CTLS2) & kProcbasedCtls2UnrestrictedGuest) {