Lines Matching refs:pte

142 #include <machine/pte.h>
247 static int moea_pte_insert(u_int, struct pte *);
256 static struct pte *moea_pvo_to_pte(const struct pvo_entry *, int);
513 moea_pte_compare(const struct pte *pt, const struct pte *pvo_pt)
522 moea_pte_match(struct pte *pt, u_int sr, vm_offset_t va, int which)
530 moea_pte_create(struct pte *pt, u_int sr, vm_offset_t va, u_int pte_lo)
537 * set when the real pte is set in memory.
547 moea_pte_synch(struct pte *pt, struct pte *pvo_pt)
555 moea_pte_clear(struct pte *pt, vm_offset_t va, int ptebit)
568 moea_pte_set(struct pte *pt, struct pte *pvo_pt)
587 moea_pte_unset(struct pte *pt, struct pte *pvo_pt, vm_offset_t va)
599 * Invalidate the pte.
613 moea_pte_change(struct pte *pt, struct pte *pvo_pt, vm_offset_t va)
1259 pa = (pvo->pvo_pte.pte.pte_lo & PTE_RPGN) | (va & ADDR_POFF);
1281 if (pvo != NULL && (pvo->pvo_pte.pte.pte_hi & PTE_VALID) &&
1282 ((pvo->pvo_pte.pte.pte_lo & PTE_PP) == PTE_RW ||
1284 if (vm_page_pa_tryrelock(pmap, pvo->pvo_pte.pte.pte_lo & PTE_RPGN, &pa))
1286 m = PHYS_TO_VM_PAGE(pvo->pvo_pte.pte.pte_lo & PTE_RPGN);
1350 rv = pvo == NULL || (pvo->pvo_pte.pte.pte_hi & PTE_VALID) == 0;
1384 struct pte *pt;
1405 if ((pvo->pvo_pte.pte.pte_lo & PTE_PP) != PTE_BR) {
1407 pvo->pvo_pte.pte.pte_lo &= ~PTE_PP;
1408 pvo->pvo_pte.pte.pte_lo |= PTE_BR;
1410 moea_pte_synch(pt, &pvo->pvo_pte.pte);
1411 lo |= pvo->pvo_pte.pte.pte_lo;
1412 pvo->pvo_pte.pte.pte_lo &= ~PTE_CHG;
1413 moea_pte_change(pt, &pvo->pvo_pte.pte,
1461 struct pte *pt;
1478 pvo->pvo_pte.pte.pte_lo &= ~PTE_WIMG;
1479 pvo->pvo_pte.pte.pte_lo |= lo;
1481 moea_pte_change(pt, &pvo->pvo_pte.pte,
1548 pa = (pvo->pvo_pte.pte.pte_lo & PTE_RPGN) | (va & ADDR_POFF);
1732 struct pte *pt;
1757 pvo->pvo_pte.pte.pte_lo &= ~PTE_PP;
1758 pvo->pvo_pte.pte.pte_lo |= PTE_BR;
1761 * If the PVO is in the page table, update that pte as well.
1764 moea_pte_change(pt, &pvo->pvo_pte.pte, pvo->pvo_vaddr);
1847 * will reflect changes in pte's back to the vm_page.
1952 if ((pvo->pvo_pte.pte.pte_lo & PTE_RPGN) == pa &&
1953 (pvo->pvo_pte.pte.pte_lo & PTE_PP) ==
2010 moea_pte_create(&pvo->pvo_pte.pte, sr, va, pa | pte_lo);
2029 i = moea_pte_insert(ptegidx, &pvo->pvo_pte.pte);
2045 struct pte *pt;
2048 * If there is an active pte entry, we need to deactivate it (and
2053 moea_pte_unset(pt, &pvo->pvo_pte.pte, pvo->pvo_vaddr);
2073 pg = PHYS_TO_VM_PAGE(pvo->pvo_pte.pte.pte_lo & PTE_RPGN);
2075 moea_attr_save(pg, pvo->pvo_pte.pte.pte_lo &
2104 * We can find the actual pte entry without searching by grabbing
2109 if (pvo->pvo_pte.pte.pte_hi & PTE_HID)
2139 static struct pte *
2142 struct pte *pt;
2159 if ((pvo->pvo_pte.pte.pte_hi & PTE_VALID) && !PVO_PTEGIDX_ISSET(pvo)) {
2160 panic("moea_pvo_to_pte: pvo %p has valid pte in pvo but no "
2161 "valid pte index", pvo);
2164 if ((pvo->pvo_pte.pte.pte_hi & PTE_VALID) == 0 && PVO_PTEGIDX_ISSET(pvo)) {
2165 panic("moea_pvo_to_pte: pvo %p has valid pte index in pvo "
2166 "pvo but no valid pte", pvo);
2169 if ((pt->pte_hi ^ (pvo->pvo_pte.pte.pte_hi & ~PTE_VALID)) == PTE_VALID) {
2170 if ((pvo->pvo_pte.pte.pte_hi & PTE_VALID) == 0) {
2171 panic("moea_pvo_to_pte: pvo %p has valid pte in "
2175 if (((pt->pte_lo ^ pvo->pvo_pte.pte.pte_lo) & ~(PTE_CHG|PTE_REF))
2177 panic("moea_pvo_to_pte: pvo %p pte does not match "
2178 "pte %p in moea_pteg_table", pvo, pt);
2185 if (pvo->pvo_pte.pte.pte_hi & PTE_VALID) {
2186 panic("moea_pvo_to_pte: pvo %p has invalid pte %p in "
2187 "moea_pteg_table but valid in pvo: %8x, %8x", pvo, pt, pvo->pvo_pte.pte.pte_hi, pt->pte_hi);
2195 * XXX: THIS STUFF SHOULD BE IN pte.c?
2205 struct pte *pt;
2229 moea_pte_match(&pvo->pvo_pte.pte, sr, addr,
2230 pvo->pvo_pte.pte.pte_hi & PTE_HID)) {
2235 j = moea_pte_insert(ptegidx, &pvo->pvo_pte.pte);
2255 moea_pte_compare(pt, &pvo->pvo_pte.pte)) {
2269 panic("moea_pte_spill: victim p-pte (%p) has no pvo"
2282 if (moea_pte_compare(pt, &pvo->pvo_pte.pte)) {
2289 panic("moea_pte_spill: victim s-pte (%p) has no pvo"
2298 source_pvo->pvo_pte.pte.pte_hi &= ~PTE_HID;
2300 moea_pte_unset(pt, &victim_pvo->pvo_pte.pte, victim_pvo->pvo_vaddr);
2301 moea_pte_set(pt, &source_pvo->pvo_pte.pte);
2314 struct pte *pt;
2321 if (!(pvo_walk->pvo_pte.pte.pte_hi & PTE_VALID))
2340 moea_pte_insert(u_int ptegidx, struct pte *pvo_pt)
2342 struct pte *pt;
2402 if (pt->pte_hi != victim_pvo->pvo_pte.pte.pte_hi)
2403 panic("Victim PVO doesn't match PTE! PVO: %8x, PTE: %8x", victim_pvo->pvo_pte.pte.pte_hi, pt->pte_hi);
2408 moea_pte_unset(pt, &victim_pvo->pvo_pte.pte, victim_pvo->pvo_vaddr);
2420 struct pte *pt;
2432 if (pvo->pvo_pte.pte.pte_lo & ptebit) {
2453 moea_pte_synch(pt, &pvo->pvo_pte.pte);
2455 if (pvo->pvo_pte.pte.pte_lo & ptebit) {
2470 struct pte *pt;
2490 * valid pte clear the ptebit from the valid pte.
2496 moea_pte_synch(pt, &pvo->pvo_pte.pte);
2497 if (pvo->pvo_pte.pte.pte_lo & ptebit) {
2503 pvo->pvo_pte.pte.pte_lo &= ~ptebit;
2645 pa = (pvo->pvo_pte.pte.pte_lo & PTE_RPGN) |
2704 if (pvo != NULL && (pvo->pvo_pte.pte.pte_hi & PTE_VALID))
2719 !(pvo->pvo_pte.pte.pte_hi & PTE_VALID))