Changeset 2f23341 in mainline for kernel/arch/ia64/include/asm.h
- Timestamp:
- 2011-05-19T20:04:09Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 326bf65
- Parents:
- 2a922c8
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia64/include/asm.h
r2a922c8 r2f23341 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 132 uint64_t value; 134 135 /*136 * I'm not sure why but this code inlines badly137 * in scheduler, resulting in THE shifting about138 * 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 but148 * inlines correctly.149 *150 */151 133 152 134 asm volatile ( … … 155 137 ); 156 138 157 return (value & (~(STACK_SIZE - 1)));139 return (value & (~(STACK_SIZE / 2 - 1))); 158 140 } 159 141
Note:
See TracChangeset
for help on using the changeset viewer.