Provide the hardware error code for NVMM_EXIT_INVALID, useful when
debugging.
This commit is contained in:
parent
f8f9f44113
commit
9019e1da46
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: nvmm.h,v 1.5 2019/03/21 20:21:40 maxv Exp $ */
|
/* $NetBSD: nvmm.h,v 1.6 2019/04/24 18:19:28 maxv Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 The NetBSD Foundation, Inc.
|
* Copyright (c) 2018 The NetBSD Foundation, Inc.
|
||||||
|
@ -103,6 +103,10 @@ struct nvmm_exit_insn {
|
||||||
uint64_t npc;
|
uint64_t npc;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct nvmm_exit_invalid {
|
||||||
|
uint64_t hwcode;
|
||||||
|
};
|
||||||
|
|
||||||
struct nvmm_exit {
|
struct nvmm_exit {
|
||||||
enum nvmm_exit_reason reason;
|
enum nvmm_exit_reason reason;
|
||||||
union {
|
union {
|
||||||
|
@ -110,6 +114,7 @@ struct nvmm_exit {
|
||||||
struct nvmm_exit_io io;
|
struct nvmm_exit_io io;
|
||||||
struct nvmm_exit_msr msr;
|
struct nvmm_exit_msr msr;
|
||||||
struct nvmm_exit_insn insn;
|
struct nvmm_exit_insn insn;
|
||||||
|
struct nvmm_exit_invalid inv;
|
||||||
} u;
|
} u;
|
||||||
uint64_t exitstate[8];
|
uint64_t exitstate[8];
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: nvmm_x86_svm.c,v 1.39 2019/04/20 08:45:30 maxv Exp $ */
|
/* $NetBSD: nvmm_x86_svm.c,v 1.40 2019/04/24 18:19:28 maxv Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 The NetBSD Foundation, Inc.
|
* Copyright (c) 2018 The NetBSD Foundation, Inc.
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_svm.c,v 1.39 2019/04/20 08:45:30 maxv Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_svm.c,v 1.40 2019/04/24 18:19:28 maxv Exp $");
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/systm.h>
|
#include <sys/systm.h>
|
||||||
|
@ -1118,6 +1118,13 @@ error:
|
||||||
svm_inject_gp(mach, vcpu);
|
svm_inject_gp(mach, vcpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
svm_exit_invalid(struct nvmm_exit *exit, uint64_t code)
|
||||||
|
{
|
||||||
|
exit->u.inv.hwcode = code;
|
||||||
|
exit->reason = NVMM_EXIT_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1364,7 +1371,7 @@ svm_vcpu_run(struct nvmm_machine *mach, struct nvmm_cpu *vcpu,
|
||||||
break;
|
break;
|
||||||
case VMCB_EXITCODE_FERR_FREEZE: /* ? */
|
case VMCB_EXITCODE_FERR_FREEZE: /* ? */
|
||||||
default:
|
default:
|
||||||
exit->reason = NVMM_EXIT_INVALID;
|
svm_exit_invalid(exit, vmcb->ctrl.exitcode);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: nvmm_x86_vmx.c,v 1.26 2019/04/20 08:45:30 maxv Exp $ */
|
/* $NetBSD: nvmm_x86_vmx.c,v 1.27 2019/04/24 18:19:28 maxv Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 The NetBSD Foundation, Inc.
|
* Copyright (c) 2018 The NetBSD Foundation, Inc.
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_vmx.c,v 1.26 2019/04/20 08:45:30 maxv Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: nvmm_x86_vmx.c,v 1.27 2019/04/24 18:19:28 maxv Exp $");
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <sys/systm.h>
|
#include <sys/systm.h>
|
||||||
|
@ -1623,6 +1623,13 @@ vmx_exit_epf(struct nvmm_machine *mach, struct nvmm_cpu *vcpu,
|
||||||
exit->u.mem.inst_len = 0;
|
exit->u.mem.inst_len = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
vmx_exit_invalid(struct nvmm_exit *exit, uint64_t code)
|
||||||
|
{
|
||||||
|
exit->u.inv.hwcode = code;
|
||||||
|
exit->reason = NVMM_EXIT_INVALID;
|
||||||
|
}
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
/* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1917,7 +1924,7 @@ vmx_vcpu_run(struct nvmm_machine *mach, struct nvmm_cpu *vcpu,
|
||||||
exit->reason = NVMM_EXIT_NMI_READY;
|
exit->reason = NVMM_EXIT_NMI_READY;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
exit->reason = NVMM_EXIT_INVALID;
|
vmx_exit_invalid(exit, exitcode);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue