Add KASSERTS in pmap_alloc_l3 to ensure we are not encountering superpages
when we don't yet expect them; Obtained from: ABT Systems Ltd MFC after: 1 month Sponsored by: The FreeBSD Foundation
This commit is contained in:
parent
2e5573e6de
commit
1d32c3222e
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=304596
@ -1537,6 +1537,9 @@ pmap_alloc_l3(pmap_t pmap, vm_offset_t va, struct rwlock **lockp)
|
||||
{
|
||||
vm_pindex_t ptepindex;
|
||||
pd_entry_t *pde, tpde;
|
||||
#ifdef INVARIANTS
|
||||
pt_entry_t *pte;
|
||||
#endif
|
||||
vm_page_t m;
|
||||
int lvl;
|
||||
|
||||
@ -1555,13 +1558,33 @@ pmap_alloc_l3(pmap_t pmap, vm_offset_t va, struct rwlock **lockp)
|
||||
* and activate it. If we get a level 2 pde it will point to a level 3
|
||||
* table.
|
||||
*/
|
||||
if (lvl == 2) {
|
||||
switch (lvl) {
|
||||
case -1:
|
||||
break;
|
||||
case 0:
|
||||
#ifdef INVARIANTS
|
||||
pte = pmap_l0_to_l1(pde, va);
|
||||
KASSERT(pmap_load(pte) == 0,
|
||||
("pmap_alloc_l3: TODO: l0 superpages"));
|
||||
#endif
|
||||
break;
|
||||
case 1:
|
||||
#ifdef INVARIANTS
|
||||
pte = pmap_l1_to_l2(pde, va);
|
||||
KASSERT(pmap_load(pte) == 0,
|
||||
("pmap_alloc_l3: TODO: l1 superpages"));
|
||||
#endif
|
||||
break;
|
||||
case 2:
|
||||
tpde = pmap_load(pde);
|
||||
if (tpde != 0) {
|
||||
m = PHYS_TO_VM_PAGE(tpde & ~ATTR_MASK);
|
||||
m->wire_count++;
|
||||
return (m);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
panic("pmap_alloc_l3: Invalid level %d", lvl);
|
||||
}
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user