[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] x86/pv: Remove deferred RDTSC{, P} handling in pv_emulate_privileged_op()
commit 06b988f3e07a9581e7c2ef5ae119524c0c13fed7 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Mon Feb 19 14:27:04 2018 +0000 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Tue Dec 18 17:13:51 2018 +0000 x86/pv: Remove deferred RDTSC{,P} handling in pv_emulate_privileged_op() As noted in c/s 4999bf3e8b "x86/PV: use generic emulator for privileged instruction handling", these hoops are jumped through to retain the older behaviour, along with a note suggesting that we should reconsider things. Part of the reason for retention of the old behaviour was removed by c/s 5b04262079 "x86/time: Rework pv_soft_rdtsc() to aid further cleanup" which in particular caused it to not write regs->rcx directly. It does not matter exactly when pv_soft_rdtsc() is called, as Xen's behaviour is an opaque atomic action from the guests point of view. Drop all the deferral logic, and leave TSC_AUX uniformly at 0 as PVRDTSCP mode is being removed. Later changes will make this behave architecturally. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/arch/x86/pv/emul-priv-op.c | 30 ++---------------------------- 1 file changed, 2 insertions(+), 28 deletions(-) diff --git a/xen/arch/x86/pv/emul-priv-op.c b/xen/arch/x86/pv/emul-priv-op.c index a84f3f1a86..5133c3561e 100644 --- a/xen/arch/x86/pv/emul-priv-op.c +++ b/xen/arch/x86/pv/emul-priv-op.c @@ -51,9 +51,6 @@ struct priv_op_ctxt { } cs; char *io_emul_stub; unsigned int bpmatch; - unsigned int tsc; -#define TSC_BASE 1 -#define TSC_AUX 2 }; /* I/O emulation support. Helper routines for, and type of, the stack stub. */ @@ -810,7 +807,6 @@ static inline bool is_cpufreq_controller(const struct domain *d) static int read_msr(unsigned int reg, uint64_t *val, struct x86_emulate_ctxt *ctxt) { - struct priv_op_ctxt *poc = container_of(ctxt, struct priv_op_ctxt, ctxt); const struct vcpu *curr = current; const struct domain *currd = curr->domain; bool vpmu_msr = false; @@ -847,19 +843,11 @@ static int read_msr(unsigned int reg, uint64_t *val, *val = curr->arch.pv.gs_base_user; return X86EMUL_OKAY; - /* - * In order to fully retain original behavior, defer calling - * pv_soft_rdtsc() until after emulation. This may want/need to be - * reconsidered. - */ case MSR_IA32_TSC: - poc->tsc |= TSC_BASE; - goto normal; + *val = currd->arch.vtsc ? pv_soft_rdtsc(curr, ctxt->regs) : rdtsc(); + return X86EMUL_OKAY; case MSR_TSC_AUX: - poc->tsc |= TSC_AUX; - if ( cpu_has_rdtscp ) - goto normal; *val = 0; return X86EMUL_OKAY; @@ -1313,20 +1301,6 @@ int pv_emulate_privileged_op(struct cpu_user_regs *regs) switch ( rc ) { case X86EMUL_OKAY: - if ( ctxt.tsc & TSC_BASE ) - { - if ( currd->arch.vtsc || (ctxt.tsc & TSC_AUX) ) - { - msr_split(regs, pv_soft_rdtsc(curr, regs)); - - if ( ctxt.tsc & TSC_AUX ) - regs->rcx = (currd->arch.tsc_mode == TSC_MODE_PVRDTSCP - ? currd->arch.incarnation : 0); - } - else - msr_split(regs, rdtsc()); - } - if ( ctxt.ctxt.retire.singlestep ) ctxt.bpmatch |= DR_STEP; if ( ctxt.bpmatch ) -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |