[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 8/18 V2]: PVH xen: domain creation code changes
> diff --git a/xen/include/asm-x86/hvm/hvm.h b/xen/include/asm-x86/hvm/hvm.h > index 2fa2ea5..31aa04f 100644 > --- a/xen/include/asm-x86/hvm/hvm.h > +++ b/xen/include/asm-x86/hvm/hvm.h > @@ -190,6 +190,11 @@ struct hvm_function_table { > paddr_t *L1_gpa, unsigned int *page_order, > uint8_t *p2m_acc, bool_t access_r, > bool_t access_w, bool_t access_x); > + /* PVH functions */ > + int (*pvh_set_vcpu_info)(struct vcpu *v, struct vcpu_guest_context > *ctxtp); > + int (*pvh_read_descriptor)(unsigned int sel, const struct vcpu *v, > + const struct cpu_user_regs *regs, unsigned long > *base, > + unsigned long *limit, unsigned int *ar); Ewww.. Please remove the 'pvh_' part and have a comment saying: /* These two functions are used only in PVH mode. */ > }; > > extern struct hvm_function_table hvm_funcs; > @@ -323,6 +328,19 @@ static inline unsigned long > hvm_get_shadow_gs_base(struct vcpu *v) > return hvm_funcs.get_shadow_gs_base(v); > } > > +static inline int hvm_pvh_set_vcpu_info(struct vcpu *v, > + struct vcpu_guest_context *ctxtp) > +{ > + return hvm_funcs.pvh_set_vcpu_info(v, ctxtp); > +} > + > +static inline int hvm_pvh_read_descriptor(unsigned int sel, > + const struct vcpu *v, const struct cpu_user_regs *regs, > + unsigned long *base, unsigned long *limit, unsigned int *ar) > +{ > + return hvm_funcs.pvh_read_descriptor(sel, v, regs, base, limit, ar); > +} > + > #define is_viridian_domain(_d) \ > (is_hvm_domain(_d) && ((_d)->arch.hvm_domain.params[HVM_PARAM_VIRIDIAN])) > > diff --git a/xen/include/asm-x86/hvm/vcpu.h b/xen/include/asm-x86/hvm/vcpu.h > index e8b8cd7..2725a62 100644 > --- a/xen/include/asm-x86/hvm/vcpu.h > +++ b/xen/include/asm-x86/hvm/vcpu.h > @@ -104,6 +104,13 @@ struct nestedvcpu { > > #define vcpu_nestedhvm(v) ((v)->arch.hvm_vcpu.nvcpu) > > +/* add any PVH specific fields here */ > +struct pvh_hvm_vcpu_ext > +{ > + /* Guest-specified relocation of vcpu_info. */ > + unsigned long vcpu_info_mfn; > +}; > + > struct hvm_vcpu { > /* Guest control-register and EFER values, just as the guest sees them. > */ > unsigned long guest_cr[5]; > @@ -170,6 +177,8 @@ struct hvm_vcpu { > struct hvm_trap inject_trap; > > struct viridian_vcpu viridian; > + > + struct pvh_hvm_vcpu_ext hvm_pvh; Can you remove the two 'hvm' parts? So it is struct pvh_vcpu_ext pvh; ? > }; > > #endif /* __ASM_X86_HVM_VCPU_H__ */ > diff --git a/xen/include/asm-x86/system.h b/xen/include/asm-x86/system.h > index d8dc6f2..5681806 100644 > --- a/xen/include/asm-x86/system.h > +++ b/xen/include/asm-x86/system.h > @@ -4,9 +4,15 @@ > #include <xen/lib.h> > #include <asm/bitops.h> > > +/* We need vcpu because during context switch, going from pure PV to PVH, > + * in save_segments(), current has been updated to next, and no longer > pointing > + * to the pure PV. Note: for PVH, we update regs->selectors on each vmexit */ > #define read_segment_register(vcpu, regs, name) \ > ({ u16 __sel; \ > - asm volatile ( "movw %%" STR(name) ",%0" : "=r" (__sel) ); \ > + if (is_pvh_vcpu(vcpu)) \ > + __sel = regs->name; \ > + else \ > + asm volatile ( "movw %%" STR(name) ",%0" : "=r" (__sel) ); \ > __sel; \ > }) > > -- > 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 |