Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 2f23341 in mainline for kernel/arch/ia64/include/asm.h


Ignore:
Timestamp:
2011-05-19T20:04:09Z (11 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master
Children:
326bf65
Parents:
2a922c8
Message:

Fix ia64 regression introduced in mainline,966.
The ia64 stack is actually two stacks in one:

  • the regular memory stack, which is now STACK_SIZE / 2 bytes long
  • and the equally sized RSE stack

Note that ia64 is now the only architecture which effectively uses
only one memory frame for its memory stack.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/include/asm.h

    r2a922c8 r2f23341  
    122122}
    123123
    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.
    130129 */
    131130NO_TRACE static inline uintptr_t get_stack_base(void)
    132131{
    133132        uint64_t value;
    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          */
    151133       
    152134        asm volatile (
     
    155137        );
    156138       
    157         return (value & (~(STACK_SIZE - 1)));
     139        return (value & (~(STACK_SIZE / 2 - 1)));
    158140}
    159141
Note: See TracChangeset for help on using the changeset viewer.