Unbreak the vector_page == 0x00000000 case. Map the vector page L1PT into the

kernel domain for each pmap, as we don't update the page table when we're
switching to a kernel thread, but we do however update the DACR.
This commit is contained in:
cognet 2005-04-14 14:32:32 +00:00
parent 298230d722
commit c89d7c66d2

View File

@ -2276,7 +2276,7 @@ pmap_set_pcb_pagedir(pmap_t pm, struct pcb *pcb)
pcb->pcb_pl1vec = &pm->pm_l1->l1_kva[L1_IDX(vector_page)];
l2b = pmap_get_l2_bucket(pm, vector_page);
pcb->pcb_l1vec = l2b->l2b_phys | L1_C_PROTO |
L1_C_DOM(pm->pm_domain);
L1_C_DOM(pm->pm_domain) | L1_C_DOM(PMAP_DOMAIN_KERNEL);
} else
pcb->pcb_pl1vec = NULL;
}
@ -2731,7 +2731,7 @@ pmap_grow_l2_bucket(pmap_t pm, vm_offset_t va)
/* Distribute new L1 entry to all other L1s */
SLIST_FOREACH(l1, &l1_list, l1_link) {
pl1pd = &l1->l1_kva[L1_IDX(pmap_curmaxkvaddr)];
pl1pd = &l1->l1_kva[L1_IDX(va)];
*pl1pd = l2b->l2b_phys | L1_C_DOM(PMAP_DOMAIN_KERNEL) |
L1_C_PROTO;
PTE_SYNC(pl1pd);
@ -2919,6 +2919,8 @@ pmap_kremove(vm_offset_t va)
pt_entry_t *pte, opte;
l2b = pmap_get_l2_bucket(pmap_kernel(), va);
if (!l2b)
return;
KASSERT(l2b != NULL, ("No L2 Bucket"));
pte = &l2b->l2b_kva[l2pte_index(va)];
opte = *pte;