[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] x86: move vgc_flags to struct pv_vcpu
commit 3d4985fc844e0887a47abcdfa55b887df3168fd2 Author: Jan Beulich <jbeulich@xxxxxxxx> AuthorDate: Fri Dec 27 09:57:05 2019 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Fri Dec 27 09:57:05 2019 +0100 x86: move vgc_flags to struct pv_vcpu There's been effectively no use of the field for HVM. Also shrink the field to unsigned int, even if this doesn't immediately yield any space benefit for the structure itself. The resulting 32-bit padding slot can eventually be used for some other field. The change in size makes accesses slightly more efficient though, as no REX.W prefix is going to be needed anymore on the respective insns. Mirror the HVM side change here (dropping of setting the field to VGCF_online) also to Arm, on the assumption that it was cloned like this originally. VGCF_online really should simply and consistently be the guest view of the inverse of VPF_down, and hence needs representing only in the get/set vCPU context interfaces. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/domain.c | 8 ++++---- xen/arch/x86/domctl.c | 5 ++++- xen/arch/x86/hvm/hvm.c | 4 ---- xen/arch/x86/pv/callback.c | 12 ++++++------ xen/arch/x86/x86_64/asm-offsets.c | 2 +- xen/include/asm-x86/domain.h | 3 ++- 6 files changed, 17 insertions(+), 17 deletions(-) diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index d9c63379cd..2aac912c96 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -895,6 +895,8 @@ int arch_set_info_guest( if ( ((c(ldt_base) & (PAGE_SIZE - 1)) != 0) || (c(ldt_ents) > 8192) ) return -EINVAL; + + v->arch.pv.vgc_flags = flags; } v->arch.flags |= TF_kernel_mode; @@ -907,8 +909,6 @@ int arch_set_info_guest( !is_hvm_domain(d) && !is_pv_32bit_domain(d) ) v->arch.flags &= ~TF_kernel_mode; - v->arch.vgc_flags = flags; - vcpu_setup_fpu(v, v->arch.xsave_area, flags & VGCF_I387_VALID ? &c.nat->fpu_ctxt : NULL, FCW_DEFAULT); @@ -1487,7 +1487,7 @@ static void load_segments(struct vcpu *n) domain_crash(n->domain); } - if ( n->arch.vgc_flags & VGCF_failsafe_disables_events ) + if ( n->arch.pv.vgc_flags & VGCF_failsafe_disables_events ) vcpu_info(n, evtchn_upcall_mask) = 1; regs->entry_vector |= TRAP_syscall; @@ -1526,7 +1526,7 @@ static void load_segments(struct vcpu *n) domain_crash(n->domain); } - if ( n->arch.vgc_flags & VGCF_failsafe_disables_events ) + if ( n->arch.pv.vgc_flags & VGCF_failsafe_disables_events ) vcpu_info(n, evtchn_upcall_mask) = 1; regs->entry_vector |= TRAP_syscall; diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c index b461aadbd6..e6b3e57d66 100644 --- a/xen/arch/x86/domctl.c +++ b/xen/arch/x86/domctl.c @@ -1500,7 +1500,10 @@ void arch_get_info_guest(struct vcpu *v, vcpu_guest_context_u c) #define c(fld) (!compat ? (c.nat->fld) : (c.cmp->fld)) memcpy(&c.nat->fpu_ctxt, v->arch.fpu_ctxt, sizeof(c.nat->fpu_ctxt)); - c(flags = v->arch.vgc_flags & ~(VGCF_i387_valid|VGCF_in_kernel)); + if ( is_pv_domain(d) ) + c(flags = v->arch.pv.vgc_flags & ~(VGCF_i387_valid|VGCF_in_kernel)); + else + c(flags = 0); if ( v->fpu_initialised ) c(flags |= VGCF_i387_valid); if ( !(v->pause_flags & VPF_down) ) diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index 4dfaf35566..9db9cf04a6 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -1151,8 +1151,6 @@ static int hvm_load_cpu_ctxt(struct domain *d, hvm_domain_context_t *h) v->arch.dr6 = ctxt.dr6; v->arch.dr7 = ctxt.dr7; - v->arch.vgc_flags = VGCF_online; - /* Auxiliary processors should be woken immediately. */ v->is_initialised = 1; clear_bit(_VPF_down, &v->pause_flags); @@ -3865,8 +3863,6 @@ void hvm_vcpu_reset_state(struct vcpu *v, uint16_t cs, uint16_t ip) v->arch.xsave_area->xsave_hdr.xstate_bv = 0; vcpu_setup_fpu(v, v->arch.xsave_area, NULL, FCW_RESET); - v->arch.vgc_flags = VGCF_online; - arch_vcpu_regs_init(v); v->arch.user_regs.rip = ip; diff --git a/xen/arch/x86/pv/callback.c b/xen/arch/x86/pv/callback.c index 0c4e781d1f..1178efddb6 100644 --- a/xen/arch/x86/pv/callback.c +++ b/xen/arch/x86/pv/callback.c @@ -82,17 +82,17 @@ static long register_guest_callback(struct callback_register *reg) case CALLBACKTYPE_failsafe: curr->arch.pv.failsafe_callback_eip = reg->address; if ( reg->flags & CALLBACKF_mask_events ) - curr->arch.vgc_flags |= VGCF_failsafe_disables_events; + curr->arch.pv.vgc_flags |= VGCF_failsafe_disables_events; else - curr->arch.vgc_flags &= ~VGCF_failsafe_disables_events; + curr->arch.pv.vgc_flags &= ~VGCF_failsafe_disables_events; break; case CALLBACKTYPE_syscall: curr->arch.pv.syscall_callback_eip = reg->address; if ( reg->flags & CALLBACKF_mask_events ) - curr->arch.vgc_flags |= VGCF_syscall_disables_events; + curr->arch.pv.vgc_flags |= VGCF_syscall_disables_events; else - curr->arch.vgc_flags &= ~VGCF_syscall_disables_events; + curr->arch.pv.vgc_flags &= ~VGCF_syscall_disables_events; break; case CALLBACKTYPE_syscall32: @@ -226,9 +226,9 @@ static long compat_register_guest_callback(struct compat_callback_register *reg) curr->arch.pv.failsafe_callback_cs = reg->address.cs; curr->arch.pv.failsafe_callback_eip = reg->address.eip; if ( reg->flags & CALLBACKF_mask_events ) - curr->arch.vgc_flags |= VGCF_failsafe_disables_events; + curr->arch.pv.vgc_flags |= VGCF_failsafe_disables_events; else - curr->arch.vgc_flags &= ~VGCF_failsafe_disables_events; + curr->arch.pv.vgc_flags &= ~VGCF_failsafe_disables_events; break; case CALLBACKTYPE_syscall32: diff --git a/xen/arch/x86/x86_64/asm-offsets.c b/xen/arch/x86/x86_64/asm-offsets.c index 33930ce97c..f9cb78cfdb 100644 --- a/xen/arch/x86/x86_64/asm-offsets.c +++ b/xen/arch/x86/x86_64/asm-offsets.c @@ -69,7 +69,7 @@ void __dummy__(void) OFFSET(VCPU_kernel_sp, struct vcpu, arch.pv.kernel_sp); OFFSET(VCPU_kernel_ss, struct vcpu, arch.pv.kernel_ss); OFFSET(VCPU_iopl, struct vcpu, arch.pv.iopl); - OFFSET(VCPU_guest_context_flags, struct vcpu, arch.vgc_flags); + OFFSET(VCPU_guest_context_flags, struct vcpu, arch.pv.vgc_flags); OFFSET(VCPU_cr3, struct vcpu, arch.cr3); OFFSET(VCPU_arch_msrs, struct vcpu, arch.msrs); OFFSET(VCPU_nmi_pending, struct vcpu, nmi_pending); diff --git a/xen/include/asm-x86/domain.h b/xen/include/asm-x86/domain.h index e4da373d10..a3ae5d9a20 100644 --- a/xen/include/asm-x86/domain.h +++ b/xen/include/asm-x86/domain.h @@ -475,6 +475,8 @@ struct pv_vcpu /* map_domain_page() mapping cache. */ struct mapcache_vcpu mapcache; + unsigned int vgc_flags; + struct trap_info *trap_ctxt; unsigned long gdt_frames[FIRST_RESERVED_GDT_PAGE]; @@ -541,7 +543,6 @@ struct arch_vcpu */ void *fpu_ctxt; - unsigned long vgc_flags; struct cpu_user_regs user_regs; /* Debug registers. */ -- generated by git-patchbot for /home/xen/git/xen.git#staging _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |