|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 08/24] PVH xen: vmcs related preparatory changes for PVH
>>> On 18.07.13 at 04:32, Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> wrote:
> In this patch, some common code is factored out of construct_vmcs() to create
> vmx_set_common_host_vmcs_fields() to be used by PVH.
>
> Signed-off-by: Mukesh Rathor <mukesh.rathor@xxxxxxxxxx>
> Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
> ---
> xen/arch/x86/hvm/vmx/vmcs.c | 58 +++++++++++++++++++++++-------------------
> 1 files changed, 32 insertions(+), 26 deletions(-)
>
> diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c
> index de9f592..36f167f 100644
> --- a/xen/arch/x86/hvm/vmx/vmcs.c
> +++ b/xen/arch/x86/hvm/vmx/vmcs.c
> @@ -825,11 +825,40 @@ void virtual_vmcs_vmwrite(void *vvmcs, u32
> vmcs_encoding, u64 val)
> virtual_vmcs_exit(vvmcs);
> }
>
> -static int construct_vmcs(struct vcpu *v)
> +static void vmx_set_common_host_vmcs_fields(struct vcpu *v)
> {
> - struct domain *d = v->domain;
> uint16_t sysenter_cs;
> unsigned long sysenter_eip;
> +
> + /* Host data selectors. */
> + __vmwrite(HOST_SS_SELECTOR, __HYPERVISOR_DS);
> + __vmwrite(HOST_DS_SELECTOR, __HYPERVISOR_DS);
> + __vmwrite(HOST_ES_SELECTOR, __HYPERVISOR_DS);
> + __vmwrite(HOST_FS_SELECTOR, 0);
> + __vmwrite(HOST_GS_SELECTOR, 0);
> + __vmwrite(HOST_FS_BASE, 0);
> + __vmwrite(HOST_GS_BASE, 0);
> +
> + /* Host control registers. */
> + v->arch.hvm_vmx.host_cr0 = read_cr0() | X86_CR0_TS;
> + __vmwrite(HOST_CR0, v->arch.hvm_vmx.host_cr0);
> + __vmwrite(HOST_CR4,
> + mmu_cr4_features | (xsave_enabled(v) ? X86_CR4_OSXSAVE : 0));
> +
> + /* Host CS:RIP. */
> + __vmwrite(HOST_CS_SELECTOR, __HYPERVISOR_CS);
> + __vmwrite(HOST_RIP, (unsigned long)vmx_asm_vmexit_handler);
> +
> + /* Host SYSENTER CS:RIP. */
> + rdmsrl(MSR_IA32_SYSENTER_CS, sysenter_cs);
> + __vmwrite(HOST_SYSENTER_CS, sysenter_cs);
> + rdmsrl(MSR_IA32_SYSENTER_EIP, sysenter_eip);
> + __vmwrite(HOST_SYSENTER_EIP, sysenter_eip);
> +}
> +
> +static int construct_vmcs(struct vcpu *v)
> +{
> + struct domain *d = v->domain;
> u32 vmexit_ctl = vmx_vmexit_control;
> u32 vmentry_ctl = vmx_vmentry_control;
>
> @@ -932,30 +961,7 @@ static int construct_vmcs(struct vcpu *v)
> __vmwrite(POSTED_INTR_NOTIFICATION_VECTOR, posted_intr_vector);
> }
>
> - /* Host data selectors. */
> - __vmwrite(HOST_SS_SELECTOR, __HYPERVISOR_DS);
> - __vmwrite(HOST_DS_SELECTOR, __HYPERVISOR_DS);
> - __vmwrite(HOST_ES_SELECTOR, __HYPERVISOR_DS);
> - __vmwrite(HOST_FS_SELECTOR, 0);
> - __vmwrite(HOST_GS_SELECTOR, 0);
> - __vmwrite(HOST_FS_BASE, 0);
> - __vmwrite(HOST_GS_BASE, 0);
> -
> - /* Host control registers. */
> - v->arch.hvm_vmx.host_cr0 = read_cr0() | X86_CR0_TS;
> - __vmwrite(HOST_CR0, v->arch.hvm_vmx.host_cr0);
> - __vmwrite(HOST_CR4,
> - mmu_cr4_features | (xsave_enabled(v) ? X86_CR4_OSXSAVE : 0));
> -
> - /* Host CS:RIP. */
> - __vmwrite(HOST_CS_SELECTOR, __HYPERVISOR_CS);
> - __vmwrite(HOST_RIP, (unsigned long)vmx_asm_vmexit_handler);
> -
> - /* Host SYSENTER CS:RIP. */
> - rdmsrl(MSR_IA32_SYSENTER_CS, sysenter_cs);
> - __vmwrite(HOST_SYSENTER_CS, sysenter_cs);
> - rdmsrl(MSR_IA32_SYSENTER_EIP, sysenter_eip);
> - __vmwrite(HOST_SYSENTER_EIP, sysenter_eip);
> + vmx_set_common_host_vmcs_fields(v);
>
> /* MSR intercepts. */
> __vmwrite(VM_EXIT_MSR_LOAD_COUNT, 0);
> --
> 1.7.2.3
>
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |