Changeset 97c7682 in mainline for kernel/arch
- Timestamp:
- 2012-07-14T11:18:40Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 804d9b6
- Parents:
- 0747468 (diff), f0348c8 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- kernel/arch
- Files:
-
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/abs32le/include/mm/page.h
r0747468 r97c7682 105 105 set_pt_flags((pte_t *) (ptl3), (size_t) (i), (x)) 106 106 107 /* Set PTE present bit accessors for each level. */ 108 #define SET_PTL1_PRESENT_ARCH(ptl0, i) \ 109 set_pt_present((pte_t *) (ptl0), (size_t) (i)) 110 #define SET_PTL2_PRESENT_ARCH(ptl1, i) 111 #define SET_PTL3_PRESENT_ARCH(ptl2, i) 112 #define SET_FRAME_PRESENT_ARCH(ptl3, i) \ 113 set_pt_present((pte_t *) (ptl3), (size_t) (i)) 114 107 115 /* Macros for querying the last level entries. */ 108 116 #define PTE_VALID_ARCH(p) \ … … 173 181 } 174 182 183 NO_TRACE static inline void set_pt_present(pte_t *pt, size_t i) 184 WRITES(ARRAY_RANGE(pt, PTL0_ENTRIES_ARCH)) 185 REQUIRES_ARRAY_MUTABLE(pt, PTL0_ENTRIES_ARCH) 186 { 187 pte_t *p = &pt[i]; 188 189 p->present = 1; 190 } 191 175 192 extern void page_arch_init(void); 176 193 extern void page_fault(unsigned int, istate_t *); -
kernel/arch/amd64/Makefile.inc
r0747468 r97c7682 55 55 GCC_CFLAGS += $(CMN1) 56 56 ICC_CFLAGS += $(CMN1) 57 SUNCC_CFLAGS += -m64 -xmodel=kernel58 57 59 58 BITS = 64 … … 67 66 GCC_CFLAGS += $(CMN2) 68 67 ICC_CFLAGS += $(CMN2) 69 SUNCC_CFLAGS += -xtarget=opteron70 68 endif 71 69 -
kernel/arch/amd64/include/mm/page.h
r0747468 r97c7682 33 33 */ 34 34 35 /** Paging on AMD6436 *37 * The space is divided in positive numbers (uspace) and38 * negative numbers (kernel). The 'negative' space starting39 * with 0xffff800000000000 and ending with 0xffffffffffffffff40 * is identically mapped physical memory.41 *42 */43 44 35 #ifndef KERN_amd64_PAGE_H_ 45 36 #define KERN_amd64_PAGE_H_ … … 127 118 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) \ 128 119 set_pt_flags((pte_t *) (ptl3), (size_t) (i), (x)) 120 121 /* Set PTE present bit accessors for each level. */ 122 #define SET_PTL1_PRESENT_ARCH(ptl0, i) \ 123 set_pt_present((pte_t *) (ptl0), (size_t) (i)) 124 #define SET_PTL2_PRESENT_ARCH(ptl1, i) \ 125 set_pt_present((pte_t *) (ptl1), (size_t) (i)) 126 #define SET_PTL3_PRESENT_ARCH(ptl2, i) \ 127 set_pt_present((pte_t *) (ptl2), (size_t) (i)) 128 #define SET_FRAME_PRESENT_ARCH(ptl3, i) \ 129 set_pt_present((pte_t *) (ptl3), (size_t) (i)) 129 130 130 131 /* Macros for querying the last-level PTE entries. */ … … 224 225 } 225 226 227 NO_TRACE static inline void set_pt_present(pte_t *pt, size_t i) 228 { 229 pte_t *p = &pt[i]; 230 231 p->present = 1; 232 } 233 226 234 extern void page_arch_init(void); 227 235 extern void page_fault(unsigned int, istate_t *); -
kernel/arch/amd64/src/mm/page.c
r0747468 r97c7682 57 57 uintptr_t cur; 58 58 unsigned int identity_flags = 59 PAGE_ CACHEABLE | PAGE_EXEC | PAGE_GLOBAL | PAGE_WRITE;59 PAGE_GLOBAL | PAGE_CACHEABLE | PAGE_EXEC | PAGE_WRITE | PAGE_READ; 60 60 61 61 page_mapping_operations = &pt_mapping_operations; -
kernel/arch/amd64/src/userspace.c
r0747468 r97c7682 55 55 asm volatile ( 56 56 "pushq %[udata_des]\n" 57 "pushq %[stack_ size]\n"57 "pushq %[stack_top]\n" 58 58 "pushq %[ipl]\n" 59 59 "pushq %[utext_des]\n" … … 65 65 "iretq\n" 66 66 :: [udata_des] "i" (GDT_SELECTOR(UDATA_DES) | PL_USER), 67 [stack_size] "r" (kernel_uarg->uspace_stack + STACK_SIZE), 67 [stack_top] "r" ((uint8_t *) kernel_uarg->uspace_stack + 68 kernel_uarg->uspace_stack_size), 68 69 [ipl] "r" (ipl), 69 70 [utext_des] "i" (GDT_SELECTOR(UTEXT_DES) | PL_USER), … … 74 75 75 76 /* Unreachable */ 76 while (1) 77 ; 77 while (1); 78 78 } 79 79 -
kernel/arch/arm32/include/mm/page.h
r0747468 r97c7682 40 40 #include <mm/mm.h> 41 41 #include <arch/exception.h> 42 #include <arch/barrier.h> 42 43 #include <trace.h> 43 44 … … 118 119 #define SET_PTL3_FLAGS_ARCH(ptl2, i, x) 119 120 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) \ 120 set_pt_level1_flags((pte_t *) (ptl3), (size_t) (i), (x)) 121 set_pt_level1_flags((pte_t *) (ptl3), (size_t) (i), (x)) 122 123 /* Set PTE present bit accessors for each level. */ 124 #define SET_PTL1_PRESENT_ARCH(ptl0, i) \ 125 set_pt_level0_present((pte_t *) (ptl0), (size_t) (i)) 126 #define SET_PTL2_PRESENT_ARCH(ptl1, i) 127 #define SET_PTL3_PRESENT_ARCH(ptl2, i) 128 #define SET_FRAME_PRESENT_ARCH(ptl3, i) \ 129 set_pt_level1_present((pte_t *) (ptl3), (size_t) (i)) 121 130 122 131 #if defined(PROCESSOR_armv7_a) … … 126 135 #endif 127 136 137 #ifndef __ASM__ 138 NO_TRACE static inline void set_pt_level0_present(pte_t *pt, size_t i) 139 { 140 pte_level0_t *p = &pt[i].l0; 141 142 p->should_be_zero = 0; 143 write_barrier(); 144 p->descriptor_type = PTE_DESCRIPTOR_COARSE_TABLE; 145 } 146 147 148 NO_TRACE static inline void set_pt_level1_present(pte_t *pt, size_t i) 149 { 150 pte_level1_t *p = &pt[i].l1; 151 152 p->descriptor_type = PTE_DESCRIPTOR_SMALL_PAGE; 153 } 154 155 #endif /* __ASM__ */ 156 128 157 #endif 129 158 -
kernel/arch/arm32/include/mm/page_armv4.h
r0747468 r97c7682 215 215 pte_level1_t *p = &pt[i].l1; 216 216 217 if (flags & PAGE_NOT_PRESENT) {217 if (flags & PAGE_NOT_PRESENT) 218 218 p->descriptor_type = PTE_DESCRIPTOR_NOT_PRESENT; 219 p->access_permission_3 = 1; 220 } else { 219 else 221 220 p->descriptor_type = PTE_DESCRIPTOR_SMALL_PAGE; 222 p->access_permission_3 = p->access_permission_0;223 }224 221 225 222 p->cacheable = p->bufferable = (flags & PAGE_CACHEABLE) != 0; -
kernel/arch/arm32/src/userspace.c
r0747468 r97c7682 92 92 93 93 /* set user stack */ 94 ustate.sp = ((uint32_t)kernel_uarg->uspace_stack) + STACK_SIZE; 94 ustate.sp = ((uint32_t) kernel_uarg->uspace_stack) + 95 kernel_uarg->uspace_stack_size; 95 96 96 97 /* set where uspace execution starts */ -
kernel/arch/ia32/Makefile.inc
r0747468 r97c7682 38 38 GCC_CFLAGS += $(CMN1) 39 39 ICC_CFLAGS += $(CMN1) 40 SUNCC_CFLAGS += $(CMN1)41 40 CLANG_CFLAGS += $(CMN1) 42 41 … … 50 49 ifeq ($(PROCESSOR),athlon_xp) 51 50 CMN2 = -march=athlon-xp 52 SUNCC_CFLAGS += -xarch=ssea53 51 endif 54 52 55 53 ifeq ($(PROCESSOR),athlon_mp) 56 54 CMN2 = -march=athlon-mp 57 SUNCC_CFLAGS += xarch=ssea58 55 endif 59 56 60 57 ifeq ($(PROCESSOR),pentium3) 61 58 CMN2 = -march=pentium3 62 SUNCC_CFLAGS += -xarch=sse63 59 endif 64 60 65 61 ifeq ($(PROCESSOR),pentium4) 66 62 CMN2 = -march=pentium4 67 SUNCC_CFLAGS += -xarch=sse268 63 endif 69 64 70 65 ifeq ($(PROCESSOR),core) 71 66 CMN2 = -march=prescott 72 SUNCC_CFLAGS += -xarch=sse373 67 endif 74 68 -
kernel/arch/ia32/include/mm/page.h
r0747468 r97c7682 115 115 set_pt_flags((pte_t *) (ptl3), (size_t) (i), (x)) 116 116 117 /* Set PTE present bit accessors for each level. */ 118 #define SET_PTL1_PRESENT_ARCH(ptl0, i) \ 119 set_pt_present((pte_t *) (ptl0), (size_t) (i)) 120 #define SET_PTL2_PRESENT_ARCH(ptl1, i) 121 #define SET_PTL3_PRESENT_ARCH(ptl2, i) 122 #define SET_FRAME_PRESENT_ARCH(ptl3, i) \ 123 set_pt_present((pte_t *) (ptl3), (size_t) (i)) 124 117 125 /* Macros for querying the last level entries. */ 118 126 #define PTE_VALID_ARCH(p) \ … … 194 202 } 195 203 204 NO_TRACE static inline void set_pt_present(pte_t *pt, size_t i) 205 { 206 pte_t *p = &pt[i]; 207 208 p->present = 1; 209 } 210 196 211 extern void page_arch_init(void); 197 212 extern void page_fault(unsigned int, istate_t *); -
kernel/arch/ia32/src/mm/page.c
r0747468 r97c7682 71 71 for (cur = 0; cur < min(config.identity_size, config.physmem_end); 72 72 cur += FRAME_SIZE) { 73 flags = PAGE_CACHEABLE | PAGE_WRITE; 74 if ((PA2KA(cur) >= config.base) && 75 (PA2KA(cur) < config.base + config.kernel_size)) 76 flags |= PAGE_GLOBAL; 73 flags = PAGE_GLOBAL | PAGE_CACHEABLE | PAGE_WRITE | PAGE_READ; 77 74 page_mapping_insert(AS_KERNEL, PA2KA(cur), cur, flags); 78 75 } -
kernel/arch/ia32/src/smp/apic.c
r0747468 r97c7682 259 259 } 260 260 261 #define DELIVS_PENDING_SILENT_RETRIES 4 262 263 static void l_apic_wait_for_delivery(void) 264 { 265 icr_t icr; 266 unsigned retries = 0; 267 268 do { 269 if (retries++ > DELIVS_PENDING_SILENT_RETRIES) { 270 retries = 0; 271 #ifdef CONFIG_DEBUG 272 printf("IPI is pending.\n"); 273 #endif 274 delay(20); 275 } 276 icr.lo = l_apic[ICRlo]; 277 } while (icr.delivs == DELIVS_PENDING); 278 279 } 280 261 281 /** Send all CPUs excluding CPU IPI vector. 262 282 * … … 279 299 280 300 l_apic[ICRlo] = icr.lo; 281 282 icr.lo = l_apic[ICRlo]; 283 if (icr.delivs == DELIVS_PENDING) { 284 #ifdef CONFIG_DEBUG 285 printf("IPI is pending.\n"); 286 #endif 287 } 301 302 l_apic_wait_for_delivery(); 288 303 289 304 return apic_poll_errors(); … … 327 342 return 0; 328 343 344 l_apic_wait_for_delivery(); 345 329 346 icr.lo = l_apic[ICRlo]; 330 if (icr.delivs == DELIVS_PENDING) {331 #ifdef CONFIG_DEBUG332 printf("IPI is pending.\n");333 #endif334 }335 336 347 icr.delmod = DELMOD_INIT; 337 348 icr.destmod = DESTMOD_PHYS; -
kernel/arch/ia32/src/userspace.c
r0747468 r97c7682 63 63 64 64 "pushl %[udata_des]\n" 65 "pushl %[stack_ size]\n"65 "pushl %[stack_top]\n" 66 66 "pushl %[ipl]\n" 67 67 "pushl %[utext_des]\n" … … 75 75 : 76 76 : [udata_des] "i" (GDT_SELECTOR(UDATA_DES) | PL_USER), 77 [stack_size] "r" ((uint8_t *) kernel_uarg->uspace_stack + STACK_SIZE), 77 [stack_top] "r" ((uint8_t *) kernel_uarg->uspace_stack + 78 kernel_uarg->uspace_stack_size), 78 79 [ipl] "r" (ipl), 79 80 [utext_des] "i" (GDT_SELECTOR(UTEXT_DES) | PL_USER), -
kernel/arch/ia64/src/drivers/ski.c
r0747468 r97c7682 150 150 151 151 if (instance) { 152 instance->thread = thread_create(kskipoll, instance, TASK, 0,153 "kskipoll", true);152 instance->thread = thread_create(kskipoll, instance, TASK, 153 THREAD_FLAG_UNCOUNTED, "kskipoll"); 154 154 155 155 if (!instance->thread) { -
kernel/arch/ia64/src/ia64.c
r0747468 r97c7682 232 232 * 233 233 * When calculating stack addresses, mind the stack split between the 234 * memory stack and the RSE stack. Each occuppies STACK_SIZE / 2 bytes. 234 * memory stack and the RSE stack. Each occuppies 235 * uspace_stack_size / 2 bytes. 235 236 */ 236 237 switch_to_userspace((uintptr_t) kernel_uarg->uspace_entry, 237 ((uintptr_t) kernel_uarg->uspace_stack) + STACK_SIZE / 2 - 238 ((uintptr_t) kernel_uarg->uspace_stack) + 239 kernel_uarg->uspace_stack_size / 2 - 238 240 ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT), 239 ((uintptr_t) kernel_uarg->uspace_stack) + STACK_SIZE / 2, 241 ((uintptr_t) kernel_uarg->uspace_stack) + 242 kernel_uarg->uspace_stack_size / 2, 240 243 (uintptr_t) kernel_uarg->uspace_uarg, psr.value, rsc.value); 241 242 while (1) 243 ; 244 245 while (1); 244 246 } 245 247 -
kernel/arch/mips32/include/mm/page.h
r0747468 r97c7682 128 128 set_pt_flags((pte_t *) (ptl3), (size_t) (i), (x)) 129 129 130 /* Set PTE present bit accessors for each level. */ 131 #define SET_PTL1_PRESENT_ARCH(ptl0, i) \ 132 set_pt_present((pte_t *) (ptl0), (size_t) (i)) 133 #define SET_PTL2_PRESENT_ARCH(ptl1, i) 134 #define SET_PTL3_PRESENT_ARCH(ptl2, i) 135 #define SET_FRAME_PRESENT_ARCH(ptl3, i) \ 136 set_pt_present((pte_t *) (ptl3), (size_t) (i)) 137 130 138 /* Last-level info macros. */ 131 139 #define PTE_VALID_ARCH(pte) (*((uint32_t *) (pte)) != 0) … … 182 190 } 183 191 192 NO_TRACE static inline void set_pt_present(pte_t *pt, size_t i) 193 { 194 pte_t *p = &pt[i]; 195 196 p->p = 1; 197 } 198 199 184 200 extern void page_arch_init(void); 185 201 -
kernel/arch/mips32/src/mips32.c
r0747468 r97c7682 211 211 cp0_status_um_bit | cp0_status_ie_enabled_bit)); 212 212 cp0_epc_write((uintptr_t) kernel_uarg->uspace_entry); 213 userspace_asm(((uintptr_t) kernel_uarg->uspace_stack + STACK_SIZE), 213 userspace_asm(((uintptr_t) kernel_uarg->uspace_stack + 214 kernel_uarg->uspace_stack_size), 214 215 (uintptr_t) kernel_uarg->uspace_uarg, 215 216 (uintptr_t) kernel_uarg->uspace_entry); -
kernel/arch/mips64/src/mips64.c
r0747468 r97c7682 188 188 cp0_status_um_bit | cp0_status_ie_enabled_bit)); 189 189 cp0_epc_write((uintptr_t) kernel_uarg->uspace_entry); 190 userspace_asm(((uintptr_t) kernel_uarg->uspace_stack + STACK_SIZE), 190 userspace_asm(((uintptr_t) kernel_uarg->uspace_stack + 191 kernel_uarg->uspace_stack_size), 191 192 (uintptr_t) kernel_uarg->uspace_uarg, 192 193 (uintptr_t) kernel_uarg->uspace_entry); -
kernel/arch/ppc32/include/mm/page.h
r0747468 r97c7682 128 128 #define SET_FRAME_FLAGS_ARCH(ptl3, i, x) \ 129 129 set_pt_flags((pte_t *) (ptl3), (size_t) (i), (x)) 130 131 /* Set PTE present accessors for each level. */ 132 #define SET_PTL1_PRESENT_ARCH(ptl0, i) \ 133 set_pt_present((pte_t *) (ptl0), (size_t) (i)) 134 135 #define SET_PTL2_PRESENT_ARCH(ptl1, i) 136 #define SET_PTL3_PRESENT_ARCH(ptl2, i) 137 138 #define SET_FRAME_PRESENT_ARCH(ptl3, i) \ 139 set_pt_present((pte_t *) (ptl3), (size_t) (i)) 130 140 131 141 /* Macros for querying the last-level PTEs. */ … … 175 185 } 176 186 187 NO_TRACE static inline void set_pt_present(pte_t *pt, size_t i) 188 { 189 pte_t *entry = &pt[i]; 190 191 entry->present = 1; 192 } 193 177 194 extern void page_arch_init(void); 178 195 -
kernel/arch/ppc32/src/ppc32.c
r0747468 r97c7682 269 269 { 270 270 userspace_asm((uintptr_t) kernel_uarg->uspace_uarg, 271 (uintptr_t) kernel_uarg->uspace_stack + STACK_SIZE - SP_DELTA, 271 (uintptr_t) kernel_uarg->uspace_stack + 272 kernel_uarg->uspace_stack_size - SP_DELTA, 272 273 (uintptr_t) kernel_uarg->uspace_entry); 273 274 -
kernel/arch/sparc64/Makefile.inc
r0747468 r97c7682 32 32 33 33 GCC_CFLAGS += -m64 -mcpu=ultrasparc -mcmodel=medlow -mno-fpu 34 SUNCC_CFLAGS += -m64 -xarch=sparc -xregs=appl,no%float35 34 36 35 LFLAGS += -no-check-sections -
kernel/arch/sparc64/src/drivers/niagara.c
r0747468 r97c7682 184 184 185 185 instance = malloc(sizeof(niagara_instance_t), FRAME_ATOMIC); 186 instance->thread = thread_create(kniagarapoll, NULL, TASK, 0,187 "kniagarapoll", true);186 instance->thread = thread_create(kniagarapoll, NULL, TASK, 187 THREAD_FLAG_UNCOUNTED, "kniagarapoll"); 188 188 189 189 if (!instance->thread) { -
kernel/arch/sparc64/src/proc/sun4u/scheduler.c
r0747468 r97c7682 51 51 void before_thread_runs_arch(void) 52 52 { 53 if ( (THREAD->flags & THREAD_FLAG_USPACE)) {53 if (THREAD->uspace) { 54 54 /* 55 55 * Write kernel stack address to %g6 of the alternate and … … 74 74 void after_thread_ran_arch(void) 75 75 { 76 if ( (THREAD->flags & THREAD_FLAG_USPACE)) {77 /* sample the state of the userspace window buffer */ 76 if (THREAD->uspace) { 77 /* sample the state of the userspace window buffer */ 78 78 THREAD->arch.uspace_window_buffer = (uint8_t *) read_from_ag_g7(); 79 79 } -
kernel/arch/sparc64/src/proc/sun4v/scheduler.c
r0747468 r97c7682 54 54 void before_thread_runs_arch(void) 55 55 { 56 if ( (THREAD->flags & THREAD_FLAG_USPACE)) {56 if (THREAD->uspace) { 57 57 uint64_t sp = (uintptr_t) THREAD->kstack + STACK_SIZE - 58 58 (STACK_BIAS + ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT)); … … 66 66 void after_thread_ran_arch(void) 67 67 { 68 if ( (THREAD->flags & THREAD_FLAG_USPACE)) {69 /* sample the state of the userspace window buffer */ 68 if (THREAD->uspace) { 69 /* sample the state of the userspace window buffer */ 70 70 THREAD->arch.uspace_window_buffer = 71 71 (uint8_t *) asi_u64_read(ASI_SCRATCHPAD, SCRATCHPAD_WBUF); -
kernel/arch/sparc64/src/proc/thread.c
r0747468 r97c7682 61 61 void thread_create_arch(thread_t *t) 62 62 { 63 if ((t-> flags & THREAD_FLAG_USPACE) && (!t->arch.uspace_window_buffer))63 if ((t->uspace) && (!t->arch.uspace_window_buffer)) 64 64 { 65 65 /* -
kernel/arch/sparc64/src/smp/sun4u/ipi.c
r0747468 r97c7682 124 124 (void) interrupts_disable(); 125 125 } 126 } while ( done);126 } while (!done); 127 127 128 128 preemption_enable(); -
kernel/arch/sparc64/src/sun4u/sparc64.c
r0747468 r97c7682 156 156 (void) interrupts_disable(); 157 157 switch_to_userspace((uintptr_t) kernel_uarg->uspace_entry, 158 ((uintptr_t) kernel_uarg->uspace_stack) + STACK_SIZE 159 - (ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT) + STACK_BIAS), 158 ((uintptr_t) kernel_uarg->uspace_stack) + 159 kernel_uarg->uspace_stack_size - 160 (ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT) + STACK_BIAS), 160 161 (uintptr_t) kernel_uarg->uspace_uarg); 161 162 for (;;) 163 ; 164 /* not reached */ 162 163 /* Not reached */ 164 while (1); 165 165 } 166 166 -
kernel/arch/sparc64/src/sun4v/sparc64.c
r0747468 r97c7682 154 154 (void) interrupts_disable(); 155 155 switch_to_userspace((uintptr_t) kernel_uarg->uspace_entry, 156 ((uintptr_t) kernel_uarg->uspace_stack) + STACK_SIZE 157 - (ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT) + STACK_BIAS), 156 ((uintptr_t) kernel_uarg->uspace_stack) + 157 kernel_uarg->uspace_stack_size - 158 (ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT) + STACK_BIAS), 158 159 (uintptr_t) kernel_uarg->uspace_uarg); 159 160 for (;;) 161 ; 162 /* not reached */ 160 161 /* Not reached */ 162 while (1); 163 163 } 164 164
Note:
See TracChangeset
for help on using the changeset viewer.