Re: [PATCH v3] KVM: x86 emulator: access GPRs on demand

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux