Rev 2465 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2465 | Rev 3104 | ||
|---|---|---|---|
| Line 101... | Line 101... | ||
| 101 | 101 | ||
| 102 | dst_ptl0 = (pte_t *) frame_alloc(PTL0_SIZE, FRAME_KA); |
102 | dst_ptl0 = (pte_t *) frame_alloc(PTL0_SIZE, FRAME_KA); |
| 103 | table_size = FRAME_SIZE << PTL0_SIZE; |
103 | table_size = FRAME_SIZE << PTL0_SIZE; |
| 104 | 104 | ||
| 105 | if (flags & FLAG_AS_KERNEL) { |
105 | if (flags & FLAG_AS_KERNEL) { |
| 106 | memsetb((uintptr_t) dst_ptl0, table_size, 0); |
106 | memsetb(dst_ptl0, table_size, 0); |
| 107 | } else { |
107 | } else { |
| 108 | uintptr_t src, dst; |
108 | uintptr_t src, dst; |
| 109 | 109 | ||
| 110 | /* |
110 | /* |
| 111 | * Copy the kernel address space portion to new PTL0. |
111 | * Copy the kernel address space portion to new PTL0. |
| Line 116... | Line 116... | ||
| 116 | src_ptl0 = (pte_t *) PA2KA((uintptr_t) AS_KERNEL->genarch.page_table); |
116 | src_ptl0 = (pte_t *) PA2KA((uintptr_t) AS_KERNEL->genarch.page_table); |
| 117 | 117 | ||
| 118 | src = (uintptr_t) &src_ptl0[PTL0_INDEX(KERNEL_ADDRESS_SPACE_START)]; |
118 | src = (uintptr_t) &src_ptl0[PTL0_INDEX(KERNEL_ADDRESS_SPACE_START)]; |
| 119 | dst = (uintptr_t) &dst_ptl0[PTL0_INDEX(KERNEL_ADDRESS_SPACE_START)]; |
119 | dst = (uintptr_t) &dst_ptl0[PTL0_INDEX(KERNEL_ADDRESS_SPACE_START)]; |
| 120 | 120 | ||
| 121 | memsetb((uintptr_t) dst_ptl0, table_size, 0); |
121 | memsetb(dst_ptl0, table_size, 0); |
| 122 | memcpy((void *) dst, (void *) src, table_size - (src - (uintptr_t) src_ptl0)); |
122 | memcpy((void *) dst, (void *) src, table_size - (src - (uintptr_t) src_ptl0)); |
| 123 | mutex_unlock(&AS_KERNEL->lock); |
123 | mutex_unlock(&AS_KERNEL->lock); |
| 124 | interrupts_restore(ipl); |
124 | interrupts_restore(ipl); |
| 125 | } |
125 | } |
| 126 | 126 | ||