Changeset 9928240 in mainline for kernel/arch/ia64/src/ivt.S


Ignore:
Timestamp:
2014-10-12T11:18:49Z (10 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
416ef49
Parents:
0b49d4e
Message:

Use exc_dispatcher() for ia64 interruptions.

This is necessary for proper cycle accounting and also CPU state
tracking (idle / non-idle). Syscalls continue to use a different
path, but call syscall_handler() eventually. The speculation
vector needs to be handled differently, outside of exc_dispatch().

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia64/src/ivt.S

    r0b49d4e r9928240  
    3131#include <arch/register.h>
    3232#include <arch/mm/page.h>
     33#include <arch/interrupt.h>
    3334#include <arch/istate_struct.h>
    3435#include <align.h>
     
    3940
    4041/** Partitioning of bank 0 registers. */
    41 #define R_OFFS          r16
     42#define R_VECTOR        r16
    4243#define R_HANDLER       r17
    4344#define R_RET           r18
    44 #define R_TMP           r19
    4545#define R_KSTACK_BSP    r22     /* keep in sync with before_thread_runs_arch() */
    4646#define R_KSTACK        r23     /* keep in sync with before_thread_runs_arch() */
    4747
    4848/* Speculation vector handler */
    49 .macro SPECULATION_VECTOR_HANDLER offs
    50     .org ivt + \offs
     49.macro SPECULATION_VECTOR_HANDLER vector
     50    .org ivt + \vector * 0x100
    5151
    5252    /* 1. Save predicates, IIM, IIP, IPSR and ISR CR's in bank 0 registers. */
     
    9494 * @param handler Interrupt handler address.
    9595 */
    96 .macro HEAVYWEIGHT_HANDLER offs, handler=universal_handler
    97     .org ivt + \offs
    98         mov R_OFFS = \offs
     96.macro HEAVYWEIGHT_HANDLER vector, handler=exc_dispatch
     97    .org ivt + \vector * 0x100
     98        mov R_VECTOR = \vector
    9999        movl R_HANDLER = \handler ;;
    100100        br heavyweight_handler
     
    165165         * copy input parameters to stack.
    166166         */
    167         mov R_TMP = 0x2c00 ;;
    168         cmp.eq p6, p5 = R_OFFS, R_TMP ;;
     167        cmp.eq p6, p5 = EXC_BREAK_INSTRUCTION, R_VECTOR ;;
    169168       
    170169        /*
     
    309308        mov loc1 = R_RET        /* b0 belonging to interrupted context */
    310309        mov loc2 = R_HANDLER
    311         mov out0 = R_OFFS
     310        mov out0 = R_VECTOR
    312311       
    313312        add out1 = STACK_SCRATCH_AREA_SIZE, r12
     
    543542.align 32768
    544543ivt:
    545         HEAVYWEIGHT_HANDLER 0x0000
    546         HEAVYWEIGHT_HANDLER 0x0400
    547         HEAVYWEIGHT_HANDLER 0x0800
    548         HEAVYWEIGHT_HANDLER 0x0c00 alternate_instruction_tlb_fault
    549         HEAVYWEIGHT_HANDLER 0x1000 alternate_data_tlb_fault
    550         HEAVYWEIGHT_HANDLER 0x1400 data_nested_tlb_fault
    551         HEAVYWEIGHT_HANDLER 0x1800
    552         HEAVYWEIGHT_HANDLER 0x1c00
    553         HEAVYWEIGHT_HANDLER 0x2000 data_dirty_bit_fault
    554         HEAVYWEIGHT_HANDLER 0x2400 instruction_access_bit_fault
    555         HEAVYWEIGHT_HANDLER 0x2800 data_access_bit_fault
    556         HEAVYWEIGHT_HANDLER 0x2c00 break_instruction
    557         HEAVYWEIGHT_HANDLER 0x3000 external_interrupt   /* For external interrupt, heavyweight handler is used. */
    558         HEAVYWEIGHT_HANDLER 0x3400
    559         HEAVYWEIGHT_HANDLER 0x3800
    560         HEAVYWEIGHT_HANDLER 0x3c00
    561         HEAVYWEIGHT_HANDLER 0x4000
    562         HEAVYWEIGHT_HANDLER 0x4400
    563         HEAVYWEIGHT_HANDLER 0x4800
    564         HEAVYWEIGHT_HANDLER 0x4c00
    565 
    566         HEAVYWEIGHT_HANDLER 0x5000 page_not_present
    567         HEAVYWEIGHT_HANDLER 0x5100
    568         HEAVYWEIGHT_HANDLER 0x5200
    569         HEAVYWEIGHT_HANDLER 0x5300 data_access_rights_fault
    570         HEAVYWEIGHT_HANDLER 0x5400 general_exception
    571         HEAVYWEIGHT_HANDLER 0x5500 disabled_fp_register
    572         HEAVYWEIGHT_HANDLER 0x5600
    573         SPECULATION_VECTOR_HANDLER 0x5700
    574         HEAVYWEIGHT_HANDLER 0x5800
    575         HEAVYWEIGHT_HANDLER 0x5900
    576         HEAVYWEIGHT_HANDLER 0x5a00
    577         HEAVYWEIGHT_HANDLER 0x5b00
    578         HEAVYWEIGHT_HANDLER 0x5c00
    579         HEAVYWEIGHT_HANDLER 0x5d00
    580         HEAVYWEIGHT_HANDLER 0x5e00
    581         HEAVYWEIGHT_HANDLER 0x5f00
    582        
    583         HEAVYWEIGHT_HANDLER 0x6000
    584         HEAVYWEIGHT_HANDLER 0x6100
    585         HEAVYWEIGHT_HANDLER 0x6200
    586         HEAVYWEIGHT_HANDLER 0x6300
    587         HEAVYWEIGHT_HANDLER 0x6400
    588         HEAVYWEIGHT_HANDLER 0x6500
    589         HEAVYWEIGHT_HANDLER 0x6600
    590         HEAVYWEIGHT_HANDLER 0x6700
    591         HEAVYWEIGHT_HANDLER 0x6800
    592         HEAVYWEIGHT_HANDLER 0x6900
    593         HEAVYWEIGHT_HANDLER 0x6a00
    594         HEAVYWEIGHT_HANDLER 0x6b00
    595         HEAVYWEIGHT_HANDLER 0x6c00
    596         HEAVYWEIGHT_HANDLER 0x6d00
    597         HEAVYWEIGHT_HANDLER 0x6e00
    598         HEAVYWEIGHT_HANDLER 0x6f00
    599 
    600         HEAVYWEIGHT_HANDLER 0x7000
    601         HEAVYWEIGHT_HANDLER 0x7100
    602         HEAVYWEIGHT_HANDLER 0x7200
    603         HEAVYWEIGHT_HANDLER 0x7300
    604         HEAVYWEIGHT_HANDLER 0x7400
    605         HEAVYWEIGHT_HANDLER 0x7500
    606         HEAVYWEIGHT_HANDLER 0x7600
    607         HEAVYWEIGHT_HANDLER 0x7700
    608         HEAVYWEIGHT_HANDLER 0x7800
    609         HEAVYWEIGHT_HANDLER 0x7900
    610         HEAVYWEIGHT_HANDLER 0x7a00
    611         HEAVYWEIGHT_HANDLER 0x7b00
    612         HEAVYWEIGHT_HANDLER 0x7c00
    613         HEAVYWEIGHT_HANDLER 0x7d00
    614         HEAVYWEIGHT_HANDLER 0x7e00
    615         HEAVYWEIGHT_HANDLER 0x7f00
     544        HEAVYWEIGHT_HANDLER 0x00
     545        HEAVYWEIGHT_HANDLER 0x04
     546        HEAVYWEIGHT_HANDLER 0x08
     547        HEAVYWEIGHT_HANDLER 0x0c
     548        HEAVYWEIGHT_HANDLER 0x10
     549        HEAVYWEIGHT_HANDLER 0x14
     550        HEAVYWEIGHT_HANDLER 0x18
     551        HEAVYWEIGHT_HANDLER 0x1c
     552        HEAVYWEIGHT_HANDLER 0x20
     553        HEAVYWEIGHT_HANDLER 0x24
     554        HEAVYWEIGHT_HANDLER 0x28
     555        HEAVYWEIGHT_HANDLER 0x2c break_instruction
     556        HEAVYWEIGHT_HANDLER 0x30
     557        HEAVYWEIGHT_HANDLER 0x34
     558        HEAVYWEIGHT_HANDLER 0x38
     559        HEAVYWEIGHT_HANDLER 0x3c
     560        HEAVYWEIGHT_HANDLER 0x40
     561        HEAVYWEIGHT_HANDLER 0x44
     562        HEAVYWEIGHT_HANDLER 0x48
     563        HEAVYWEIGHT_HANDLER 0x4c
     564
     565        HEAVYWEIGHT_HANDLER 0x50
     566        HEAVYWEIGHT_HANDLER 0x51
     567        HEAVYWEIGHT_HANDLER 0x52
     568        HEAVYWEIGHT_HANDLER 0x53
     569        HEAVYWEIGHT_HANDLER 0x54
     570        HEAVYWEIGHT_HANDLER 0x55
     571        HEAVYWEIGHT_HANDLER 0x56
     572        SPECULATION_VECTOR_HANDLER 0x57
     573        HEAVYWEIGHT_HANDLER 0x58
     574        HEAVYWEIGHT_HANDLER 0x59
     575        HEAVYWEIGHT_HANDLER 0x5a
     576        HEAVYWEIGHT_HANDLER 0x5b
     577        HEAVYWEIGHT_HANDLER 0x5c
     578        HEAVYWEIGHT_HANDLER 0x5d
     579        HEAVYWEIGHT_HANDLER 0x5e
     580        HEAVYWEIGHT_HANDLER 0x5f
     581       
     582        HEAVYWEIGHT_HANDLER 0x60
     583        HEAVYWEIGHT_HANDLER 0x61
     584        HEAVYWEIGHT_HANDLER 0x62
     585        HEAVYWEIGHT_HANDLER 0x63
     586        HEAVYWEIGHT_HANDLER 0x64
     587        HEAVYWEIGHT_HANDLER 0x65
     588        HEAVYWEIGHT_HANDLER 0x66
     589        HEAVYWEIGHT_HANDLER 0x67
     590        HEAVYWEIGHT_HANDLER 0x68
     591        HEAVYWEIGHT_HANDLER 0x69
     592        HEAVYWEIGHT_HANDLER 0x6a
     593        HEAVYWEIGHT_HANDLER 0x6b
     594        HEAVYWEIGHT_HANDLER 0x6c
     595        HEAVYWEIGHT_HANDLER 0x6d
     596        HEAVYWEIGHT_HANDLER 0x6e
     597        HEAVYWEIGHT_HANDLER 0x6f
     598
     599        HEAVYWEIGHT_HANDLER 0x70
     600        HEAVYWEIGHT_HANDLER 0x71
     601        HEAVYWEIGHT_HANDLER 0x72
     602        HEAVYWEIGHT_HANDLER 0x73
     603        HEAVYWEIGHT_HANDLER 0x74
     604        HEAVYWEIGHT_HANDLER 0x75
     605        HEAVYWEIGHT_HANDLER 0x76
     606        HEAVYWEIGHT_HANDLER 0x77
     607        HEAVYWEIGHT_HANDLER 0x78
     608        HEAVYWEIGHT_HANDLER 0x79
     609        HEAVYWEIGHT_HANDLER 0x7a
     610        HEAVYWEIGHT_HANDLER 0x7b
     611        HEAVYWEIGHT_HANDLER 0x7c
     612        HEAVYWEIGHT_HANDLER 0x7d
     613        HEAVYWEIGHT_HANDLER 0x7e
     614        HEAVYWEIGHT_HANDLER 0x7f
Note: See TracChangeset for help on using the changeset viewer.