Re: A question about how kvm switch context to guest

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

 






-------- Original Message --------
From: Avi Kivity
Sent: 2012年07月04日 星期三 16时47分40秒
To: Zhengwang Ruan
Subject: Re: A question about how kvm switch context to guest
On 07/03/2012 12:50 PM, Zhengwang Ruan wrote:
Hi kashyapc&  all,

I see a piece of code in vmx_vcpu_run as below, is it used to switch
context to a guest? Kvm don't used "vmlaunch" or "vmresume" to launch or
resume a guest?
You trimmed the bit that contains vmlaunch/vmresume.

  Why does kvm need to manually  switch context by filling
registers using stored register copies?
Those registers don't get automatically switched by the hardware.

Avi,

got it! thank you!

Regards,

Zhengwang

===============

asm(
         /* Store host registers */
         "push %%"R"dx; push %%"R"bp;"
         "push %%"R"cx \n\t" /* placeholder for guest rcx */
         "push %%"R"cx \n\t"
         "cmp %%"R"sp, %c[host_rsp](%0) \n\t"
         "je 1f \n\t"
         "mov %%"R"sp, %c[host_rsp](%0) \n\t"
         __ex(ASM_VMX_VMWRITE_RSP_RDX) "\n\t"
         "1: \n\t"
         /* Reload cr2 if changed */
         "mov %c[cr2](%0), %%"R"ax \n\t"
         "mov %%cr2, %%"R"dx \n\t"
         "cmp %%"R"ax, %%"R"dx \n\t"
         "je 2f \n\t"
         "mov %%"R"ax, %%cr2 \n\t"
         "2: \n\t"
         /* Check if vmlaunch of vmresume is needed */
         "cmpl $0, %c[launched](%0) \n\t"
         /* Load guest registers.  Don't clobber flags. */
         "mov %c[rax](%0), %%"R"ax \n\t"
         "mov %c[rbx](%0), %%"R"bx \n\t"
         "mov %c[rdx](%0), %%"R"dx \n\t"
         "mov %c[rsi](%0), %%"R"si \n\t"
         "mov %c[rdi](%0), %%"R"di \n\t"
         "mov %c[rbp](%0), %%"R"bp \n\t"



--
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