Changeset df3c6f02 in mainline for kernel/arch/ia64
- Timestamp:
- 2011-05-31T22:58:56Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- d362410
- Parents:
- 82582e4 (diff), 4ce90544 (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/ia64
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/_link.ld.in
r82582e4 rdf3c6f02 30 30 hardcoded_kdata_size = .; 31 31 QUAD(kdata_end - kdata_start); 32 __gp = .; 32 33 *(.got .got.*) 33 34 *(.sdata) -
kernel/arch/ia64/include/arch.h
r82582e4 rdf3c6f02 36 36 #define KERN_ia64_ARCH_H_ 37 37 38 #define LOADED_PROG_STACK_PAGES_NO 239 40 38 #include <arch/drivers/ski.h> 41 39 -
kernel/arch/ia64/include/asm.h
r82582e4 rdf3c6f02 122 122 } 123 123 124 /** Return base address of current stack 125 * 126 * Return the base address of the current stack. 127 * The stack is assumed to be STACK_SIZE long. 128 * The stack must start on page boundary. 129 * 124 /** Return base address of current memory stack. 125 * 126 * The memory stack is assumed to be STACK_SIZE / 2 long. Note that there is 127 * also the RSE stack, which takes up the upper half of STACK_SIZE. 128 * The memory stack must start on page boundary. 130 129 */ 131 130 NO_TRACE static inline uintptr_t get_stack_base(void) 132 131 { 133 uint64_t v; 134 135 /* 136 * I'm not sure why but this code inlines badly 137 * in scheduler, resulting in THE shifting about 138 * 16B and causing kernel panic. 139 * 140 * asm volatile ( 141 * "and %[value] = %[mask], r12" 142 * : [value] "=r" (v) 143 * : [mask] "r" (~(STACK_SIZE - 1)) 144 * ); 145 * return v; 146 * 147 * The following code has the same semantics but 148 * inlines correctly. 149 * 150 */ 132 uint64_t value; 151 133 152 134 asm volatile ( 153 135 "mov %[value] = r12" 154 : [value] "=r" (v )155 ); 156 157 return (v & (~(STACK_SIZE- 1)));136 : [value] "=r" (value) 137 ); 138 139 return (value & (~(STACK_SIZE / 2 - 1))); 158 140 } 159 141 -
kernel/arch/ia64/include/context.h
r82582e4 rdf3c6f02 49 49 #define SP_DELTA (0 + ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT)) 50 50 51 /* RSE stack starts at the bottom of memory stack . */51 /* RSE stack starts at the bottom of memory stack, hence the division by 2. */ 52 52 #define context_set(c, _pc, stack, size) \ 53 53 do { \ 54 54 (c)->pc = (uintptr_t) _pc; \ 55 (c)->bsp = ((uintptr_t) stack) + ALIGN_UP((size ), REGISTER_STACK_ALIGNMENT);\55 (c)->bsp = ((uintptr_t) stack) + ALIGN_UP((size / 2), REGISTER_STACK_ALIGNMENT); \ 56 56 (c)->ar_pfs &= PFM_MASK; \ 57 (c)->sp = ((uintptr_t) stack) + ALIGN_UP((size ), STACK_ALIGNMENT) - SP_DELTA;\57 (c)->sp = ((uintptr_t) stack) + ALIGN_UP((size / 2), STACK_ALIGNMENT) - SP_DELTA; \ 58 58 } while (0); 59 59 -
kernel/arch/ia64/include/mm/as.h
r82582e4 rdf3c6f02 38 38 #define KERNEL_ADDRESS_SPACE_SHADOWED_ARCH 0 39 39 40 #define KERNEL_ADDRESS_SPACE_START_ARCH ((unsigned long) 0xe000000000000000ULL)41 #define KERNEL_ADDRESS_SPACE_END_ARCH ((unsigned long) 0xffffffffffffffffULL)42 #define USER_ADDRESS_SPACE_START_ARCH ((unsigned long) 0x0000000000000000ULL)43 #define USER_ADDRESS_SPACE_END_ARCH ((unsigned long) 0xdfffffffffffffffULL)40 #define KERNEL_ADDRESS_SPACE_START_ARCH UINT64_C(0xe000000000000000) 41 #define KERNEL_ADDRESS_SPACE_END_ARCH UINT64_C(0xffffffffffffffff) 42 #define USER_ADDRESS_SPACE_START_ARCH UINT64_C(0x0000000000000000) 43 #define USER_ADDRESS_SPACE_END_ARCH UINT64_C(0xdfffffffffffffff) 44 44 45 #define USTACK_ADDRESS_ARCH 0x0000000ff0000000ULL45 #define USTACK_ADDRESS_ARCH UINT64_C(0x0000000ff0000000) 46 46 47 47 typedef struct { -
kernel/arch/ia64/include/mm/frame.h
r82582e4 rdf3c6f02 49 49 #define physmem_print() 50 50 51 #define ARCH_STACK_FRAMES TWO_FRAMES52 53 51 #endif /* __ASM__ */ 54 52 #endif /* KERNEL */ -
kernel/arch/ia64/include/register.h
r82582e4 rdf3c6f02 60 60 #define PSR_CPL_SHIFT 32 61 61 #define PSR_CPL_MASK_SHIFTED 3 62 63 #define PSR_RI_SHIFT 41 64 #define PSR_RI_LEN 2 62 65 63 66 #define PFM_MASK (~0x3fffffffff) -
kernel/arch/ia64/include/types.h
r82582e4 rdf3c6f02 37 37 38 38 typedef uint64_t size_t; 39 typedef int64_t ssize_t; 39 40 40 41 typedef uint64_t uintptr_t; -
kernel/arch/ia64/src/ia64.c
r82582e4 rdf3c6f02 249 249 rsc.mode = 3; /* eager mode */ 250 250 251 /* 252 * Switch to userspace. 253 * 254 * When calculating stack addresses, mind the stack split between the 255 * memory stack and the RSE stack. Each occuppies STACK_SIZE / 2 bytes. 256 */ 251 257 switch_to_userspace((uintptr_t) kernel_uarg->uspace_entry, 252 ((uintptr_t) kernel_uarg->uspace_stack) + PAGE_SIZE-258 ((uintptr_t) kernel_uarg->uspace_stack) + STACK_SIZE / 2 - 253 259 ALIGN_UP(STACK_ITEM_SIZE, STACK_ALIGNMENT), 254 ((uintptr_t) kernel_uarg->uspace_stack) + PAGE_SIZE,260 ((uintptr_t) kernel_uarg->uspace_stack) + STACK_SIZE / 2, 255 261 (uintptr_t) kernel_uarg->uspace_uarg, psr.value, rsc.value); 256 262 -
kernel/arch/ia64/src/ivt.S
r82582e4 rdf3c6f02 50 50 #define R_KSTACK_BSP r22 /* keep in sync with before_thread_runs_arch() */ 51 51 #define R_KSTACK r23 /* keep in sync with before_thread_runs_arch() */ 52 53 /* Speculation vector handler */ 54 .macro SPECULATION_VECTOR_HANDLER offs 55 .org ivt + \offs 56 57 /* 1. Save predicates, IIM, IIP, IPSR and ISR CR's in bank 0 registers. */ 58 mov r16 = pr 59 mov r17 = cr.iim 60 mov r18 = cr.iip 61 mov r19 = cr.ipsr 62 mov r20 = cr.isr ;; 63 64 /* 2. Move IIP to IIPA. */ 65 mov cr.iipa = r18 66 67 /* 3. Sign extend IIM[20:0], shift left by 4 and add to IIP. */ 68 shl r17 = r17, 43 ;; /* shift bit 20 to bit 63 */ 69 shr r17 = r17, 39 ;; /* signed shift right to bit 24 */ 70 add r18 = r18, r17 ;; 71 mov cr.iip = r18 72 73 /* 4. Set IPSR.ri to 0. */ 74 dep r19 = 0, r19, PSR_RI_SHIFT, PSR_RI_LEN ;; 75 mov cr.ipsr = r19 76 77 /* 5. Check whether IPSR.tb or IPSR.ss is set. */ 78 79 /* TODO: 80 * Implement this when Taken Branch and Single Step traps can occur. 81 */ 82 83 /* 6. Restore predicates and return from interruption. */ 84 mov pr = r16 ;; 85 rfi 86 .endm 52 87 53 88 /** Heavyweight interrupt handler … … 391 426 392 427 /* 10. call handler */ 393 movl r1 = kernel_image_start428 movl r1 = __gp 394 429 395 430 mov b1 = loc2 … … 541 576 HEAVYWEIGHT_HANDLER 0x5500 disabled_fp_register 542 577 HEAVYWEIGHT_HANDLER 0x5600 543 HEAVYWEIGHT_HANDLER 0x5700578 SPECULATION_VECTOR_HANDLER 0x5700 544 579 HEAVYWEIGHT_HANDLER 0x5800 545 580 HEAVYWEIGHT_HANDLER 0x5900 -
kernel/arch/ia64/src/mm/tlb.c
r82582e4 rdf3c6f02 481 481 482 482 page_table_lock(AS, true); 483 t = page_mapping_find(AS, va );483 t = page_mapping_find(AS, va, true); 484 484 if (t) { 485 485 /* … … 599 599 600 600 page_table_lock(AS, true); 601 pte_t *entry = page_mapping_find(AS, va );601 pte_t *entry = page_mapping_find(AS, va, true); 602 602 if (entry) { 603 603 /* … … 651 651 652 652 page_table_lock(AS, true); 653 t = page_mapping_find(AS, va );653 t = page_mapping_find(AS, va, true); 654 654 ASSERT((t) && (t->p)); 655 655 if ((t) && (t->p) && (t->w)) { … … 684 684 685 685 page_table_lock(AS, true); 686 t = page_mapping_find(AS, va );686 t = page_mapping_find(AS, va, true); 687 687 ASSERT((t) && (t->p)); 688 688 if ((t) && (t->p) && (t->x)) { … … 717 717 718 718 page_table_lock(AS, true); 719 t = page_mapping_find(AS, va );719 t = page_mapping_find(AS, va, true); 720 720 ASSERT((t) && (t->p)); 721 721 if ((t) && (t->p)) { … … 753 753 */ 754 754 page_table_lock(AS, true); 755 t = page_mapping_find(AS, va );755 t = page_mapping_find(AS, va, true); 756 756 ASSERT((t) && (t->p)); 757 757 ASSERT(!t->w); … … 778 778 779 779 page_table_lock(AS, true); 780 t = page_mapping_find(AS, va );780 t = page_mapping_find(AS, va, true); 781 781 ASSERT(t); 782 782 -
kernel/arch/ia64/src/proc/scheduler.c
r82582e4 rdf3c6f02 79 79 * Record address of kernel stack to bank 0 r23. 80 80 * These values will be found there after switch from userspace. 81 * 82 * Mind the 1:1 split of the entire STACK_SIZE long region between the 83 * memory stack and the RSE stack. 81 84 */ 82 85 asm volatile ( … … 86 89 "bsw.1\n" 87 90 : 88 : "r" (&THREAD->kstack[ THREAD_STACK_SIZE]),89 "r" (&THREAD->kstack[ THREAD_STACK_SIZE- SP_DELTA])91 : "r" (&THREAD->kstack[STACK_SIZE / 2]), 92 "r" (&THREAD->kstack[STACK_SIZE / 2 - SP_DELTA]) 90 93 ); 91 94 } -
kernel/arch/ia64/src/start.S
r82582e4 rdf3c6f02 174 174 175 175 # Initialize gp (Global Pointer) register 176 movl gp = kernel_image_start176 movl gp = __gp 177 177 178 # 178 # 179 179 # Initialize bootinfo on BSP. 180 180 #
Note:
See TracChangeset
for help on using the changeset viewer.