Changeset 83817ea in mainline


Ignore:
Timestamp:
2005-11-07T15:10:49Z (19 years ago)
Author:
Jakub Vana <jakub.vana@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a725deb
Parents:
17a20bc
Message:

Context restore in HEAVYWEIGHT handlers

Location:
arch/ia64
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/include/stack.h

    r17a20bc r83817ea  
    3030#define __ia64_STACK_H__
    3131
    32 #define STACK_ITEM_SIZE                 16
     32#define STACK_ITEM_SIZE                 8
    3333#define STACK_ALIGNMENT                 16
    3434#define STACK_SCRATCH_AREA_SIZE         16
  • arch/ia64/src/interrupt.c

    r17a20bc r83817ea  
    4444        ivr.value = ivr_read();
    4545        srlz_d();
    46        
     46
     47/*      printf("Interrupr\n");
     48*/     
    4749        switch(ivr.vector) {
    4850            case INTERRUPT_TIMER:
    4951                it_interrupt();
    50                 panic("cpu%d: timer interrupt\n", CPU->id);
    5152                break;
    5253            case INTERRUPT_SPURIOUS:
  • arch/ia64/src/ivt.S

    r17a20bc r83817ea  
    256256heavyweight_handler_finalize:
    257257    /* 16. RSE switch to interrupted context */
    258        
     258
     259/********************************************************************************************/
     260
     261
     262
     263        .auto
     264        cover                   /*Allocate zerro size frame (Step 1(from Intel Docs))*/
     265
     266        add r31 = STACK_SCRATCH_AREA_SIZE, r12;;
     267
     268        mov r28 = ar.bspstore   /*Calculate loadrs (step 2)*/
     269        ld8 r29 = [r31], +8     
     270        sub r27 = r29 , r28
     271        shl r27 = r27, 16
     272
     273        mov r24 = ar.rsc
     274        and r30 = ~3, r24
     275        or  r24 = r30 , r27     
     276        mov ar.rsc = r24        /* place RSE in enforced lazy mode */
     277
     278
     279
     280        loadrs                  /*(Step 3)*/
     281
     282
     283                                /*Read saved registers*/
     284        ld8 r28 = [r31], +8     /*ar.bspstore*/
     285        ld8 r27 = [r31], +8     /*ar.rnat*/
     286        ld8 r26 = [r31], +8     /*cr.ifs*/
     287        ld8 r25 = [r31], +8     /*ar.pfs*/
     288        ld8 r24 = [r31], +8     /*ar.rsc*/
     289
     290
     291        mov ar.bspstore = r28   /*(Step 4)*/
     292        mov ar.rnat = r27       /*(Step 5)*/
     293
     294        mov ar.pfs = r25        /*(Step 6)*/
     295        mov cr.ifs = r26       
     296
     297        mov ar.rsc = r24        /*(Step 7)*/
     298
     299
     300        .explicit       
     301
     302
     303/********************************************************************************************/
     304
     305
     306
    259307    /* 17. restore interruption state from memory stack */
     308
     309        ld8 r28 = [r31] , +8 ;; /* load cr.ifa */               
     310        ld8 r27 = [r31] , +8 ;; /* load cr.isr */
     311        ld8 r26 = [r31] , +8 ;; /* load cr.iipa */
     312        ld8 r25 = [r31] , +8 ;; /* load cr.ipsr */
     313        ld8 r24 = [r31] , +8 ;; /* load cr.iip */
     314
     315
     316        mov cr.iip = r24
     317        mov cr.ipsr = r25
     318        mov cr.iipa = r26
     319        mov cr.isr = r27
     320        mov cr.ifa = r28
     321
     322
    260323       
    261324    /* 18. restore predicate registers from memory stack */
     325
     326
     327        ld8 r29 = [r31] , -8 ;; /* load predicate registers */
     328        mov pr =r29 ;;
     329       
     330        add r12 = STACK_FRAME_SIZE,r12;;
    262331       
    263332    /* 19. return from interruption */
    264         rfi
    265 
    266 
     333        rfi;;
    267334
    268335
Note: See TracChangeset for help on using the changeset viewer.