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@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Julien Grall <julien.grall@arm.com>
This commit is contained in:
Andrew Cooper committed 2018-11-05 17:07:11 +00:00
1 parent f8810d333e
commit f2722ea023
4 files changed
+8 -5

No files matched your search

+1 -1
View File
@@ -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;
+5 -2
View File
@@ -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;
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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. */
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.