Changeset 20d50a1 in mainline
- Timestamp:
- 2006-01-13T13:02:45Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f9425006
- Parents:
- 0369911
- Files:
-
- 1 added
- 1 deleted
- 20 edited
- 8 moved
Legend:
- Unmodified
- Added
- Removed
-
Makefile
r0369911 r20d50a1 118 118 generic/src/mm/page.c \ 119 119 generic/src/mm/tlb.c \ 120 generic/src/mm/ vm.c \120 generic/src/mm/as.c \ 121 121 generic/src/lib/func.c \ 122 122 generic/src/lib/list.c \ -
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 -
doc/mm
r0369911 r20d50a1 2 2 ================= 3 3 4 SPARTAN kernel deploys generic interface for 4-level page tables, 5 no matter what the real underlying hardware architecture is. 4 1. Virtual Address Translation 5 6 1.1 Hierarchical 4-level per address space page tables 7 8 SPARTAN kernel deploys generic interface for 4-level page tables 9 for these architectures: amd64, ia32, mips32 and ppc32. In this 10 setting, page tables are hierarchical and are not shared by 11 address spaces (i.e. one set of page tables per address space). 6 12 7 13 … … 51 57 left out. TLB-only architectures are to define custom format for software page 52 58 tables. 59 60 61 62 1.2 Single global page hash table 63 64 Generic page hash table interface is deployed on 64-bit architectures without 65 implied hardware support for hierarchical page tables, i.e. ia64 and sparc64. 66 There is only one global page hash table in the system shared by all address 67 spaces. -
generic/include/arch.h
r0369911 r20d50a1 40 40 #define THREAD THE->thread 41 41 #define TASK THE->task 42 #define VM THE->vm42 #define AS THE->as 43 43 #define PREEMPTION_DISABLED THE->preemption_disabled 44 44 … … 53 53 task_t *task; /**< Current task. */ 54 54 cpu_t *cpu; /**< Executing cpu. */ 55 vm_t *vm; /**< Current vm. */55 as_t *as; /**< Current address space. */ 56 56 }; 57 57 -
generic/include/mm/as.h
r0369911 r20d50a1 27 27 */ 28 28 29 #ifndef __ VM_H__30 #define __ VM_H__29 #ifndef __AS_H__ 30 #define __AS_H__ 31 31 32 32 #include <arch/mm/page.h> 33 #include <arch/mm/ vm.h>33 #include <arch/mm/as.h> 34 34 #include <arch/mm/asid.h> 35 35 #include <arch/types.h> … … 49 49 #define UDATA_ADDRESS UDATA_ADDRESS_ARCH 50 50 51 enum vm_type {52 VMA_TEXT = 1, VMA_DATA, VMA_STACK51 enum as_area_type { 52 AS_AREA_TEXT = 1, AS_AREA_DATA, AS_AREA_STACK 53 53 }; 54 54 55 /* 56 * Each vm_area_t structure describes one continuous area of virtual memory. 57 * In the future, it should not be difficult to support shared areas of vm. 55 /** Address space area structure. 56 * 57 * Each as_area_t structure describes one contiguous area of virtual memory. 58 * In the future, it should not be difficult to support shared areas. 58 59 */ 59 struct vm_area {60 struct as_area { 60 61 SPINLOCK_DECLARE(lock); 61 62 link_t link; 62 vm_type_t type;63 int size;64 __address address;65 __address *mapping;63 as_area_type_t type; 64 size_t size; /**< Size of this area. */ 65 __address base; /**< Base address of this area. */ 66 index_t *mapping; /**< Map of physical frame numbers mapped to virtual page numbers in this area. */ 66 67 }; 67 68 68 /* 69 * vm_t contains the list of vm_areas of userspace accessible 69 /** Address space structure. 70 * 71 * as_t contains the list of as_areas of userspace accessible 70 72 * pages for one or more tasks. Ranges of kernel memory pages are not 71 73 * supposed to figure in the list as they are shared by all tasks and 72 74 * set up during system initialization. 73 75 */ 74 struct vm{76 struct as { 75 77 SPINLOCK_DECLARE(lock); 76 link_t vm_area_head;78 link_t as_area_head; 77 79 pte_t *ptl0; 78 asid_t asid; 80 asid_t asid; /**< Address space identifier. */ 79 81 }; 80 82 81 extern vm_t * vm_create(pte_t *ptl0); 82 extern void vm_destroy(vm_t *m); 83 extern as_t * as_create(pte_t *ptl0); 84 extern as_area_t *as_area_create(as_t *as, as_area_type_t type, size_t size, __address base); 85 extern void as_area_load_mapping(as_area_t *a, index_t *pfn); 86 extern int as_page_fault(__address page); 87 extern void as_install(as_t *m); 83 88 84 extern vm_area_t *vm_area_create(vm_t *m, vm_type_t type, size_t size, __address addr); 85 extern void vm_area_destroy(vm_area_t *a); 86 87 extern void vm_area_map(vm_area_t *a, vm_t *m); 88 extern void vm_area_unmap(vm_area_t *a, vm_t *m); 89 90 extern void vm_install(vm_t *m); 91 extern void vm_uninstall(vm_t *m); 89 /* 90 * Each architecture should implement this function. 91 * Its main purpose is to do TLB purges according 92 * to architecture's requirements. Note that 93 * some architectures invalidate their TLB automatically 94 * on hardware address space switch (e.g. ia32 and 95 * amd64). 96 */ 97 #ifndef as_install_arch 98 extern void as_install_arch(as_t *as); 99 #endif /* !def as_install_arch */ 92 100 93 101 #endif -
generic/include/proc/task.h
r0369911 r20d50a1 34 34 #include <list.h> 35 35 36 /** Task structure. */ 36 37 struct task { 37 38 SPINLOCK_DECLARE(lock); 38 39 link_t th_head; /**< List of threads contained in this task. */ 39 40 link_t tasks_link; /**< Link to other tasks within the system. */ 40 vm_t *vm;41 as_t *as; /**< Address space. */ 41 42 }; 42 43 … … 45 46 46 47 extern void task_init(void); 47 extern task_t *task_create( vm_t *m);48 extern task_t *task_create(as_t *as); 48 49 49 50 #endif -
generic/include/typedefs.h
r0369911 r20d50a1 71 71 typedef struct region region_t; 72 72 73 typedef enum vm_type vm_type_t;74 typedef struct vm_area vm_area_t;75 typedef struct vm vm_t;73 typedef enum as_area_type as_area_type_t; 74 typedef struct as_area as_area_t; 75 typedef struct as as_t; 76 76 77 77 typedef struct link link_t; -
generic/src/main/kinit.c
r0369911 r20d50a1 40 40 #include <mm/page.h> 41 41 #include <arch/mm/page.h> 42 #include <mm/ vm.h>42 #include <mm/as.h> 43 43 #include <mm/frame.h> 44 44 #include <print.h> … … 71 71 thread_t *t; 72 72 #ifdef CONFIG_USERSPACE 73 vm_t *m; 74 vm_area_t *a; 73 as_t *as; 74 as_area_t *a; 75 __address frame; 76 index_t pfn[1]; 75 77 task_t *u; 76 78 #endif … … 142 144 * Create the first user task. 143 145 */ 144 m = vm_create(NULL);145 if (! m)146 panic(" vm_create\n");147 u = task_create( m);146 as = as_create(NULL); 147 if (!as) 148 panic("as_create\n"); 149 u = task_create(as); 148 150 if (!u) 149 151 panic("task_create\n"); … … 153 155 154 156 /* 155 * Create the text vm_area and copy the userspace code there.157 * Create the text as_area and copy the userspace code there. 156 158 */ 157 a = vm_area_create(m, VMA_TEXT, 1, UTEXT_ADDRESS);159 a = as_area_create(as, AS_AREA_TEXT, 1, UTEXT_ADDRESS); 158 160 if (!a) 159 panic("vm_area_create: vm_text\n"); 160 vm_area_map(a, m); 161 panic("as_area_create: text\n"); 162 163 frame = frame_alloc(0, ONE_FRAME, NULL); 164 161 165 if (config.init_size > 0) 162 memcpy((void *) PA2KA( a->mapping[0]), (void *) config.init_addr, config.init_size < PAGE_SIZE ? config.init_size : PAGE_SIZE);166 memcpy((void *) PA2KA(frame), (void *) config.init_addr, config.init_size < PAGE_SIZE ? config.init_size : PAGE_SIZE); 163 167 else 164 memcpy((void *) PA2KA(a->mapping[0]), (void *) utext, utext_size < PAGE_SIZE ? utext_size : PAGE_SIZE); 168 memcpy((void *) PA2KA(frame), (void *) utext, utext_size < PAGE_SIZE ? utext_size : PAGE_SIZE); 169 170 pfn[0] = frame / FRAME_SIZE; 171 as_area_load_mapping(a, pfn); 165 172 166 173 /* 167 * Create the data vm_area.174 * Create the data as_area. 168 175 */ 169 a = vm_area_create(m, VMA_STACK, 1, USTACK_ADDRESS);176 a = as_area_create(as, AS_AREA_STACK, 1, USTACK_ADDRESS); 170 177 if (!a) 171 panic("vm_area_create: vm_stack\n"); 172 vm_area_map(a, m); 178 panic("as_area_create: stack\n"); 173 179 174 180 thread_ready(t); -
generic/src/main/main.c
r0369911 r20d50a1 49 49 #include <genarch/mm/page_pt.h> 50 50 #include <mm/tlb.h> 51 #include <mm/ vm.h>51 #include <mm/as.h> 52 52 #include <synch/waitq.h> 53 53 #include <arch/arch.h> … … 136 136 void main_bsp_separated_stack(void) 137 137 { 138 vm_t *m;138 as_t *as; 139 139 task_t *k; 140 140 thread_t *t; … … 184 184 185 185 /* 186 * Create kernel vm mapping.187 */ 188 m = vm_create(GET_PTL0_ADDRESS());189 if (! m)190 panic("can't create kernel vmaddress space\n");186 * Create kernel address space. 187 */ 188 as = as_create(GET_PTL0_ADDRESS()); 189 if (!as) 190 panic("can't create kernel address space\n"); 191 191 192 192 /* 193 193 * Create kernel task. 194 194 */ 195 k = task_create( m);195 k = task_create(as); 196 196 if (!k) 197 197 panic("can't create kernel task\n"); -
generic/src/mm/frame.c
r0369911 r20d50a1 32 32 #include <mm/heap.h> 33 33 #include <mm/frame.h> 34 #include <mm/ vm.h>34 #include <mm/as.h> 35 35 #include <panic.h> 36 36 #include <debug.h> -
generic/src/mm/page.c
r0369911 r20d50a1 1 1 /* 2 * Copyright (C) 2001-200 4Jakub Jermar2 * Copyright (C) 2001-2006 Jakub Jermar 3 3 * All rights reserved. 4 4 * … … 25 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 /* 30 * Virtual Address Translation subsystem. 27 31 */ 28 32 -
generic/src/proc/scheduler.c
r0369911 r20d50a1 33 33 #include <mm/frame.h> 34 34 #include <mm/page.h> 35 #include <mm/ vm.h>35 #include <mm/as.h> 36 36 #include <arch/asm.h> 37 37 #include <arch/faddr.h> … … 353 353 */ 354 354 if (TASK != THREAD->task) { 355 vm_t *m1 = NULL;356 vm_t *m2;355 as_t *as1 = NULL; 356 as_t *as2; 357 357 358 358 if (TASK) { 359 359 spinlock_lock(&TASK->lock); 360 m1 = TASK->vm;360 as1 = TASK->as; 361 361 spinlock_unlock(&TASK->lock); 362 362 } 363 363 364 364 spinlock_lock(&THREAD->task->lock); 365 m2 = THREAD->task->vm;365 as2 = THREAD->task->as; 366 366 spinlock_unlock(&THREAD->task->lock); 367 367 368 368 /* 369 * Note that it is possible for two tasks to share one vm mapping.370 */ 371 if ( m1 != m2) {372 /* 373 * Both tasks and vm mappings are different.369 * Note that it is possible for two tasks to share one address space. 370 */ 371 if (as1 != as2) { 372 /* 373 * Both tasks and address spaces are different. 374 374 * Replace the old one with the new one. 375 375 */ 376 vm_install(m2);376 as_install(as2); 377 377 } 378 378 TASK = THREAD->task; -
generic/src/proc/task.c
r0369911 r20d50a1 29 29 #include <proc/thread.h> 30 30 #include <proc/task.h> 31 #include <mm/ vm.h>31 #include <mm/as.h> 32 32 #include <mm/heap.h> 33 33 … … 55 55 * Create new task with no threads. 56 56 * 57 * @param m Task's virtual memory structure.57 * @param as Task's address space. 58 58 * 59 59 * @return New task's structure on success, NULL on failure. 60 60 * 61 61 */ 62 task_t *task_create( vm_t *m)62 task_t *task_create(as_t *as) 63 63 { 64 64 ipl_t ipl; … … 70 70 list_initialize(&ta->th_head); 71 71 list_initialize(&ta->tasks_link); 72 ta-> vm = m;72 ta->as = as; 73 73 74 74 ipl = interrupts_disable(); -
generic/src/proc/the.c
r0369911 r20d50a1 43 43 the->thread = NULL; 44 44 the->task = NULL; 45 the-> vm= NULL;45 the->as = NULL; 46 46 } 47 47
Note:
See TracChangeset
for help on using the changeset viewer.