[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC 12/38] x86/boot: generalize compute number of domain pages
The amount of pages for a domain to be allocated is based on the physical nodes a domain may be scheduled. For dom0, this can be restricted down from available nodes via the dom0_nodes command line parameter. Refactor dom0_compute_nr_pages() such that only apply the dom0_nodes restriction only if the domain has the control domain or hardware domain capability flag set. In doing so, also rename the function to dom_compute_nr_pages(). Signed-off-by: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx> --- xen/arch/x86/dom0_build.c | 16 +++++++++++++--- xen/arch/x86/hvm/dom0_build.c | 2 +- xen/arch/x86/include/asm/dom0_build.h | 2 +- xen/arch/x86/pv/dom0_build.c | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/xen/arch/x86/dom0_build.c b/xen/arch/x86/dom0_build.c index 1413e8c634a7..53ab1afbaa1f 100644 --- a/xen/arch/x86/dom0_build.c +++ b/xen/arch/x86/dom0_build.c @@ -377,14 +377,23 @@ static void __init dom0_pv_restrict_pages( } } -unsigned long __init dom0_compute_nr_pages( +unsigned long __init dom_compute_nr_pages( struct boot_domain *bd, struct elf_dom_parms *parms) { nodeid_t node; + nodemask_t nodes = { 0 }; struct domain *d = bd->d; unsigned long avail = 0, iommu_pages = 0; - for_each_node_mask ( node, dom0_nodes ) + nodes_or(nodes, nodes, node_online_map); + + /* If building dom0 or hwdom, apply command line restriction. */ + if ( bd->capabilities & (BUILD_CAPS_CONTROL | BUILD_CAPS_HARDWARE) ) + nodes_and(nodes, nodes, dom0_nodes); + + ASSERT(nodes_weight(nodes) != 0); + + for_each_node_mask ( node, nodes ) avail += avail_domheap_pages_region(node, 0, 0) + initial_images_nrpages(node); @@ -396,7 +405,8 @@ unsigned long __init dom0_compute_nr_pages( avail -= d->max_vcpus - 1; /* Reserve memory for iommu_dom0_init() (rough estimate). */ - if ( is_iommu_enabled(d) && !iommu_hwdom_passthrough ) + if ( is_hardware_domain(d) && is_iommu_enabled(d) + && !iommu_hwdom_passthrough ) { unsigned int s; diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c index d3ad90348a1f..f59af0e72810 100644 --- a/xen/arch/x86/hvm/dom0_build.c +++ b/xen/arch/x86/hvm/dom0_build.c @@ -401,7 +401,7 @@ static __init void pvh_setup_e820(struct domain *d, unsigned long nr_pages) static void __init pvh_init_p2m(struct boot_domain *bd) { - unsigned long nr_pages = dom0_compute_nr_pages(bd, NULL); + unsigned long nr_pages = dom_compute_nr_pages(bd, NULL); bool preempted; pvh_setup_e820(bd->d, nr_pages); diff --git a/xen/arch/x86/include/asm/dom0_build.h b/xen/arch/x86/include/asm/dom0_build.h index 81717b49b4ae..7275bcf9ba6b 100644 --- a/xen/arch/x86/include/asm/dom0_build.h +++ b/xen/arch/x86/include/asm/dom0_build.h @@ -13,7 +13,7 @@ void dom0_set_affinity(struct domain *dom0); int dom0_setup_permissions(struct domain *d); struct boot_domain; -unsigned long dom0_compute_nr_pages( +unsigned long dom_compute_nr_pages( struct boot_domain *bd, struct elf_dom_parms *parms); int dom0_construct_pv(struct boot_domain *bd); diff --git a/xen/arch/x86/pv/dom0_build.c b/xen/arch/x86/pv/dom0_build.c index f8844b858082..ad4d1cc3520c 100644 --- a/xen/arch/x86/pv/dom0_build.c +++ b/xen/arch/x86/pv/dom0_build.c @@ -504,7 +504,7 @@ static int __init dom0_construct(struct boot_domain *bd) } } - nr_pages = dom0_compute_nr_pages(bd, &parms); + nr_pages = dom_compute_nr_pages(bd, &parms); #ifdef CONFIG_PV32 if ( elf_32bit(&elf) ) -- 2.30.2
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |