[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC 11/38] x86/boot: generalize paging pages calculation
Modeling after libxl__get_required_paging_memory(), refactor dom0_paging_pages() to calculate the number of paging pages required for a domain that is not the control or hardware domain. As the function is being refactored, rename to dom_paging_pages() and move under the domain builder. Signed-off-by: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx> --- xen/arch/x86/dom0_build.c | 17 +---------------- xen/arch/x86/domain-builder/domain.c | 20 ++++++++++++++++++++ xen/arch/x86/hvm/dom0_build.c | 3 ++- xen/arch/x86/include/asm/dom0_build.h | 3 --- xen/arch/x86/include/asm/domain-builder.h | 3 +++ xen/arch/x86/pv/dom0_build.c | 3 ++- 6 files changed, 28 insertions(+), 21 deletions(-) diff --git a/xen/arch/x86/dom0_build.c b/xen/arch/x86/dom0_build.c index a007e424bbe3..1413e8c634a7 100644 --- a/xen/arch/x86/dom0_build.c +++ b/xen/arch/x86/dom0_build.c @@ -305,21 +305,6 @@ boolean_param("ro-hpet", ro_hpet); unsigned int __initdata dom0_memflags = MEMF_no_dma|MEMF_exact_node; -unsigned long __init dom0_paging_pages(const struct domain *d, - unsigned long nr_pages) -{ - /* Keep in sync with libxl__get_required_paging_memory(). */ - unsigned long memkb = nr_pages * (PAGE_SIZE / 1024); - - memkb = 4 * (256 * d->max_vcpus + - (is_pv_domain(d) ? opt_dom0_shadow || opt_pv_l1tf_hwdom - : 1 + opt_dom0_shadow) * - (memkb / 1024)); - - return DIV_ROUND_UP(memkb, 1024) << (20 - PAGE_SHIFT); -} - - /* * If allocation isn't specified, reserve 1/16th of available memory for * things like DMA buffers. This reservation is clamped to a maximum of 128MB. @@ -431,7 +416,7 @@ unsigned long __init dom0_compute_nr_pages( */ calculate_dom0_pages(bd, avail); - cpu_pages = dom0_paging_pages(d, bd->mem_pages); + cpu_pages = dom_paging_pages(bd, bd->mem_pages); if ( !iommu_use_hap_pt(d) ) avail -= cpu_pages; diff --git a/xen/arch/x86/domain-builder/domain.c b/xen/arch/x86/domain-builder/domain.c index 619d36ea0b87..87f538ae26c5 100644 --- a/xen/arch/x86/domain-builder/domain.c +++ b/xen/arch/x86/domain-builder/domain.c @@ -10,6 +10,26 @@ #include <asm/bootinfo.h> #include <asm/dom0_build.h> +#include <asm/paging.h> +#include <asm/spec_ctrl.h> + +unsigned long __init dom_paging_pages( + const struct boot_domain *bd, unsigned long nr_pages) +{ + /* Keep in sync with libxl__get_required_paging_memory(). */ + unsigned long memkb = bd->mem_pages * (PAGE_SIZE / 1024); + unsigned long factor = 0; + + if ( bd->capabilities & (BUILD_CAPS_CONTROL | BUILD_CAPS_HARDWARE) ) + factor = is_pv_domain(bd->d) ? opt_dom0_shadow || opt_pv_l1tf_hwdom + : 1 + opt_dom0_shadow; + else + factor = !is_pv_domain(bd->d) + !paging_mode_hap(bd->d); + + memkb = 4 * (256 * bd->d->max_vcpus + (factor * (memkb / 1024))); + + return DIV_ROUND_UP(memkb, 1024) << (20 - PAGE_SHIFT); +} unsigned int __init dom_max_vcpus(struct boot_domain *bd) { diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c index a818a9a772ed..d3ad90348a1f 100644 --- a/xen/arch/x86/hvm/dom0_build.c +++ b/xen/arch/x86/hvm/dom0_build.c @@ -19,6 +19,7 @@ #include <asm/bootinfo.h> #include <asm/bzimage.h> #include <asm/dom0_build.h> +#include <asm/domain-builder.h> #include <asm/hvm/support.h> #include <asm/io_apic.h> #include <asm/p2m.h> @@ -406,7 +407,7 @@ static void __init pvh_init_p2m(struct boot_domain *bd) pvh_setup_e820(bd->d, nr_pages); do { preempted = false; - paging_set_allocation(bd->d, dom0_paging_pages(bd->d, nr_pages), + paging_set_allocation(bd->d, dom_paging_pages(bd, nr_pages), &preempted); process_pending_softirqs(); } while ( preempted ); diff --git a/xen/arch/x86/include/asm/dom0_build.h b/xen/arch/x86/include/asm/dom0_build.h index dcf71c032a17..81717b49b4ae 100644 --- a/xen/arch/x86/include/asm/dom0_build.h +++ b/xen/arch/x86/include/asm/dom0_build.h @@ -19,9 +19,6 @@ unsigned long dom0_compute_nr_pages( int dom0_construct_pv(struct boot_domain *bd); int dom0_construct_pvh(struct boot_domain *bd); -unsigned long dom0_paging_pages(const struct domain *d, - unsigned long nr_pages); - void dom0_update_physmap(bool compat, unsigned long pfn, unsigned long mfn, unsigned long vphysmap_s); diff --git a/xen/arch/x86/include/asm/domain-builder.h b/xen/arch/x86/include/asm/domain-builder.h index ccfa4bd82acd..8b0b224eba41 100644 --- a/xen/arch/x86/include/asm/domain-builder.h +++ b/xen/arch/x86/include/asm/domain-builder.h @@ -8,6 +8,9 @@ int __init builder_get_cmdline( struct boot_info *bi, int offset, char *cmdline, size_t size); void builder_init(struct boot_info *bi); + +unsigned long dom_paging_pages( + const struct boot_domain *d, unsigned long nr_pages); unsigned int dom_max_vcpus(struct boot_domain *bd); struct vcpu *alloc_dom_vcpu0(struct boot_domain *bd); diff --git a/xen/arch/x86/pv/dom0_build.c b/xen/arch/x86/pv/dom0_build.c index 350a60b1e8fd..f8844b858082 100644 --- a/xen/arch/x86/pv/dom0_build.c +++ b/xen/arch/x86/pv/dom0_build.c @@ -17,6 +17,7 @@ #include <asm/bootinfo.h> #include <asm/bzimage.h> #include <asm/dom0_build.h> +#include <asm/domain-builder.h> #include <asm/guest.h> #include <asm/page.h> #include <asm/pv/mm.h> @@ -1043,7 +1044,7 @@ static int __init dom0_construct(struct boot_domain *bd) { bool preempted; - nr_pt_pages = dom0_paging_pages(d, nr_pages); + nr_pt_pages = dom_paging_pages(bd, nr_pages); do { preempted = false; -- 2.30.2
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |