[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 2/2] x86: generalise vcpu0 creation for a domain
Make alloc_dom0_vcpu0() viable as a general vcpu0 allocator. Keep behaviour on any hwdom/ctldom identical to that dom0 used to have, and make non-dom0 have auto node affinity. Rename the function to alloc_dom_vcpu0() to reflect this change in scope, and move the prototype to asm/domain.h from xen/domain.h as it's only used in x86. Signed-off-by: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx> Signed-off-by: Alejandro Vallejo <alejandro.garciavallejo@xxxxxxx> --- xen/arch/x86/dom0_build.c | 12 ++++++++---- xen/arch/x86/include/asm/dom0_build.h | 5 +++++ xen/arch/x86/setup.c | 6 ++++-- xen/include/xen/domain.h | 1 - 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/xen/arch/x86/dom0_build.c b/xen/arch/x86/dom0_build.c index 0b467fd4a4..dfae7f888f 100644 --- a/xen/arch/x86/dom0_build.c +++ b/xen/arch/x86/dom0_build.c @@ -254,12 +254,16 @@ unsigned int __init dom0_max_vcpus(void) return max_vcpus; } -struct vcpu *__init alloc_dom0_vcpu0(struct domain *dom0) +struct vcpu *__init alloc_dom_vcpu0(struct domain *d) { - dom0->node_affinity = dom0_nodes; - dom0->auto_node_affinity = !dom0_nr_pxms; + d->auto_node_affinity = true; + if ( is_hardware_domain(d) || is_control_domain(d) ) + { + d->node_affinity = dom0_nodes; + d->auto_node_affinity = !dom0_nr_pxms; + } - return vcpu_create(dom0, 0); + return vcpu_create(d, 0); } #ifdef CONFIG_SHADOW_PAGING diff --git a/xen/arch/x86/include/asm/dom0_build.h b/xen/arch/x86/include/asm/dom0_build.h index ff021c24af..46bfd111f2 100644 --- a/xen/arch/x86/include/asm/dom0_build.h +++ b/xen/arch/x86/include/asm/dom0_build.h @@ -23,6 +23,11 @@ unsigned long dom0_paging_pages(const struct domain *d, void dom0_update_physmap(bool compat, unsigned long pfn, unsigned long mfn, unsigned long vphysmap_s); +/* general domain construction */ + +/* Create the first vCPU of a domain. Sets up node affinity as a side effect */ +struct vcpu *alloc_dom_vcpu0(struct domain *d); + #endif /* _DOM0_BUILD_H_ */ /* diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index c6890669b9..77a8ca60c3 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -37,6 +37,7 @@ #include <asm/bzimage.h> #include <asm/cpu-policy.h> #include <asm/desc.h> +#include <asm/dom0_build.h> #include <asm/e820.h> #include <asm/edd.h> #include <asm/genapic.h> @@ -1054,9 +1055,11 @@ static struct domain *__init create_dom0(struct boot_info *bi) if ( IS_ERR(d) ) panic("Error creating d%u: %ld\n", bd->domid, PTR_ERR(d)); + bd->d = d; + init_dom0_cpuid_policy(d); - if ( alloc_dom0_vcpu0(d) == NULL ) + if ( alloc_dom_vcpu0(d) == NULL ) panic("Error creating %pdv0\n", d); cmdline_size = domain_cmdline_size(bi, bd); @@ -1093,7 +1096,6 @@ static struct domain *__init create_dom0(struct boot_info *bi) bd->cmdline = cmdline; } - bd->d = d; if ( construct_dom0(bd) != 0 ) panic("Could not construct domain 0\n"); diff --git a/xen/include/xen/domain.h b/xen/include/xen/domain.h index e10baf2615..bf1fc6227f 100644 --- a/xen/include/xen/domain.h +++ b/xen/include/xen/domain.h @@ -24,7 +24,6 @@ struct vcpu *vcpu_create(struct domain *d, unsigned int vcpu_id); unsigned int dom0_max_vcpus(void); int parse_arch_dom0_param(const char *s, const char *e); -struct vcpu *alloc_dom0_vcpu0(struct domain *dom0); int vcpu_reset(struct vcpu *v); int vcpu_up(struct vcpu *v); -- 2.43.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |