|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.11] x86/vvmx: Fix the use of RDTSCP when it is intercepted at L0
commit 64d6137c17eb684112fc3a8c9fef70add0f12a98
Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
AuthorDate: Mon Nov 25 16:15:04 2019 +0100
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon Nov 25 16:15:04 2019 +0100
x86/vvmx: Fix the use of RDTSCP when it is intercepted at L0
Linux has started using RDTSCP as of v5.1. This has highlighted a bug in
Xen,
where virtual vmexit simply gives up.
(XEN) d1v1 Unhandled nested vmexit: reason 51
(XEN) domain_crash called from vvmx.c:2671
(XEN) Domain 1 (vcpu#1) crashed on cpu#2:
Handle RDTSCP in the virtual vmexit hander in the same was as RDTSC
intercepts.
Reported-by: Sarah Newman <srn@xxxxxxxxx>
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
Tested-by: Chris Brannon <cmb@xxxxxxxxx>
Reviewed-by: Wei Liu <wl@xxxxxxx>
master commit: 9257c218e56e9902b78662e5852d69329b9cc204
master date: 2019-10-23 16:43:48 +0100
---
xen/arch/x86/hvm/vmx/vvmx.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/xen/arch/x86/hvm/vmx/vvmx.c b/xen/arch/x86/hvm/vmx/vvmx.c
index a5fb442539..1297dc20b8 100644
--- a/xen/arch/x86/hvm/vmx/vvmx.c
+++ b/xen/arch/x86/hvm/vmx/vvmx.c
@@ -2483,6 +2483,7 @@ int nvmx_n2_vmexit_handler(struct cpu_user_regs *regs,
nvcpu->nv_vmexit_pending = 1;
break;
case EXIT_REASON_RDTSC:
+ case EXIT_REASON_RDTSCP:
ctrl = __n2_exec_control(v);
if ( ctrl & CPU_BASED_RDTSC_EXITING )
nvcpu->nv_vmexit_pending = 1;
@@ -2493,6 +2494,8 @@ int nvmx_n2_vmexit_handler(struct cpu_user_regs *regs,
* avoiding changing guest_tsc and messing up timekeeping in L1
*/
msr_split(regs, hvm_get_guest_tsc(v) + get_vvmcs(v, TSC_OFFSET));
+ if ( exit_reason == EXIT_REASON_RDTSCP )
+ regs->rcx = hvm_msr_tsc_aux(v);
update_guest_eip();
return 1;
--
generated by git-patchbot for /home/xen/git/xen.git#stable-4.11
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |