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@prgmr.com>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Tested-by: Chris Brannon <cmb@prgmr.com>
Reviewed-by: Wei Liu <wl@xen.org>
Release-acked-by: Juergen Gross <jgross@suse.com>
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;
* 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 = v->arch.msrs->tsc_aux;
update_guest_eip();
return 1;