[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2] x86/vcpu: Remove struct vcpu allocation restriction when possible
There is no need for struct vcpu to live below the 4G boundary for PV guests, or for HVM vcpus using HAP. Plumb struct domain into alloc_vcpu_struct() so the x86 version can query the domain's type and paging settings. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- CC: Jan Beulich <JBeulich@xxxxxxxx> CC: Wei Liu <wei.liu2@xxxxxxxxxx> CC: George Dunlap <george.dunlap@xxxxxxxxxxxxx> CC: Tim Deegan <tim@xxxxxxx> CC: Stefano Stabellini <sstabellini@xxxxxxxxxx> CC: Julien Grall <julien.grall@xxxxxxx> v2: * Plumb struct domain into alloc_vcpu_struct() --- xen/arch/arm/domain.c | 2 +- xen/arch/x86/domain.c | 7 +++++-- xen/common/domain.c | 2 +- xen/include/xen/domain.h | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/xen/arch/arm/domain.c b/xen/arch/arm/domain.c index feebbf5..8043287 100644 --- a/xen/arch/arm/domain.c +++ b/xen/arch/arm/domain.c @@ -516,7 +516,7 @@ void dump_pageframe_info(struct domain *d) #define MAX_PAGES_PER_VCPU 1 #endif -struct vcpu *alloc_vcpu_struct(void) +struct vcpu *alloc_vcpu_struct(const struct domain *d) { struct vcpu *v; diff --git a/xen/arch/x86/domain.c b/xen/arch/x86/domain.c index 943f95b..f6fe954 100644 --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -302,7 +302,7 @@ void free_domain_struct(struct domain *d) free_xenheap_page(d); } -struct vcpu *alloc_vcpu_struct(void) +struct vcpu *alloc_vcpu_struct(const struct domain *d) { struct vcpu *v; /* @@ -311,8 +311,11 @@ struct vcpu *alloc_vcpu_struct(void) * may require that the shadow CR3 points below 4GB, and hence the whole * structure must satisfy this restriction. Thus we specify MEMF_bits(32). */ + unsigned int memflags = + (is_hvm_domain(d) && paging_mode_shadow(d)) ? MEMF_bits(32) : 0; + BUILD_BUG_ON(sizeof(*v) > PAGE_SIZE); - v = alloc_xenheap_pages(0, MEMF_bits(32)); + v = alloc_xenheap_pages(0, memflags); if ( v != NULL ) clear_page(v); return v; diff --git a/xen/common/domain.c b/xen/common/domain.c index b8d4848..d6650f0 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -140,7 +140,7 @@ struct vcpu *vcpu_create( BUG_ON((!is_idle_domain(d) || vcpu_id) && d->vcpu[vcpu_id]); - if ( (v = alloc_vcpu_struct()) == NULL ) + if ( (v = alloc_vcpu_struct(d)) == NULL ) return NULL; v->domain = d; diff --git a/xen/include/xen/domain.h b/xen/include/xen/domain.h index 5e393fd..33e4148 100644 --- a/xen/include/xen/domain.h +++ b/xen/include/xen/domain.h @@ -36,7 +36,7 @@ struct domain *alloc_domain_struct(void); void free_domain_struct(struct domain *d); /* Allocate/free a VCPU structure. */ -struct vcpu *alloc_vcpu_struct(void); +struct vcpu *alloc_vcpu_struct(const struct domain *d); void free_vcpu_struct(struct vcpu *v); /* Allocate/free a PIRQ structure. */ -- 2.1.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |