[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 3/4] x86: re-organize toggle_guest_*()
toggle_guest_mode() is only ever being called for 64-bit PV vCPU-s - replace the 32-bit PV conditional by an ASSERT(). Introduce a local helper without 32-bit PV conditional, to be used by both pre-existing functions. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> --- a/xen/arch/x86/pv/domain.c +++ b/xen/arch/x86/pv/domain.c @@ -220,28 +220,8 @@ int pv_domain_initialise(struct domain * 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(); - } - asm volatile ( "swapgs" ); - - toggle_guest_pt(v); -} - -void toggle_guest_pt(struct vcpu *v) +static void _toggle_guest_pt(struct vcpu *v) { - if ( is_pv_32bit_vcpu(v) ) - return; - v->arch.flags ^= TF_kernel_mode; update_cr3(v); /* Don't flush user global mappings from the TLB. Don't tick TLB clock. */ @@ -260,6 +240,28 @@ void toggle_guest_pt(struct vcpu *v) v->arch.pv_vcpu.pending_system_time.version = 0; } +void toggle_guest_mode(struct vcpu *v) +{ + ASSERT(!is_pv_32bit_vcpu(v)); + + 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(); + } + asm volatile ( "swapgs" ); + + _toggle_guest_pt(v); +} + +void toggle_guest_pt(struct vcpu *v) +{ + if ( !is_pv_32bit_vcpu(v) ) + _toggle_guest_pt(v); +} + /* * Local variables: * mode: C _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |