[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 15/24] PVH xen: additional changes to support PVH guest creation and execution.
On Wed, Jul 17, 2013 at 07:32:59PM -0700, Mukesh Rathor wrote: > Fail creation of 32bit PVH guest. Change hap_update_cr3() to return long > mode for PVH, this called during domain creation from arch_set_info_guest(). > Return correct features for PVH to guest during it's boot. > > Signed-off-by: Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> Looks ok to me, aka you can slap on Reviewed-by tag from me. > --- > xen/arch/x86/domain.c | 8 ++++++++ > xen/arch/x86/mm/hap/hap.c | 4 +++- > xen/common/domain.c | 10 ++++++++++ > xen/common/domctl.c | 5 +++++ > xen/common/kernel.c | 6 +++++- > 5 files changed, 31 insertions(+), 2 deletions(-) > > diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c > index fccb4ee..288872a 100644 > --- a/xen/arch/x86/domain.c > +++ b/xen/arch/x86/domain.c > @@ -339,6 +339,14 @@ int switch_compat(struct domain *d) > > if ( d == NULL ) > return -EINVAL; > + > + if ( is_pvh_domain(d) ) > + { > + printk(XENLOG_INFO > + "Xen currently does not support 32bit PVH guests\n"); > + return -EINVAL; > + } > + > if ( !may_switch_mode(d) ) > return -EACCES; > if ( is_pv_32on64_domain(d) ) > diff --git a/xen/arch/x86/mm/hap/hap.c b/xen/arch/x86/mm/hap/hap.c > index bff05d9..19a085c 100644 > --- a/xen/arch/x86/mm/hap/hap.c > +++ b/xen/arch/x86/mm/hap/hap.c > @@ -639,7 +639,9 @@ static void hap_update_cr3(struct vcpu *v, int do_locking) > const struct paging_mode * > hap_paging_get_mode(struct vcpu *v) > { > - return !hvm_paging_enabled(v) ? &hap_paging_real_mode : > + /* PVH 32bitfixme. */ > + return is_pvh_vcpu(v) ? &hap_paging_long_mode : > + !hvm_paging_enabled(v) ? &hap_paging_real_mode : > hvm_long_mode_enabled(v) ? &hap_paging_long_mode : > hvm_pae_enabled(v) ? &hap_paging_pae_mode : > &hap_paging_protected_mode; > diff --git a/xen/common/domain.c b/xen/common/domain.c > index 38b1bad..3b4af4b 100644 > --- a/xen/common/domain.c > +++ b/xen/common/domain.c > @@ -237,6 +237,16 @@ struct domain *domain_create( > > if ( domcr_flags & DOMCRF_hvm ) > d->guest_type = guest_type_hvm; > + else if ( domcr_flags & DOMCRF_pvh ) > + { > + if ( !(domcr_flags & DOMCRF_hap) ) > + { > + err = -EOPNOTSUPP; > + printk(XENLOG_INFO "PVH guest must have HAP on\n"); > + goto fail; > + } > + d->guest_type = guest_type_pvh; > + } > > if ( domid == 0 ) > { > diff --git a/xen/common/domctl.c b/xen/common/domctl.c > index c653efb..48e4c08 100644 > --- a/xen/common/domctl.c > +++ b/xen/common/domctl.c > @@ -187,6 +187,8 @@ void getdomaininfo(struct domain *d, struct > xen_domctl_getdomaininfo *info) > > if ( is_hvm_domain(d) ) > info->flags |= XEN_DOMINF_hvm_guest; > + else if ( is_pvh_domain(d) ) > + info->flags |= XEN_DOMINF_pvh_guest; > > xsm_security_domaininfo(d, info); > > @@ -443,6 +445,9 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) > u_domctl) > domcr_flags = 0; > if ( op->u.createdomain.flags & XEN_DOMCTL_CDF_hvm_guest ) > domcr_flags |= DOMCRF_hvm; > + else if ( op->u.createdomain.flags & XEN_DOMCTL_CDF_hap ) > + domcr_flags |= DOMCRF_pvh; /* PV with HAP is a PVH guest */ > + > if ( op->u.createdomain.flags & XEN_DOMCTL_CDF_hap ) > domcr_flags |= DOMCRF_hap; > if ( op->u.createdomain.flags & XEN_DOMCTL_CDF_s3_integrity ) > diff --git a/xen/common/kernel.c b/xen/common/kernel.c > index 72fb905..3bba758 100644 > --- a/xen/common/kernel.c > +++ b/xen/common/kernel.c > @@ -289,7 +289,11 @@ DO(xen_version)(int cmd, XEN_GUEST_HANDLE_PARAM(void) > arg) > if ( current->domain == dom0 ) > fi.submap |= 1U << XENFEAT_dom0; > #ifdef CONFIG_X86 > - if ( !is_hvm_vcpu(current) ) > + if ( is_pvh_vcpu(current) ) > + fi.submap |= (1U << XENFEAT_hvm_safe_pvclock) | > + (1U << XENFEAT_supervisor_mode_kernel) | > + (1U << XENFEAT_hvm_callback_vector); > + else if ( !is_hvm_vcpu(current) ) > fi.submap |= (1U << XENFEAT_mmu_pt_update_preserve_ad) | > (1U << XENFEAT_highmem_assist) | > (1U << XENFEAT_gnttab_map_avail_bits); > -- > 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 |