[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v4 13/27] x86: move toggle_guest_mode to pv/domain.c
Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- xen/arch/x86/pv/domain.c | 30 ++++++++++++++++++++++++++++++ xen/arch/x86/x86_64/traps.c | 30 ------------------------------ 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/xen/arch/x86/pv/domain.c b/xen/arch/x86/pv/domain.c index 1c0c040ca0..0f3f0e85d6 100644 --- a/xen/arch/x86/pv/domain.c +++ b/xen/arch/x86/pv/domain.c @@ -213,6 +213,36 @@ int pv_domain_initialise(struct domain *d, unsigned int domcr_flags, return rc; } +void toggle_guest_mode(struct vcpu *v) +{ + if ( is_pv_32bit_vcpu(v) ) + return; + if ( cpu_has_fsgsbase ) + { + if ( v->arch.flags & TF_kernel_mode ) + v->arch.pv_vcpu.gs_base_kernel = __rdgsbase(); + else + v->arch.pv_vcpu.gs_base_user = __rdgsbase(); + } + v->arch.flags ^= TF_kernel_mode; + asm volatile ( "swapgs" ); + update_cr3(v); + /* Don't flush user global mappings from the TLB. Don't tick TLB clock. */ + asm volatile ( "mov %0, %%cr3" : : "r" (v->arch.cr3) : "memory" ); + + if ( !(v->arch.flags & TF_kernel_mode) ) + return; + + if ( v->arch.pv_vcpu.need_update_runstate_area && + update_runstate_area(v) ) + v->arch.pv_vcpu.need_update_runstate_area = 0; + + if ( v->arch.pv_vcpu.pending_system_time.version && + update_secondary_system_time(v, + &v->arch.pv_vcpu.pending_system_time) ) + v->arch.pv_vcpu.pending_system_time.version = 0; +} + /* * Local variables: * mode: C diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c index 78f410517c..36b694c605 100644 --- a/xen/arch/x86/x86_64/traps.c +++ b/xen/arch/x86/x86_64/traps.c @@ -254,36 +254,6 @@ void do_double_fault(struct cpu_user_regs *regs) panic("DOUBLE FAULT -- system shutdown"); } -void toggle_guest_mode(struct vcpu *v) -{ - if ( is_pv_32bit_vcpu(v) ) - return; - if ( cpu_has_fsgsbase ) - { - if ( v->arch.flags & TF_kernel_mode ) - v->arch.pv_vcpu.gs_base_kernel = __rdgsbase(); - else - v->arch.pv_vcpu.gs_base_user = __rdgsbase(); - } - v->arch.flags ^= TF_kernel_mode; - asm volatile ( "swapgs" ); - update_cr3(v); - /* Don't flush user global mappings from the TLB. Don't tick TLB clock. */ - asm volatile ( "mov %0, %%cr3" : : "r" (v->arch.cr3) : "memory" ); - - if ( !(v->arch.flags & TF_kernel_mode) ) - return; - - if ( v->arch.pv_vcpu.need_update_runstate_area && - update_runstate_area(v) ) - v->arch.pv_vcpu.need_update_runstate_area = 0; - - if ( v->arch.pv_vcpu.pending_system_time.version && - update_secondary_system_time(v, - &v->arch.pv_vcpu.pending_system_time) ) - v->arch.pv_vcpu.pending_system_time.version = 0; -} - unsigned long do_iret(void) { struct cpu_user_regs *regs = guest_cpu_user_regs(); -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |