Changeset View
Changeset View
Standalone View
Standalone View
head/sys/powerpc/aim/moea64_native.c
Show First 20 Lines • Show All 640 Lines • ▼ Show 20 Lines | moea64_insert_to_pteg_native(struct lpte *pvo_pt, uintptr_t slotbase, | ||||
if (oldptehi & LPTE_VALID) { | if (oldptehi & LPTE_VALID) { | ||||
KASSERT(!(oldptehi & LPTE_WIRED), ("Unmapped wired entry")); | KASSERT(!(oldptehi & LPTE_WIRED), ("Unmapped wired entry")); | ||||
/* | /* | ||||
* Need to invalidate old entry completely: see | * Need to invalidate old entry completely: see | ||||
* "Modifying a Page Table Entry". Need to reconstruct | * "Modifying a Page Table Entry". Need to reconstruct | ||||
* the virtual address for the outgoing entry to do that. | * the virtual address for the outgoing entry to do that. | ||||
*/ | */ | ||||
if (oldptehi & LPTE_BIG) | va = oldptehi >> (ADDR_SR_SHFT - ADDR_API_SHFT64); | ||||
va = oldptehi >> moea64_large_page_shift; | |||||
else | |||||
va = oldptehi >> ADDR_PIDX_SHFT; | |||||
if (oldptehi & LPTE_HID) | if (oldptehi & LPTE_HID) | ||||
va = (((k >> 3) ^ moea64_pteg_mask) ^ va) & | va = (((k >> 3) ^ moea64_pteg_mask) ^ va) & | ||||
VSID_HASH_MASK; | (ADDR_PIDX >> ADDR_PIDX_SHFT); | ||||
else | else | ||||
va = ((k >> 3) ^ va) & VSID_HASH_MASK; | va = ((k >> 3) ^ va) & (ADDR_PIDX >> ADDR_PIDX_SHFT); | ||||
va |= (oldptehi & LPTE_AVPN_MASK) << | va |= (oldptehi & LPTE_AVPN_MASK) << | ||||
(ADDR_API_SHFT64 - ADDR_PIDX_SHFT); | (ADDR_API_SHFT64 - ADDR_PIDX_SHFT); | ||||
PTESYNC(); | PTESYNC(); | ||||
TLBIE(va); | TLBIE(va); | ||||
moea64_pte_valid--; | moea64_pte_valid--; | ||||
moea64_pte_overflow++; | moea64_pte_overflow++; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 89 Lines • Show Last 20 Lines |