- Timestamp:
- 2006-01-13T13:02:45Z (20 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f9425006
- Parents:
- 0369911
- Location:
- arch
- Files:
-
- 8 edited
- 7 moved
Legend:
- Unmodified
- Added
- Removed
-
arch/amd64/include/mm/as.h
r0369911 r20d50a1 27 27 */ 28 28 29 #ifndef __amd64_ VM_H__30 #define __amd64_ VM_H__29 #ifndef __amd64_AS_H__ 30 #define __amd64_AS_H__ 31 31 32 32 #include <arch/types.h> … … 41 41 #define UDATA_ADDRESS_ARCH 0x21000000 42 42 43 #define vm_install_arch(vm)43 #define as_install_arch(as) 44 44 45 45 #endif -
arch/amd64/src/interrupt.c
r0369911 r20d50a1 36 36 #include <arch/asm.h> 37 37 #include <mm/tlb.h> 38 #include <mm/as.h> 38 39 #include <arch.h> 39 40 #include <symtab.h> … … 125 126 } 126 127 127 128 129 128 void page_fault(int n, void *stack) 130 129 { 131 print_info_errcode(n,stack); 132 printf("Page fault address: %Q\n", read_cr2()); 133 panic("page fault\n"); 130 __address page; 131 132 page = read_cr2(); 133 if (!as_page_fault(page)) { 134 print_info_errcode(n,stack); 135 printf("Page fault address: %Q\n", page); 136 panic("page fault\n"); 137 } 134 138 } 135 139 -
arch/amd64/src/userspace.c
r0369911 r20d50a1 32 32 #include <arch.h> 33 33 #include <proc/thread.h> 34 #include <mm/ vm.h>34 #include <mm/as.h> 35 35 36 36 -
arch/ia32/include/mm/as.h
r0369911 r20d50a1 27 27 */ 28 28 29 #ifndef __ia32_ VM_H__30 #define __ia32_ VM_H__29 #ifndef __ia32_AS_H__ 30 #define __ia32_AS_H__ 31 31 32 32 #include <arch/types.h> … … 41 41 #define UDATA_ADDRESS_ARCH 0x21000000 42 42 43 #define vm_install_arch(vm)43 #define as_install_arch(as) 44 44 45 45 #endif -
arch/ia32/src/interrupt.c
r0369911 r20d50a1 36 36 #include <arch/asm.h> 37 37 #include <mm/tlb.h> 38 #include <mm/as.h> 38 39 #include <arch.h> 39 40 #include <symtab.h> … … 100 101 void page_fault(int n, void *stack) 101 102 { 102 PRINT_INFO_ERRCODE(stack); 103 printf("page fault address: %X\n", read_cr2()); 104 panic("page fault\n"); 103 __address page; 104 105 page = read_cr2(); 106 if (!as_page_fault(page)) { 107 PRINT_INFO_ERRCODE(stack); 108 printf("page fault address: %X\n", page); 109 panic("page fault\n"); 110 } 105 111 } 106 112 -
arch/ia32/src/mm/frame.c
r0369911 r20d50a1 29 29 #include <mm/frame.h> 30 30 #include <arch/mm/frame.h> 31 #include <mm/ vm.h>31 #include <mm/as.h> 32 32 #include <config.h> 33 33 #include <arch/boot/boot.h> -
arch/ia32/src/userspace.c
r0369911 r20d50a1 32 32 #include <arch.h> 33 33 #include <proc/thread.h> 34 #include <mm/ vm.h>34 #include <mm/as.h> 35 35 36 36 … … 48 48 __asm__ volatile ( 49 49 /* CLNT */ 50 "pushfl ;"51 "pop %%eax ;"52 "and $0x FFFFBFFF,%%eax;"53 "push %%eax ;"54 "popfl ;"50 "pushfl\n" 51 "pop %%eax\n" 52 "and $0xffffbfff,%%eax\n" 53 "push %%eax\n" 54 "popfl\n" 55 55 56 56 "pushl %0\n" … … 65 65 66 66 /* Unreachable */ 67 for(;;); 67 for(;;) 68 ; 68 69 } -
arch/ia64/include/mm/as.h
r0369911 r20d50a1 27 27 */ 28 28 29 #ifndef __ia64_ VM_H__30 #define __ia64_ VM_H__29 #ifndef __ia64_AS_H__ 30 #define __ia64_AS_H__ 31 31 32 32 #include <arch/types.h> … … 41 41 #define UDATA_ADDRESS_ARCH 0x0000000001001000 42 42 43 #define vm_install_arch(vm)43 #define as_install_arch(as) 44 44 45 45 #endif -
arch/mips32/Makefile.inc
r0369911 r20d50a1 113 113 arch/$(ARCH)/src/mm/page.c \ 114 114 arch/$(ARCH)/src/mm/tlb.c \ 115 arch/$(ARCH)/src/mm/ vm.c \115 arch/$(ARCH)/src/mm/as.c \ 116 116 arch/$(ARCH)/src/fpu_context.c \ 117 117 arch/$(ARCH)/src/drivers/arc.c \ -
arch/mips32/include/mm/as.h
r0369911 r20d50a1 27 27 */ 28 28 29 #ifndef __mips32_ VM_H__30 #define __mips32_ VM_H__29 #ifndef __mips32_AS_H__ 30 #define __mips32_AS_H__ 31 31 32 32 #include <arch/types.h> … … 42 42 #define UDATA_ADDRESS_ARCH 0x01001000 43 43 44 extern void vm_install_arch(vm_t *vm);45 46 44 #endif -
arch/mips32/src/mips32.c
r0369911 r20d50a1 32 32 #include <arch/exception.h> 33 33 #include <arch/asm.h> 34 #include <mm/ vm.h>34 #include <mm/as.h> 35 35 36 36 #include <userspace.h> -
arch/mips32/src/mm/as.c
r0369911 r20d50a1 27 27 */ 28 28 29 #include <arch/mm/ vm.h>29 #include <arch/mm/as.h> 30 30 #include <arch/mm/tlb.h> 31 #include <mm/vm.h> 31 #include <mm/tlb.h> 32 #include <mm/as.h> 32 33 #include <arch/cp0.h> 33 34 #include <arch.h> 34 35 35 /** Install ASID of the current VM36 /** Install address space. 36 37 * 37 * Install ASID of the current VM.38 * Install ASID and if necessary, purge TLB. 38 39 * 39 * @param vm VMstructure.40 * @param as Address space structure. 40 41 */ 41 void vm_install_arch(vm_t *vm)42 void as_install_arch(as_t *as) 42 43 { 43 44 entry_hi_t hi; 44 45 ipl_t ipl; 45 46 47 /* 48 * If necessary, purge TLB. 49 */ 50 tlb_invalidate_asid(as->asid); /* TODO: do it only if necessary */ 51 52 /* 53 * Install ASID. 54 */ 46 55 hi.value = cp0_entry_hi_read(); 47 56 48 57 ipl = interrupts_disable(); 49 spinlock_lock(& vm->lock);50 hi.asid = vm->asid;58 spinlock_lock(&as->lock); 59 hi.asid = as->asid; 51 60 cp0_entry_hi_write(hi.value); 52 spinlock_unlock(& vm->lock);61 spinlock_unlock(&as->lock); 53 62 interrupts_restore(ipl); 54 63 } -
arch/mips32/src/mm/tlb.c
r0369911 r20d50a1 31 31 #include <mm/tlb.h> 32 32 #include <mm/page.h> 33 #include <mm/ vm.h>33 #include <mm/as.h> 34 34 #include <arch/cp0.h> 35 35 #include <panic.h> … … 93 93 badvaddr = cp0_badvaddr_read(); 94 94 95 spinlock_lock(& VM->lock);95 spinlock_lock(&AS->lock); 96 96 97 97 pte = find_mapping_and_check(badvaddr); … … 104 104 pte->a = 1; 105 105 106 prepare_entry_hi(&hi, VM->asid, badvaddr);106 prepare_entry_hi(&hi, AS->asid, badvaddr); 107 107 prepare_entry_lo(&lo, pte->lo.g, pte->lo.v, pte->lo.d, pte->lo.c, pte->lo.pfn); 108 108 … … 122 122 tlbwr(); 123 123 124 spinlock_unlock(& VM->lock);124 spinlock_unlock(&AS->lock); 125 125 return; 126 126 127 127 fail: 128 spinlock_unlock(& VM->lock);128 spinlock_unlock(&AS->lock); 129 129 tlb_refill_fail(pstate); 130 130 } … … 155 155 index.value = cp0_index_read(); 156 156 157 spinlock_lock(& VM->lock);157 spinlock_lock(&AS->lock); 158 158 159 159 /* … … 191 191 tlbwi(); 192 192 193 spinlock_unlock(& VM->lock);193 spinlock_unlock(&AS->lock); 194 194 return; 195 195 196 196 fail: 197 spinlock_unlock(& VM->lock);197 spinlock_unlock(&AS->lock); 198 198 tlb_invalid_fail(pstate); 199 199 } … … 224 224 index.value = cp0_index_read(); 225 225 226 spinlock_lock(& VM->lock);226 spinlock_lock(&AS->lock); 227 227 228 228 /* … … 267 267 tlbwi(); 268 268 269 spinlock_unlock(& VM->lock);269 spinlock_unlock(&AS->lock); 270 270 return; 271 271 272 272 fail: 273 spinlock_unlock(& VM->lock);273 spinlock_unlock(&AS->lock); 274 274 tlb_modified_fail(pstate); 275 275 } … … 313 313 * 314 314 * Try to find PTE for faulting address. 315 * The VM->lock must be held on entry to this function.315 * The AS->lock must be held on entry to this function. 316 316 * 317 317 * @param badvaddr Faulting virtual address. … … 329 329 * Handler cannot succeed if the ASIDs don't match. 330 330 */ 331 if (hi.asid != VM->asid) {332 printf("EntryHi.asid=%d, VM->asid=%d\n", hi.asid, VM->asid);331 if (hi.asid != AS->asid) { 332 printf("EntryHi.asid=%d, AS->asid=%d\n", hi.asid, AS->asid); 333 333 return NULL; 334 334 } 335 335 336 /* 337 * Check if the mapping exists in page tables. 338 */ 339 pte = page_mapping_find(badvaddr, AS->asid, 0); 340 if (pte && pte->lo.v) { 341 /* 342 * Mapping found in page tables. 343 * Immediately succeed. 344 */ 345 return pte; 346 } else { 347 /* 348 * Mapping not found in page tables. 349 * Resort to higher-level page fault handler. 350 */ 351 if (as_page_fault(badvaddr)) { 352 /* 353 * The higher-level page fault handler succeeded, 354 * The mapping ought to be in place. 355 */ 356 pte = page_mapping_find(badvaddr, AS->asid, 0); 357 ASSERT(pte && pte->lo.v); 358 return pte; 359 } 360 } 361 336 362 /* 337 363 * Handler cannot succeed if badvaddr has no mapping. 338 364 */ 339 pte = page_mapping_find(badvaddr, VM->asid, 0);340 365 if (!pte) { 341 366 printf("No such mapping.\n"); -
arch/ppc32/include/mm/as.h
r0369911 r20d50a1 27 27 */ 28 28 29 #ifndef __ppc32_ VM_H__30 #define __ppc32_ VM_H__29 #ifndef __ppc32_AS_H__ 30 #define __ppc32_AS_H__ 31 31 32 32 #include <arch/types.h> … … 41 41 #define UDATA_ADDRESS_ARCH 0x21000000 42 42 43 #define vm_install_arch(vm)43 #define as_install_arch(as) 44 44 45 45 #endif -
arch/sparc64/include/mm/as.h
r0369911 r20d50a1 27 27 */ 28 28 29 #ifndef __sparc64_ VM_H__30 #define __sparc64_ VM_H__29 #ifndef __sparc64_AS_H__ 30 #define __sparc64_AS_H__ 31 31 32 32 #include <arch/types.h> … … 41 41 #define UDATA_ADDRESS_ARCH 0x8000000000000000 42 42 43 #define vm_install_arch(vm)43 #define as_install_arch(as) 44 44 45 45 #endif
Note:
See TracChangeset
for help on using the changeset viewer.