On Thu, Aug 16, 2012 at 05:54:49PM +0300, Avi Kivity wrote: > Instead of populating the the entire register file, read in registers > as they are accessed, and write back only the modified ones. This > saves a VMREAD and VMWRITE on Intel (for rsp, since it is not usually > used during emulation), and a two 128-byte copies for the registers. > > Signed-off-by: Avi Kivity <avi@xxxxxxxxxx> > --- > > v3: > fix misplaced parentheses in em_loop() and em_jcxz(), unbreaking those instructions. > > v2: > add APIs for managing the register cache. This reduces the potential for confusion > between ctxt->regs_dirty and vcpu->arch.regs_dirty. > move cache management to the entry points > add missing writebacks to int and task switch emulation > > > arch/x86/include/asm/kvm_emulate.h | 20 ++- > arch/x86/kvm/emulate.c | 305 ++++++++++++++++++++++--------------- > arch/x86/kvm/x86.c | 45 +++--- > 3 files changed, 223 insertions(+), 147 deletions(-) > > @@ -2715,14 +2764,17 @@ int emulator_task_switch(struct x86_emulate_ctxt *ctxt, > { > int rc; > > + invalidate_registers(ctxt); > ctxt->_eip = ctxt->eip; > ctxt->dst.type = OP_NONE; > > rc = emulator_do_task_switch(ctxt, tss_selector, idt_index, reason, > has_error_code, error_code); > > - if (rc == X86EMUL_CONTINUE) > + if (rc == X86EMUL_CONTINUE) { > ctxt->eip = ctxt->_eip; > + writeback_registers(ctxt); > + } > > return (rc == X86EMUL_UNHANDLEABLE) ? EMULATION_FAILED : EMULATION_OK; > } No clear point when emulator register cache is active, when it is not (AFAICS this patch does not invalidate registers on emulation start (the above being one of the exceptions) does not clear valid bit on writeback-to-vcpu-cache on emulation exit). Concern is that emulator can start with cached registers marked as valid but in fact are invalid from previous emulation round. Maybe move invalidate() to init_emulate_ctxt? -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html