Handle pmap_enter() on already promoted mappings for ARMv6/v7

Attempt to demote the superpage if trying to pmap_enter() on
one. Panic only when the particular superpage should
no longer exist for that pmap and address.
This commit is contained in:
Zbigniew Bodek 2014-02-15 13:27:45 +00:00
parent 6720dd234f
commit bccb7a02b5
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=261922

View File

@ -2973,8 +2973,10 @@ pmap_enter_locked(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m,
}
pl1pd = &pmap->pm_l1->l1_kva[L1_IDX(va)];
if ((*pl1pd & L1_TYPE_MASK) == L1_S_PROTO)
panic("pmap_enter_locked: attempt pmap_enter_on 1MB page");
if ((va < VM_MAXUSER_ADDRESS) &&
(*pl1pd & L1_TYPE_MASK) == L1_S_PROTO) {
(void)pmap_demote_section(pmap, va);
}
user = 0;
/*
@ -3014,6 +3016,10 @@ pmap_enter_locked(pmap_t pmap, vm_offset_t va, vm_prot_t access, vm_page_t m,
}
}
pl1pd = &pmap->pm_l1->l1_kva[L1_IDX(va)];
if ((*pl1pd & L1_TYPE_MASK) == L1_S_PROTO)
panic("pmap_enter: attempt to enter on 1MB page, va: %#x", va);
ptep = &l2b->l2b_kva[l2pte_index(va)];
opte = *ptep;