Changeset 9ea6cc5 in mainline
- Timestamp:
- 2006-05-19T13:46:21Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 1068f6a
- Parents:
- 5ca586a1
- Location:
- arch/ppc32
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ppc32/include/asm.h
r5ca586a1 r9ea6cc5 141 141 void cpu_halt(void); 142 142 void asm_delay_loop(__u32 t); 143 void invalidate_bat(void);144 143 145 144 extern void userspace_asm(__address uspace_uarg, __address stack, __address entry); -
arch/ppc32/src/asm.S
r5ca586a1 r9ea6cc5 34 34 .global iret 35 35 .global iret_syscall 36 .global invalidate_bat37 36 .global memsetb 38 37 .global memcpy … … 195 194 rfi 196 195 197 invalidate_bat:198 199 # invalidate block address translation registers200 201 li r14, 0202 203 mtspr ibat0u, r14204 mtspr ibat0l, r14205 206 mtspr ibat1u, r14207 mtspr ibat1l, r14208 209 mtspr ibat2u, r14210 mtspr ibat2l, r14211 212 mtspr ibat3u, r14213 mtspr ibat3l, r14214 215 mtspr dbat0u, r14216 mtspr dbat0l, r14217 218 mtspr dbat1u, r14219 mtspr dbat1l, r14220 221 mtspr dbat2u, r14222 mtspr dbat2l, r14223 224 mtspr dbat3u, r14225 mtspr dbat3l, r14226 227 blr228 229 196 memsetb: 230 197 rlwimi r5, r5, 8, 16, 23 -
arch/ppc32/src/mm/page.c
r5ca586a1 r9ea6cc5 50 50 * 51 51 * @param badvaddr Faulting virtual address. 52 * @param istate Pointer to interrupted state.53 * @param pfrc Pointer to variable where as_page_fault() return code will be stored.52 * @param istate Pointer to interrupted state. 53 * @param pfrc Pointer to variable where as_page_fault() return code will be stored. 54 54 * @return PTE on success, NULL otherwise. 55 55 * … … 115 115 } 116 116 117 117 118 static void pht_insert(const __address vaddr, const pfn_t pfn) 118 119 { … … 131 132 132 133 __u32 i; 134 bool found = false; 133 135 /* Find unused PTE in PTEG */ 134 136 for (i = 0; i < 8; i++) { 135 if (!phte[hash + i].v) 137 if (!phte[hash + i].v) { 138 found = true; 136 139 break; 137 } 138 139 // TODO: Check access/change bits, secondary hash 140 141 if (i == 8) 142 i = page % 8; 140 } 141 } 142 143 if (!found) { 144 /* Secondary hash (not) */ 145 hash = ~hash; 146 147 /* Find unused PTE in PTEG */ 148 for (i = 0; i < 8; i++) { 149 if (!phte[hash + i].v) { 150 found = true; 151 break; 152 } 153 } 154 155 if (!found) { 156 // TODO: A/C precedence groups 157 i = page % 8; 158 } 159 } 143 160 144 161 phte[hash + i].v = 1; … … 184 201 if (!pte) { 185 202 switch (pfcr) { 186 case AS_PF_FAULT: 187 goto fail; 188 break; 189 case AS_PF_DEFER: 190 /* 191 * The page fault came during copy_from_uspace() 192 * or copy_to_uspace(). 193 */ 194 page_table_unlock(AS, true); 195 return; 196 default: 197 panic("Unexpected pfrc (%d)\n", pfcr); 198 break; 203 case AS_PF_FAULT: 204 goto fail; 205 break; 206 case AS_PF_DEFER: 207 /* 208 * The page fault came during copy_from_uspace() 209 * or copy_to_uspace(). 210 */ 211 page_table_unlock(AS, true); 212 return; 213 default: 214 panic("Unexpected pfrc (%d)\n", pfcr); 199 215 } 200 216 } … … 215 231 { 216 232 memsetb((__address) phte, 1 << PHT_BITS, 0); 217 218 /* Insert global kernel mapping */219 220 __address cur;221 for (cur = 0; cur < last_frame; cur += FRAME_SIZE) {222 pte_t *pte = page_mapping_find(AS_KERNEL, PA2KA(cur));223 if ((pte) && (pte->p) && (pte->g))224 pht_insert(PA2KA(cur), pte->pfn);225 }226 233 } 227 234 … … 257 264 : "r" ((__address) physical_phte) 258 265 ); 259 260 /* Invalidate block address translation registers, 261 thus remove the temporary mapping */ 262 // invalidate_bat(); 263 } 264 } 266 } 267 }
Note:
See TracChangeset
for help on using the changeset viewer.