|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH RFC 05/44] x86/boot: Move arch_init_memory() earlier in the boot sequence
idle_pg_table[] needs all slots populated before it is copied to create the
vcpu idle pagetables. One missing slot is for MMCFG, which is now allocated
early.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
xen/arch/x86/setup.c | 4 ++--
xen/arch/x86/x86_64/mm.c | 15 +++++++++++++++
2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index 64286f7..4aff5bd 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -1502,6 +1502,8 @@ void __init noreturn __start_xen(unsigned long mbi_p)
if ( cpu_has_fsgsbase )
set_in_cr4(X86_CR4_FSGSBASE);
+ arch_init_memory();
+
cpu_smpboot_bsp();
init_idle_domain();
@@ -1512,8 +1514,6 @@ void __init noreturn __start_xen(unsigned long mbi_p)
early_time_init();
- arch_init_memory();
-
alternative_instructions();
local_irq_enable();
diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
index 9b37da6..68eee30 100644
--- a/xen/arch/x86/x86_64/mm.c
+++ b/xen/arch/x86/x86_64/mm.c
@@ -831,6 +831,7 @@ static int extend_frame_table(struct mem_hotadd_info *info)
void __init subarch_init_memory(void)
{
unsigned long i, n, v, m2p_start_mfn;
+ l4_pgentry_t *pl4e;
l3_pgentry_t l3e;
l2_pgentry_t l2e;
@@ -886,6 +887,20 @@ void __init subarch_init_memory(void)
}
}
+ /* Create an L3 table for the MMCFG region, or remap it NX. */
+ pl4e = &idle_pg_table[l4_table_offset(PCI_MCFG_VIRT_START)];
+ if ( !(l4e_get_flags(*pl4e) & _PAGE_PRESENT) )
+ {
+ l3_pgentry_t *l3t = alloc_xen_pagetable();
+
+ BUG_ON(!l3t);
+
+ clear_page(l3t);
+ *pl4e = l4e_from_paddr(virt_to_maddr(l3t), __PAGE_HYPERVISOR_RW);
+ }
+ else
+ l4e_add_flags(*pl4e, _PAGE_NX_BIT);
+
/* Mark all of direct map NX if hardware supports it. */
if ( !cpu_has_nx )
return;
--
2.1.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |