Ignore:
Timestamp:
2006-08-30T11:31:25Z (18 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ee454eb
Parents:
0fa6044
Message:

sparc64 work.

  • Modify before_thread_runs_arch() to store addresses of the kernel stack and

userspace window buffer, resp., to registers %g6 and %g7, resp, in the
alternate and interrupt global sets.

  • Modify after_thread_ran_arch() to sample %g7 from the alternate globals.
  • Implement trap handler for spilling register windows into userspace window buffer.
  • Implement assembly language functions to access %g6 and %g7 registers in the alternate sets.
  • Initialize the trap table so that there are now also spill_1_normal, spill_2_normal,

spill_0_other and fill_1_normal handlers. These handlers are used in different situations
and for different purposes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc64/include/trap/regwin.h

    r0fa6044 re11ae91  
    4242
    4343#define TT_CLEAN_WINDOW                 0x24
    44 #define TT_SPILL_0_NORMAL               0x80
    45 #define TT_FILL_0_NORMAL                0xc0
     44#define TT_SPILL_0_NORMAL               0x80    /* kernel spills */
     45#define TT_SPILL_1_NORMAL               0x84    /* userspace spills */
     46#define TT_SPILL_2_NORMAL               0x88    /* spills to userspace window buffer */
     47#define TT_SPILL_0_OTHER                0xa0    /* spills to userspace window buffer */
     48#define TT_FILL_0_NORMAL                0xc0    /* kernel fills */
     49#define TT_FILL_1_NORMAL                0xc4    /* userspace fills */
    4650
    4751#define REGWIN_HANDLER_SIZE             128
     
    99103 */
    100104.macro SPILL_NORMAL_HANDLER_USERSPACE
    101         wr ASI_AIUP, %asi
     105        wr %g0, ASI_AIUP, %asi
    102106        stxa %l0, [%sp + STACK_BIAS + L0_OFFSET] %asi
    103107        stxa %l1, [%sp + STACK_BIAS + L1_OFFSET] %asi
     
    121125
    122126/*
    123  * Macro used by the userspace during other spills.
    124  */
    125 .macro SPILL_OTHER_HANDLER_USERSPACE
    126         wr ASI_AIUS, %asi
    127         stxa %l0, [%sp + STACK_BIAS + L0_OFFSET] %asi
    128         stxa %l1, [%sp + STACK_BIAS + L1_OFFSET] %asi
    129         stxa %l2, [%sp + STACK_BIAS + L2_OFFSET] %asi
    130         stxa %l3, [%sp + STACK_BIAS + L3_OFFSET] %asi
    131         stxa %l4, [%sp + STACK_BIAS + L4_OFFSET] %asi
    132         stxa %l5, [%sp + STACK_BIAS + L5_OFFSET] %asi
    133         stxa %l6, [%sp + STACK_BIAS + L6_OFFSET] %asi
    134         stxa %l7, [%sp + STACK_BIAS + L7_OFFSET] %asi
    135         stxa %i0, [%sp + STACK_BIAS + I0_OFFSET] %asi
    136         stxa %i1, [%sp + STACK_BIAS + I1_OFFSET] %asi
    137         stxa %i2, [%sp + STACK_BIAS + I2_OFFSET] %asi
    138         stxa %i3, [%sp + STACK_BIAS + I3_OFFSET] %asi
    139         stxa %i4, [%sp + STACK_BIAS + I4_OFFSET] %asi
    140         stxa %i5, [%sp + STACK_BIAS + I5_OFFSET] %asi
    141         stxa %i6, [%sp + STACK_BIAS + I6_OFFSET] %asi
    142         stxa %i7, [%sp + STACK_BIAS + I7_OFFSET] %asi
     127 * Macro used to spill userspace window to userspace window buffer.
     128 * It can be either triggered from preemptible_handler doing SAVE
     129 * at (TL=1) or from normal kernel code doing SAVE when OTHERWIN>0
     130 * at (TL=0).
     131 */
     132.macro SPILL_TO_USPACE_WINDOW_BUFFER
     133        stx %l0, [%g7 + L0_OFFSET]     
     134        stx %l1, [%g7 + L1_OFFSET]
     135        stx %l2, [%g7 + L2_OFFSET]
     136        stx %l3, [%g7 + L3_OFFSET]
     137        stx %l4, [%g7 + L4_OFFSET]
     138        stx %l5, [%g7 + L5_OFFSET]
     139        stx %l6, [%g7 + L6_OFFSET]
     140        stx %l7, [%g7 + L7_OFFSET]
     141        stx %i0, [%g7 + I0_OFFSET]
     142        stx %i1, [%g7 + I1_OFFSET]
     143        stx %i2, [%g7 + I2_OFFSET]
     144        stx %i3, [%g7 + I3_OFFSET]
     145        stx %i4, [%g7 + I4_OFFSET]
     146        stx %i5, [%g7 + I5_OFFSET]
     147        stx %i6, [%g7 + I6_OFFSET]
     148        stx %i7, [%g7 + I7_OFFSET]
     149        add %g7, STACK_WINDOW_SAVE_AREA_SIZE, %g7
    143150        saved
    144151        retry
     
    174181 */
    175182.macro FILL_NORMAL_HANDLER_USERSPACE
    176         wr ASI_AIUP, %asi
    177         ldxa [%sp + STACK_BIAS + L0_OFFSET] %asi, %l0
    178         ldxa [%sp + STACK_BIAS + L1_OFFSET] %asi, %l1
    179         ldxa [%sp + STACK_BIAS + L2_OFFSET] %asi, %l2
    180         ldxa [%sp + STACK_BIAS + L3_OFFSET] %asi, %l3
    181         ldxa [%sp + STACK_BIAS + L4_OFFSET] %asi, %l4
    182         ldxa [%sp + STACK_BIAS + L5_OFFSET] %asi, %l5
    183         ldxa [%sp + STACK_BIAS + L6_OFFSET] %asi, %l6
    184         ldxa [%sp + STACK_BIAS + L7_OFFSET] %asi, %l7
    185         ldxa [%sp + STACK_BIAS + I0_OFFSET] %asi, %i0
    186         ldxa [%sp + STACK_BIAS + I1_OFFSET] %asi, %i1
    187         ldxa [%sp + STACK_BIAS + I2_OFFSET] %asi, %i2
    188         ldxa [%sp + STACK_BIAS + I3_OFFSET] %asi, %i3
    189         ldxa [%sp + STACK_BIAS + I4_OFFSET] %asi, %i4
    190         ldxa [%sp + STACK_BIAS + I5_OFFSET] %asi, %i5
    191         ldxa [%sp + STACK_BIAS + I6_OFFSET] %asi, %i6
    192         ldxa [%sp + STACK_BIAS + I7_OFFSET] %asi, %i7
    193         restored
    194         retry
    195 .endm
    196 
    197 /*
    198  * Macro used by the userspace during other fills.
    199  */
    200 .macro FILL_OTHER_HANDLER_USERSPACE
    201         wr ASI_AIUS, %asi
     183        wr %g0, ASI_AIUP, %asi
    202184        ldxa [%sp + STACK_BIAS + L0_OFFSET] %asi, %l0
    203185        ldxa [%sp + STACK_BIAS + L1_OFFSET] %asi, %l1
Note: See TracChangeset for help on using the changeset viewer.