mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 02:30:03 +01:00
x86/PV: assert page state in mark_pv_pt_pages_rdonly()
About every time I look at dom0_construct_pv()'s "calculation" of nr_pt_pages I question (myself) whether the result is precise or merely an upper bound. I think it is meant to be precise, but I think we would be better off having some checking in place. Hence add ASSERT()s to verify that - all pages have a valid L1...Ln (currently L4) page table type and - no other bits are set, in particular the type refcount is still zero. Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Andrew Cooper <andrew.cooper3@citirx.com>
This commit is contained in:
1 parent
4c0a199914
commit
6b1ca51b1a
1 file changed
+10
@@ -59,6 +59,16 @@ static __init void mark_pv_pt_pages_rdonly(struct domain *d,
|
||||
l1e_remove_flags(*pl1e, _PAGE_RW);
|
||||
page = mfn_to_page(l1e_get_mfn(*pl1e));
|
||||
|
||||
/*
|
||||
* Verify that
|
||||
* - all pages have a valid L1...Ln page table type and
|
||||
* - no other bits are set, in particular the type refcount is still
|
||||
* zero.
|
||||
*/
|
||||
ASSERT((page->u.inuse.type_info & PGT_type_mask) >= PGT_l1_page_table);
|
||||
ASSERT((page->u.inuse.type_info & PGT_type_mask) <= PGT_root_page_table);
|
||||
ASSERT(!(page->u.inuse.type_info & ~PGT_type_mask));
|
||||
|
||||
/* Read-only mapping + PGC_allocated + page-table page. */
|
||||
page->count_info = PGC_allocated | 3;
|
||||
page->u.inuse.type_info |= PGT_validated | 1;
|
||||
|
||||