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