|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging-4.12] x86/mm: correctly initialise M2P entries on boot
commit 04a2fe9c507d7f15190378574ced071888ff4b7b
Author: Igor Druzhinin <igor.druzhinin@xxxxxxxxxx>
AuthorDate: Mon Sep 23 14:23:27 2019 +0200
Commit: Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon Sep 23 14:23:27 2019 +0200
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@xxxxxxxxxx>
Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
master commit: 6c093931a765803cfc7b0df466ee032760cc8020
master date: 2019-08-27 13:40:42 +0100
---
xen/arch/x86/x86_64/mm.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/xen/arch/x86/x86_64/mm.c b/xen/arch/x86/x86_64/mm.c
index 899b883b2d..cda9fbba00 100644
--- a/xen/arch/x86/x86_64/mm.c
+++ b/xen/arch/x86/x86_64/mm.c
@@ -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));
}
--
generated by git-patchbot for /home/xen/git/xen.git#staging-4.12
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |