Lines Matching full:pte

147 #include <machine/pte.h>
162 #define PVO_PADDR(pvo) ((pvo)->pvo_pte.pte.pte_lo & PTE_RPGN)
251 * PTE calls.
253 static int moea_pte_insert(u_int, struct pte *);
262 static struct pte *moea_pvo_to_pte(const struct pvo_entry *, int);
527 moea_pte_compare(const struct pte *pt, const struct pte *pvo_pt) in moea_pte_compare()
536 moea_pte_match(struct pte *pt, u_int sr, vm_offset_t va, int which) in moea_pte_match()
544 moea_pte_create(struct pte *pt, u_int sr, vm_offset_t va, u_int pte_lo) in moea_pte_create()
550 * Construct a PTE. Default to IMB initially. Valid bit only gets in moea_pte_create()
551 * set when the real pte is set in memory. in moea_pte_create()
561 moea_pte_synch(struct pte *pt, struct pte *pvo_pt) in moea_pte_synch()
569 moea_pte_clear(struct pte *pt, vm_offset_t va, int ptebit) in moea_pte_clear()
582 moea_pte_set(struct pte *pt, struct pte *pvo_pt) in moea_pte_set()
589 * Update the PTE as defined in section 7.6.3.1. in moea_pte_set()
601 moea_pte_unset(struct pte *pt, struct pte *pvo_pt, vm_offset_t va) in moea_pte_unset()
613 * Invalidate the pte. in moea_pte_unset()
627 moea_pte_change(struct pte *pt, struct pte *pvo_pt, vm_offset_t va) in moea_pte_change()
631 * Invalidate the PTE in moea_pte_change()
1304 if (pvo != NULL && (pvo->pvo_pte.pte.pte_hi & PTE_VALID) && in moea_extract_and_hold()
1305 ((pvo->pvo_pte.pte.pte_lo & PTE_PP) == PTE_RW || in moea_extract_and_hold()
1369 rv = pvo == NULL || (pvo->pvo_pte.pte.pte_hi & PTE_VALID) == 0; in moea_is_prefaultable()
1396 struct pte *pt; in moea_remove_write()
1412 if ((pvo->pvo_pte.pte.pte_lo & PTE_PP) != PTE_BR) { in moea_remove_write()
1414 pvo->pvo_pte.pte.pte_lo &= ~PTE_PP; in moea_remove_write()
1415 pvo->pvo_pte.pte.pte_lo |= PTE_BR; in moea_remove_write()
1417 moea_pte_synch(pt, &pvo->pvo_pte.pte); in moea_remove_write()
1418 lo |= pvo->pvo_pte.pte.pte_lo; in moea_remove_write()
1419 pvo->pvo_pte.pte.pte_lo &= ~PTE_CHG; in moea_remove_write()
1420 moea_pte_change(pt, &pvo->pvo_pte.pte, in moea_remove_write()
1468 struct pte *pt; in moea_page_set_memattr()
1488 pvo->pvo_pte.pte.pte_lo &= ~PTE_WIMG; in moea_page_set_memattr()
1489 pvo->pvo_pte.pte.pte_lo |= lo; in moea_page_set_memattr()
1491 moea_pte_change(pt, &pvo->pvo_pte.pte, in moea_page_set_memattr()
1804 struct pte *pt; in moea_protect()
1822 * Grab the PTE pointer before we diddle with the cached PTE in moea_protect()
1829 pvo->pvo_pte.pte.pte_lo &= ~PTE_PP; in moea_protect()
1830 pvo->pvo_pte.pte.pte_lo |= PTE_BR; in moea_protect()
1833 * If the PVO is in the page table, update that pte as well. in moea_protect()
1836 moea_pte_change(pt, &pvo->pvo_pte.pte, pvo->pvo_vaddr); in moea_protect()
1919 * will reflect changes in pte's back to the vm_page.
2055 * Compute the PTE Group index. in moea_pvo_enter()
2069 (pvo->pvo_pte.pte.pte_lo & PTE_PP) == in moea_pvo_enter()
2072 * The PTE is not changing. Instead, this may in moea_pvo_enter()
2126 moea_pte_create(&pvo->pvo_pte.pte, sr, va, pa | pte_lo); in moea_pvo_enter()
2145 i = moea_pte_insert(ptegidx, &pvo->pvo_pte.pte); in moea_pvo_enter()
2146 KASSERT(i < 8, ("Invalid PTE index")); in moea_pvo_enter()
2161 struct pte *pt; in moea_pvo_remove()
2164 * If there is an active pte entry, we need to deactivate it (and in moea_pvo_remove()
2169 moea_pte_unset(pt, &pvo->pvo_pte.pte, pvo->pvo_vaddr); in moea_pvo_remove()
2198 moea_attr_save(pg, pvo->pvo_pte.pte.pte_lo & in moea_pvo_remove()
2223 * We can find the actual pte entry without searching by grabbing in moea_pvo_pte_index()
2228 if (pvo->pvo_pte.pte.pte_hi & PTE_HID) in moea_pvo_pte_index()
2258 static struct pte *
2261 struct pte *pt; in moea_pvo_to_pte()
2278 if ((pvo->pvo_pte.pte.pte_hi & PTE_VALID) && !PVO_PTEGIDX_ISSET(pvo)) { in moea_pvo_to_pte()
2279 panic("moea_pvo_to_pte: pvo %p has valid pte in pvo but no " in moea_pvo_to_pte()
2280 "valid pte index", pvo); in moea_pvo_to_pte()
2283 if ((pvo->pvo_pte.pte.pte_hi & PTE_VALID) == 0 && PVO_PTEGIDX_ISSET(pvo)) { in moea_pvo_to_pte()
2284 panic("moea_pvo_to_pte: pvo %p has valid pte index in pvo " in moea_pvo_to_pte()
2285 "pvo but no valid pte", pvo); in moea_pvo_to_pte()
2288 if ((pt->pte_hi ^ (pvo->pvo_pte.pte.pte_hi & ~PTE_VALID)) == PTE_VALID) { in moea_pvo_to_pte()
2289 if ((pvo->pvo_pte.pte.pte_hi & PTE_VALID) == 0) { in moea_pvo_to_pte()
2290 panic("moea_pvo_to_pte: pvo %p has valid pte in " in moea_pvo_to_pte()
2294 if (((pt->pte_lo ^ pvo->pvo_pte.pte.pte_lo) & ~(PTE_CHG|PTE_REF)) in moea_pvo_to_pte()
2296 panic("moea_pvo_to_pte: pvo %p pte does not match " in moea_pvo_to_pte()
2297 "pte %p in moea_pteg_table", pvo, pt); in moea_pvo_to_pte()
2304 if (pvo->pvo_pte.pte.pte_hi & PTE_VALID) { in moea_pvo_to_pte()
2305 panic("moea_pvo_to_pte: pvo %p has invalid pte %p in " in moea_pvo_to_pte()
2306 "moea_pteg_table but valid in pvo: %8x, %8x", pvo, pt, pvo->pvo_pte.pte.pte_hi, pt->pte_hi); in moea_pvo_to_pte()
2314 * XXX: THIS STUFF SHOULD BE IN pte.c?
2324 struct pte *pt; in moea_pte_spill()
2348 moea_pte_match(&pvo->pvo_pte.pte, sr, addr, in moea_pte_spill()
2349 pvo->pvo_pte.pte.pte_hi & PTE_HID)) { in moea_pte_spill()
2352 * The PTE is now valid, so we know it's active. in moea_pte_spill()
2354 j = moea_pte_insert(ptegidx, &pvo->pvo_pte.pte); in moea_pte_spill()
2371 * so save the R & C bits of the PTE. in moea_pte_spill()
2374 moea_pte_compare(pt, &pvo->pvo_pte.pte)) { in moea_pte_spill()
2388 panic("moea_pte_spill: victim p-pte (%p) has no pvo" in moea_pte_spill()
2392 * If this is a secondary PTE, we need to search it's primary in moea_pte_spill()
2399 * replacing so save the R & C bits of the PTE. in moea_pte_spill()
2401 if (moea_pte_compare(pt, &pvo->pvo_pte.pte)) { in moea_pte_spill()
2408 panic("moea_pte_spill: victim s-pte (%p) has no pvo" in moea_pte_spill()
2417 source_pvo->pvo_pte.pte.pte_hi &= ~PTE_HID; in moea_pte_spill()
2419 moea_pte_unset(pt, &victim_pvo->pvo_pte.pte, victim_pvo->pvo_vaddr); in moea_pte_spill()
2420 moea_pte_set(pt, &source_pvo->pvo_pte.pte); in moea_pte_spill()
2433 struct pte *pt; in moea_pte_spillable_ident()
2440 if (!(pvo_walk->pvo_pte.pte.pte_hi & PTE_VALID)) in moea_pte_spillable_ident()
2459 moea_pte_insert(u_int ptegidx, struct pte *pvo_pt) in moea_pte_insert()
2461 struct pte *pt; in moea_pte_insert()
2493 /* Try again, but this time try to force a PTE out. */ in moea_pte_insert()
2515 * Synchronize the sacrifice PTE with its PVO, then mark both in moea_pte_insert()
2521 if (pt->pte_hi != victim_pvo->pvo_pte.pte.pte_hi) in moea_pte_insert()
2522 …panic("Victim PVO doesn't match PTE! PVO: %8x, PTE: %8x", victim_pvo->pvo_pte.pte.pte_hi, pt->pte_… in moea_pte_insert()
2525 * Set the new PTE. in moea_pte_insert()
2527 moea_pte_unset(pt, &victim_pvo->pvo_pte.pte, victim_pvo->pvo_vaddr); in moea_pte_insert()
2539 struct pte *pt; in moea_query_bit()
2550 if (pvo->pvo_pte.pte.pte_lo & ptebit) { in moea_query_bit()
2564 * See if this pvo has a valid PTE. if so, fetch the in moea_query_bit()
2565 * REF/CHG bits from the valid PTE. If the appropriate in moea_query_bit()
2570 moea_pte_synch(pt, &pvo->pvo_pte.pte); in moea_query_bit()
2572 if (pvo->pvo_pte.pte.pte_lo & ptebit) { in moea_query_bit()
2587 struct pte *pt; in moea_clear_bit()
2607 * valid pte clear the ptebit from the valid pte. in moea_clear_bit()
2613 moea_pte_synch(pt, &pvo->pvo_pte.pte); in moea_clear_bit()
2614 if (pvo->pvo_pte.pte.pte_lo & ptebit) { in moea_clear_bit()
2620 pvo->pvo_pte.pte.pte_lo &= ~ptebit; in moea_clear_bit()
2822 if (pvo != NULL && (pvo->pvo_pte.pte.pte_hi & PTE_VALID)) in moea_scan_init()
2837 !(pvo->pvo_pte.pte.pte_hi & PTE_VALID)) in moea_scan_init()