|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFCv2 13/38] x86/hyperlaunch: move pvh p2m init to domain builder
Generalize pvh_init_p2m() for use on domU and relocate under the domain
builder. To support moving the function, dom0_pvh_setup_e820() was exported.
Signed-off-by: Daniel P. Smith <dpsmith@xxxxxxxxxxxxxxxxxxxx>
---
xen/arch/x86/hvm/dom0_build.c | 23 +----------------------
xen/arch/x86/hvm/dom_build.c | 25 +++++++++++++++++++++++++
xen/arch/x86/include/asm/dom0_build.h | 2 ++
3 files changed, 28 insertions(+), 22 deletions(-)
diff --git a/xen/arch/x86/hvm/dom0_build.c b/xen/arch/x86/hvm/dom0_build.c
index 1e63e19589a1..378a1f29fb1b 100644
--- a/xen/arch/x86/hvm/dom0_build.c
+++ b/xen/arch/x86/hvm/dom0_build.c
@@ -323,7 +323,7 @@ static int __init pvh_setup_vmx_realmode_helpers(struct
domain *d)
return 0;
}
-static __init void pvh_setup_e820(struct domain *d, unsigned long nr_pages)
+void __init dom0_pvh_setup_e820(struct domain *d, unsigned long nr_pages)
{
struct e820entry *entry, *entry_guest;
unsigned int i;
@@ -399,20 +399,6 @@ static __init void pvh_setup_e820(struct domain *d,
unsigned long nr_pages)
ASSERT(cur_pages == nr_pages);
}
-static void __init pvh_init_p2m(struct boot_domain *bd)
-{
- unsigned long nr_pages = dom_compute_nr_pages(bd, NULL);
- bool preempted;
-
- pvh_setup_e820(bd->d, nr_pages);
- do {
- preempted = false;
- paging_set_allocation(bd->d, dom_paging_pages(bd, nr_pages),
- &preempted);
- process_pending_softirqs();
- } while ( preempted );
-}
-
static int __init pvh_populate_p2m(struct domain *d)
{
struct vcpu *v = d->vcpu[0];
@@ -1318,13 +1304,6 @@ int __init dom0_construct_pvh(struct boot_domain *bd)
struct domain *d = bd->d;
int rc;
- /*
- * Craft dom0 physical memory map and set the paging allocation. This must
- * be done before the iommu initializion, since iommu initialization code
- * will likely add mappings required by devices to the p2m (ie: RMRRs).
- */
- pvh_init_p2m(bd);
-
iommu_hwdom_init(d);
rc = pvh_populate_p2m(d);
diff --git a/xen/arch/x86/hvm/dom_build.c b/xen/arch/x86/hvm/dom_build.c
index a5f259b6352d..eec65e3e805e 100644
--- a/xen/arch/x86/hvm/dom_build.c
+++ b/xen/arch/x86/hvm/dom_build.c
@@ -10,13 +10,16 @@
#include <xen/acpi.h>
#include <xen/init.h>
+#include <xen/softirq.h>
#include <xen/types.h>
#include <acpi/actables.h>
#include <asm/bootinfo.h>
#include <asm/dom0_build.h>
+#include <asm/domain-builder.h>
#include <asm/hvm/io.h>
+#include <asm/paging.h>
#include <asm/pci.h>
static void __hwdom_init pvh_setup_mmcfg(struct domain *d)
@@ -37,6 +40,20 @@ static void __hwdom_init pvh_setup_mmcfg(struct domain *d)
}
}
+static void __init pvh_init_p2m(struct boot_domain *bd)
+{
+ unsigned long nr_pages = dom_compute_nr_pages(bd, NULL);
+ bool preempted;
+
+ dom0_pvh_setup_e820(bd->d, nr_pages);
+ do {
+ preempted = false;
+ paging_set_allocation(bd->d, dom_paging_pages(bd, nr_pages),
+ &preempted);
+ process_pending_softirqs();
+ } while ( preempted );
+}
+
int __init dom_construct_pvh(struct boot_domain *bd)
{
int rc;
@@ -67,6 +84,14 @@ int __init dom_construct_pvh(struct boot_domain *bd)
}
}
+ /*
+ * Craft domain physical memory map and set the paging allocation. This
+ * must be done before the iommu initializion, since iommu initialization
+ * code will likely add mappings required by devices to the p2m (ie:
+ * RMRRs).
+ */
+ pvh_init_p2m(bd);
+
return dom0_construct_pvh(bd);
}
diff --git a/xen/arch/x86/include/asm/dom0_build.h
b/xen/arch/x86/include/asm/dom0_build.h
index 43a402af15b7..e5debd5adf9f 100644
--- a/xen/arch/x86/include/asm/dom0_build.h
+++ b/xen/arch/x86/include/asm/dom0_build.h
@@ -18,6 +18,8 @@ void calculate_dom0_pages(struct boot_domain *bd, unsigned
long avail);
void dom0_pv_restrict_pages(
struct boot_domain *bd, struct elf_dom_parms *parms);
+void dom0_pvh_setup_e820(struct domain *d, unsigned long nr_pages);
+
int dom0_construct_pv(struct boot_domain *bd);
int dom0_construct_pvh(struct boot_domain *bd);
--
2.30.2
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |