mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/mm: correctly initialise M2P entries on boot
Since guest resource management work it's now possible to have a page assigned to a domain without a valid M2P entry. Some paths in the code rely on the fact a GFN returned from mfn_to_gfn() for such a page is not valid as well, i.e. see arch_iommu_populate_page_table(). For systems without 512GB contiguous RAM M2P entries were already correctly initialised on boot with INVALID_M2P_ENTRY (~0UL) but on systems where M2P could be covered by a single 1GB page directory 0x77 poison was used instead. That eventually resulted in a crash during IOMMU construction on systems without shared PTs enabled. While here fix up compat M2P entries as well. Signed-off-by: Igor Druzhinin <igor.druzhinin@citrix.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
This commit is contained in:
1 parent
7ef63cd38b
commit
6c093931a7
1 file changed
+4
-3
@@ -574,8 +574,9 @@ void __init paging_init(void)
|
||||
page_to_mfn(l1_pg),
|
||||
1UL << (2 * PAGETABLE_ORDER),
|
||||
PAGE_HYPERVISOR);
|
||||
/* Fill with INVALID_M2P_ENTRY. */
|
||||
memset((void *)(RDWR_MPT_VIRT_START + (i << L2_PAGETABLE_SHIFT)),
|
||||
0x77, 1UL << L3_PAGETABLE_SHIFT);
|
||||
0xFF, 1UL << L3_PAGETABLE_SHIFT);
|
||||
|
||||
ASSERT(!l2_table_offset(va));
|
||||
/* NB. Cannot be GLOBAL: guest user mode should not see it. */
|
||||
@@ -666,10 +667,10 @@ void __init paging_init(void)
|
||||
page_to_mfn(l1_pg),
|
||||
1UL << PAGETABLE_ORDER,
|
||||
PAGE_HYPERVISOR);
|
||||
/* Fill with INVALID_M2P_ENTRY. */
|
||||
memset((void *)(RDWR_COMPAT_MPT_VIRT_START +
|
||||
(i << L2_PAGETABLE_SHIFT)),
|
||||
0x55,
|
||||
1UL << L2_PAGETABLE_SHIFT);
|
||||
0xFF, 1UL << L2_PAGETABLE_SHIFT);
|
||||
/* NB. Cannot be GLOBAL as the ptes get copied into per-VM space. */
|
||||
l2e_write(l2_ro_mpt, l2e_from_page(l1_pg, _PAGE_PSE|_PAGE_PRESENT));
|
||||
}
|
||||
|
||||