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:
parent
6720dd234f
commit
bccb7a02b5
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=261922
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user