|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen master] x86/svm: Provide EXITINFO decodes for MOV CR intercepts
commit a5087069a8c40541ba81fa0e2850471c949932b3
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Wed Mar 15 19:25:56 2023 +0000
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Thu Apr 6 13:56:51 2023 +0100
x86/svm: Provide EXITINFO decodes for MOV CR intercepts
This removes raw number manipulation, and makes the logic easier to follow.
No functional change.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/arch/x86/hvm/svm/svm.c | 4 ++--
xen/arch/x86/include/asm/hvm/svm/vmcb.h | 5 +++++
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c
index 8d8b250101..1b32ef77b6 100644
--- a/xen/arch/x86/hvm/svm/svm.c
+++ b/xen/arch/x86/hvm/svm/svm.c
@@ -1740,7 +1740,7 @@ static void svm_vmexit_do_cr_access(
cr = vmcb->exitcode - VMEXIT_CR0_READ;
dir = (cr > 15);
cr &= 0xf;
- gp = vmcb->exitinfo1 & 0xf;
+ gp = vmcb->ei.mov_cr.gpr;
rc = dir ? hvm_mov_to_cr(cr, gp) : hvm_mov_from_cr(cr, gp);
@@ -2961,7 +2961,7 @@ void svm_vmexit_handler(void)
case VMEXIT_CR0_READ ... VMEXIT_CR15_READ:
case VMEXIT_CR0_WRITE ... VMEXIT_CR15_WRITE:
- if ( cpu_has_svm_decode && (vmcb->exitinfo1 & (1ULL << 63)) )
+ if ( cpu_has_svm_decode && vmcb->ei.mov_cr.mov_insn )
svm_vmexit_do_cr_access(vmcb, regs);
else if ( !hvm_emulate_one_insn(x86_insn_is_cr_access, "CR access") )
hvm_inject_hw_exception(X86_EXC_GP, 0);
diff --git a/xen/arch/x86/include/asm/hvm/svm/vmcb.h
b/xen/arch/x86/include/asm/hvm/svm/vmcb.h
index b809e85507..6cd1c4cfe4 100644
--- a/xen/arch/x86/include/asm/hvm/svm/vmcb.h
+++ b/xen/arch/x86/include/asm/hvm/svm/vmcb.h
@@ -450,6 +450,11 @@ struct vmcb_struct {
uint64_t nrip;
} io;
+ struct {
+ uint64_t gpr:4;
+ uint64_t :59;
+ bool mov_insn:1; /* MOV, as opposed to LMSW, CLTS, etc */
+ } mov_cr;
struct {
uint16_t sel;
uint64_t :48;
--
generated by git-patchbot for /home/xen/git/xen.git#master
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |