Lines Matching defs:vcpuid

304 vcpu_trace_exceptions(struct vm *vm, int vcpuid)
612 vm_mem_allocated(struct vm *vm, int vcpuid, vm_paddr_t gpa)
619 state = vcpu_get_state(vm, vcpuid, &hostcpu);
948 vm_gpa_hold(struct vm *vm, int vcpuid, vm_paddr_t gpa, size_t len, int reqprot,
961 KASSERT(vcpuid >= -1 && vcpuid < vm->maxcpus, ("%s: invalid vcpuid %d",
962 __func__, vcpuid));
964 if (vcpuid != -1 && vcpuid != i)
1019 vm_set_register(struct vm *vm, int vcpuid, int reg, uint64_t val)
1024 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
1030 error = VMSETREG(vm->cookie, vcpuid, reg, val);
1035 VCPU_CTR1(vm, vcpuid, "Setting nextrip to %#lx", val);
1036 vcpu = &vm->vcpu[vcpuid];
1144 vcpu_set_state_locked(struct vm *vm, int vcpuid, enum vcpu_state newstate,
1150 vcpu = &vm->vcpu[vcpuid];
1162 VCPU_CTR1(vm, vcpuid, "vcpu state change from %s to "
1202 VCPU_CTR2(vm, vcpuid, "vcpu state changed from %s to %s",
1218 vcpu_require_state(struct vm *vm, int vcpuid, enum vcpu_state newstate)
1222 if ((error = vcpu_set_state(vm, vcpuid, newstate, false)) != 0)
1227 vcpu_require_state_locked(struct vm *vm, int vcpuid, enum vcpu_state newstate)
1231 if ((error = vcpu_set_state_locked(vm, vcpuid, newstate, false)) != 0)
1251 #define RENDEZVOUS_CTR0(vm, vcpuid, fmt) \
1253 if (vcpuid >= 0) \
1254 VCPU_CTR0(vm, vcpuid, fmt); \
1260 vm_handle_rendezvous(struct vm *vm, int vcpuid)
1263 KASSERT(vcpuid == -1 || (vcpuid >= 0 && vcpuid < vm->maxcpus),
1264 ("vm_handle_rendezvous: invalid vcpuid %d", vcpuid));
1271 if (vcpuid != -1 &&
1272 CPU_ISSET(vcpuid, &vm->rendezvous_req_cpus) &&
1273 !CPU_ISSET(vcpuid, &vm->rendezvous_done_cpus)) {
1274 VCPU_CTR0(vm, vcpuid, "Calling rendezvous func");
1275 (*vm->rendezvous_func)(vm, vcpuid, vm->rendezvous_arg);
1276 CPU_SET(vcpuid, &vm->rendezvous_done_cpus);
1280 VCPU_CTR0(vm, vcpuid, "Rendezvous completed");
1285 RENDEZVOUS_CTR0(vm, vcpuid, "Wait for rendezvous completion");
1296 vm_handle_hlt(struct vm *vm, int vcpuid, bool intr_disabled, bool *retu)
1302 KASSERT(!CPU_ISSET(vcpuid, &vm->halted_cpus), ("vcpu already halted"));
1304 vcpu = &vm->vcpu[vcpuid];
1321 if (vm_nmi_pending(vm, vcpuid))
1324 if (vm_extint_pending(vm, vcpuid) ||
1331 if (vcpu_should_yield(vm, vcpuid))
1342 VCPU_CTR0(vm, vcpuid, "Halted");
1345 CPU_SET_ATOMIC(vcpuid, &vm->halted_cpus);
1356 vcpu_require_state_locked(vm, vcpuid, VCPU_SLEEPING);
1362 vcpu_require_state_locked(vm, vcpuid, VCPU_FROZEN);
1363 vmm_stat_incr(vm, vcpuid, VCPU_IDLE_TICKS, ticks - t);
1367 CPU_CLR_ATOMIC(vcpuid, &vm->halted_cpus);
1378 vm_handle_paging(struct vm *vm, int vcpuid, bool *retu)
1385 vcpu = &vm->vcpu[vcpuid];
1400 VCPU_CTR2(vm, vcpuid, "%s bit emulation for gpa %#lx",
1410 VCPU_CTR3(vm, vcpuid, "vm_handle_paging rv = %d, gpa = %#lx, "
1420 vm_handle_inst_emul(struct vm *vm, int vcpuid, bool *retu)
1432 vcpu = &vm->vcpu[vcpuid];
1446 VCPU_CTR1(vm, vcpuid, "inst_emul fault accessing gpa %#lx", gpa);
1450 error = vmm_fetch_instruction(vm, vcpuid, paging, vme->rip +
1461 if (vmm_decode_instruction(vm, vcpuid, gla, cpu_mode, cs_d, vie) != 0) {
1462 VCPU_CTR1(vm, vcpuid, "Error decoding instruction at %#lx",
1473 VCPU_CTR1(vm, vcpuid, "nextrip updated to %#lx after instruction "
1491 error = vmm_emulate_instruction(vm, vcpuid, gpa, vie, paging,
1498 vm_handle_suspend(struct vm *vm, int vcpuid, bool *retu)
1504 vcpu = &vm->vcpu[vcpuid];
1506 CPU_SET_ATOMIC(vcpuid, &vm->suspended_cpus);
1518 VCPU_CTR0(vm, vcpuid, "All vcpus suspended");
1523 VCPU_CTR0(vm, vcpuid, "Sleeping during suspend");
1524 vcpu_require_state_locked(vm, vcpuid, VCPU_SLEEPING);
1526 vcpu_require_state_locked(vm, vcpuid, VCPU_FROZEN);
1528 VCPU_CTR0(vm, vcpuid, "Rendezvous during suspend");
1530 vm_handle_rendezvous(vm, vcpuid);
1550 vm_handle_reqidle(struct vm *vm, int vcpuid, bool *retu)
1552 struct vcpu *vcpu = &vm->vcpu[vcpuid];
1590 vm_exit_suspended(struct vm *vm, int vcpuid, uint64_t rip)
1597 vmexit = vm_exitinfo(vm, vcpuid);
1605 vm_exit_rendezvous(struct vm *vm, int vcpuid, uint64_t rip)
1611 vmexit = vm_exitinfo(vm, vcpuid);
1615 vmm_stat_incr(vm, vcpuid, VMEXIT_RENDEZVOUS, 1);
1619 vm_exit_reqidle(struct vm *vm, int vcpuid, uint64_t rip)
1623 vmexit = vm_exitinfo(vm, vcpuid);
1627 vmm_stat_incr(vm, vcpuid, VMEXIT_REQIDLE, 1);
1631 vm_exit_astpending(struct vm *vm, int vcpuid, uint64_t rip)
1635 vmexit = vm_exitinfo(vm, vcpuid);
1639 vmm_stat_incr(vm, vcpuid, VMEXIT_ASTPENDING, 1);
1646 int error, vcpuid;
1654 vcpuid = vmrun->cpuid;
1656 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
1659 if (!CPU_ISSET(vcpuid, &vm->active_cpus))
1662 if (CPU_ISSET(vcpuid, &vm->suspended_cpus))
1666 vcpu = &vm->vcpu[vcpuid];
1684 vcpu_require_state(vm, vcpuid, VCPU_RUNNING);
1685 error = VMRUN(vm->cookie, vcpuid, vcpu->nextrip, pmap, &evinfo);
1686 vcpu_require_state(vm, vcpuid, VCPU_FROZEN);
1690 vmm_stat_incr(vm, vcpuid, VCPU_TOTAL_RUNTIME, rdtsc() - tscval);
1699 error = vm_handle_reqidle(vm, vcpuid, &retu);
1702 error = vm_handle_suspend(vm, vcpuid, &retu);
1705 vioapic_process_eoi(vm, vcpuid,
1709 vm_handle_rendezvous(vm, vcpuid);
1714 error = vm_handle_hlt(vm, vcpuid, intr_disabled, &retu);
1717 error = vm_handle_paging(vm, vcpuid, &retu);
1720 error = vm_handle_inst_emul(vm, vcpuid, &retu);
1724 error = vm_handle_inout(vm, vcpuid, vme, &retu);
1729 vm_inject_ud(vm, vcpuid);
1740 VCPU_CTR2(vm, vcpuid, "retu %d/%d", error, vme->exitcode);
1748 vm_restart_instruction(void *arg, int vcpuid)
1757 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
1760 vcpu = &vm->vcpu[vcpuid];
1761 state = vcpu_get_state(vm, vcpuid, NULL);
1770 VCPU_CTR1(vm, vcpuid, "restarting instruction at %#lx by "
1779 error = vm_get_register(vm, vcpuid, VM_REG_GUEST_RIP, &rip);
1781 VCPU_CTR2(vm, vcpuid, "restarting instruction by updating "
1791 vm_exit_intinfo(struct vm *vm, int vcpuid, uint64_t info)
1796 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
1799 vcpu = &vm->vcpu[vcpuid];
1813 VCPU_CTR2(vm, vcpuid, "%s: info1(%#lx)", __func__, info);
1873 nested_fault(struct vm *vm, int vcpuid, uint64_t info1, uint64_t info2,
1889 VCPU_CTR2(vm, vcpuid, "triple fault: info1(%#lx), info2(%#lx)",
1931 vm_entry_intinfo(struct vm *vm, int vcpuid, uint64_t *retinfo)
1937 KASSERT(vcpuid >= 0 &&
1938 vcpuid < vm->maxcpus, ("invalid vcpu %d", vcpuid));
1940 vcpu = &vm->vcpu[vcpuid];
1949 VCPU_CTR2(vm, vcpuid, "Exception %d delivered: %#lx",
1954 valid = nested_fault(vm, vcpuid, info1, info2, retinfo);
1966 VCPU_CTR4(vm, vcpuid, "%s: info1(%#lx), info2(%#lx), "
1974 vm_get_intinfo(struct vm *vm, int vcpuid, uint64_t *info1, uint64_t *info2)
1978 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
1981 vcpu = &vm->vcpu[vcpuid];
1988 vm_inject_exception(struct vm *vm, int vcpuid, int vector, int errcode_valid,
1995 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
2009 vcpu = &vm->vcpu[vcpuid];
2012 VCPU_CTR2(vm, vcpuid, "Unable to inject exception %d due to "
2021 error = vm_get_register(vm, vcpuid, VM_REG_GUEST_CR0, &regval);
2033 error = vm_set_register(vm, vcpuid, VM_REG_GUEST_INTR_SHADOW, 0);
2038 vm_restart_instruction(vm, vcpuid);
2044 VCPU_CTR1(vm, vcpuid, "Exception %d pending", vector);
2049 vm_inject_fault(void *vmarg, int vcpuid, int vector, int errcode_valid,
2058 error = vm_inject_exception(vm, vcpuid, vector, errcode_valid,
2064 vm_inject_pf(void *vmarg, int vcpuid, int error_code, uint64_t cr2)
2070 VCPU_CTR2(vm, vcpuid, "Injecting page fault: error_code %#x, cr2 %#lx",
2073 error = vm_set_register(vm, vcpuid, VM_REG_GUEST_CR2, cr2);
2076 vm_inject_fault(vm, vcpuid, IDT_PF, 1, error_code);
2082 vm_inject_nmi(struct vm *vm, int vcpuid)
2086 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
2089 vcpu = &vm->vcpu[vcpuid];
2092 vcpu_notify_event(vm, vcpuid, false);
2097 vm_nmi_pending(struct vm *vm, int vcpuid)
2101 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
2102 panic("vm_nmi_pending: invalid vcpuid %d", vcpuid);
2104 vcpu = &vm->vcpu[vcpuid];
2110 vm_nmi_clear(struct vm *vm, int vcpuid)
2114 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
2115 panic("vm_nmi_pending: invalid vcpuid %d", vcpuid);
2117 vcpu = &vm->vcpu[vcpuid];
2123 vmm_stat_incr(vm, vcpuid, VCPU_NMI_COUNT, 1);
2129 vm_inject_extint(struct vm *vm, int vcpuid)
2133 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
2136 vcpu = &vm->vcpu[vcpuid];
2139 vcpu_notify_event(vm, vcpuid, false);
2144 vm_extint_pending(struct vm *vm, int vcpuid)
2148 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
2149 panic("vm_extint_pending: invalid vcpuid %d", vcpuid);
2151 vcpu = &vm->vcpu[vcpuid];
2157 vm_extint_clear(struct vm *vm, int vcpuid)
2161 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
2162 panic("vm_extint_pending: invalid vcpuid %d", vcpuid);
2164 vcpu = &vm->vcpu[vcpuid];
2170 vmm_stat_incr(vm, vcpuid, VCPU_EXTINT_COUNT, 1);
2267 vcpu_set_state(struct vm *vm, int vcpuid, enum vcpu_state newstate,
2273 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
2274 panic("vm_set_run_state: invalid vcpuid %d", vcpuid);
2276 vcpu = &vm->vcpu[vcpuid];
2279 error = vcpu_set_state_locked(vm, vcpuid, newstate, from_idle);
2286 vcpu_get_state(struct vm *vm, int vcpuid, int *hostcpu)
2291 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
2292 panic("vm_get_run_state: invalid vcpuid %d", vcpuid);
2294 vcpu = &vm->vcpu[vcpuid];
2306 vm_activate_cpu(struct vm *vm, int vcpuid)
2309 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
2312 if (CPU_ISSET(vcpuid, &vm->active_cpus))
2315 VCPU_CTR0(vm, vcpuid, "activated");
2316 CPU_SET_ATOMIC(vcpuid, &vm->active_cpus);
2335 vcpu_stats(struct vm *vm, int vcpuid)
2338 return (vm->vcpu[vcpuid].stats);
2342 vm_get_x2apic_state(struct vm *vm, int vcpuid, enum x2apic_state *state)
2344 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
2347 *state = vm->vcpu[vcpuid].x2apic_state;
2353 vm_set_x2apic_state(struct vm *vm, int vcpuid, enum x2apic_state state)
2355 if (vcpuid < 0 || vcpuid >= vm->maxcpus)
2361 vm->vcpu[vcpuid].x2apic_state = state;
2363 vlapic_set_x2apic_state(vm, vcpuid, state);
2407 vcpu_notify_event(struct vm *vm, int vcpuid, bool lapic_intr)
2409 struct vcpu *vcpu = &vm->vcpu[vcpuid];
2433 vm_smp_rendezvous(struct vm *vm, int vcpuid, cpuset_t dest,
2442 KASSERT(vcpuid == -1 || (vcpuid >= 0 && vcpuid < vm->maxcpus),
2443 ("vm_smp_rendezvous: invalid vcpuid %d", vcpuid));
2450 * call the rendezvous handler in case this 'vcpuid' is one
2453 RENDEZVOUS_CTR0(vm, vcpuid, "Rendezvous already in progress");
2455 vm_handle_rendezvous(vm, vcpuid);
2461 RENDEZVOUS_CTR0(vm, vcpuid, "Initiating rendezvous");
2477 vm_handle_rendezvous(vm, vcpuid);
2524 vm_copy_teardown(struct vm *vm, int vcpuid, struct vm_copyinfo *copyinfo,
2537 vm_copy_setup(struct vm *vm, int vcpuid, struct vm_guest_paging *paging,
2552 error = vm_gla2gpa(vm, vcpuid, paging, gla, prot, &gpa, fault);
2565 hva = vm_gpa_hold(vm, vcpuid, copyinfo[idx].gpa,
2574 vm_copy_teardown(vm, vcpuid, copyinfo, num_copyinfo);
2583 vm_copyin(struct vm *vm, int vcpuid, struct vm_copyinfo *copyinfo, void *kaddr,
2600 vm_copyout(struct vm *vm, int vcpuid, const void *kaddr,