MCPcopy Create free account
hub / github.com/F-Stack/f-stack / vm_entry_intinfo

Function vm_entry_intinfo

freebsd/amd64/vmm/vmm.c:1987–2028  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1985}
1986
1987int
1988vm_entry_intinfo(struct vm *vm, int vcpuid, uint64_t *retinfo)
1989{
1990 struct vcpu *vcpu;
1991 uint64_t info1, info2;
1992 int valid;
1993
1994 KASSERT(vcpuid >= 0 &&
1995 vcpuid < vm->maxcpus, ("invalid vcpu %d", vcpuid));
1996
1997 vcpu = &vm->vcpu[vcpuid];
1998
1999 info1 = vcpu->exitintinfo;
2000 vcpu->exitintinfo = 0;
2001
2002 info2 = 0;
2003 if (vcpu->exception_pending) {
2004 info2 = vcpu_exception_intinfo(vcpu);
2005 vcpu->exception_pending = 0;
2006 VCPU_CTR2(vm, vcpuid, "Exception %d delivered: %#lx",
2007 vcpu->exc_vector, info2);
2008 }
2009
2010 if ((info1 & VM_INTINFO_VALID) && (info2 & VM_INTINFO_VALID)) {
2011 valid = nested_fault(vm, vcpuid, info1, info2, retinfo);
2012 } else if (info1 & VM_INTINFO_VALID) {
2013 *retinfo = info1;
2014 valid = 1;
2015 } else if (info2 & VM_INTINFO_VALID) {
2016 *retinfo = info2;
2017 valid = 1;
2018 } else {
2019 valid = 0;
2020 }
2021
2022 if (valid) {
2023 VCPU_CTR4(vm, vcpuid, "%s: info1(%#lx), info2(%#lx), "
2024 "retinfo(%#lx)", __func__, info1, info2, *retinfo);
2025 }
2026
2027 return (valid);
2028}
2029
2030int
2031vm_get_intinfo(struct vm *vm, int vcpuid, uint64_t *info1, uint64_t *info2)

Callers 2

svm_inj_intinfoFunction · 0.85
vmx_inject_interruptsFunction · 0.85

Calls 2

vcpu_exception_intinfoFunction · 0.85
nested_faultFunction · 0.85

Tested by

no test coverage detected