Ignore:
Timestamp:
Aug 4, 2017, 2:03:44 PM (4 years ago)
Author:
alain
Message:

1) Introduce the TSAR hal_cpu_context_switch() function.
2) Introduce the generic vfs_kernel_move() function.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/hal/tsar_mips32/core/hal_exception.c

    r296 r317  
    7272        {
    7373        case XCODE_DBE:     // can be non fatal
    74             case XCODE_IBE:     // can be non fatal
     74            case XCODE_IBE:     // call generic excepton handler for a MMU exception
    7575        {
    76             // call generic excepton handler for a MMU exception
    7776                    error = do_exception( this , true );
    7877        }
     
    8079
    8180            case XCODE_CPU:    // can be non fatal
     81                           // call generic excepton handler for a FPU exception
    8282        {
    8383            if( ((regs_tbl[UZ_CR] >> 28) & 0x3) == 1 )  // unavailable FPU
    8484            {
    85                 // call generic excepton handler for a FPU exception
    8685                error = do_exception( this , false );
    8786            }
    8887            else
    8988            {
    90                         printk("\n[ERROR] in thread %x / unsupported coprocessor type\n",
    91                                this->trdid );
    9289                        error = EXCP_USER_ERROR;
    9390            }
     
    9693
    9794        case XCODE_OVR:   // user fatal error
     95        case XCODE_RI:    // user fatal error
     96        case XCODE_ADEL:  // user fatal error
     97        case XCODE_ADES:  // kill process
    9898        {
    99             printk("\n[ERROR] in thread %x / arithmetic overflow\n",
    100                            this->trdid );
    10199                    error = EXCP_USER_ERROR;
    102100        }
    103101            break;
    104102
    105         case XCODE_RI:   // user fatal error
    106         {
    107             printk("\n[ERROR] in thread %x / Illegal Codop\n",
    108                            this->trdid );
    109                     error = EXCP_USER_ERROR;
    110         }
    111         break;
    112 
    113         case XCODE_ADEL: // user fatal error
    114 
    115         case XCODE_ADES:
    116         {
    117             printk("\n[ERROR] in thread %x / illegal address\n",
    118                            this->trdid );
    119                     error = EXCP_USER_ERROR;
    120         }
    121                 break;
    122 
    123103        default:
    124104        {
    125             printk("\n[PANIC] in %s for thread %x / illegal XCODE value = %x\n",
    126                            __FUNCTION__ , this->trdid , excCode );
    127                     error = EXCP_USER_ERROR;
     105                    error = EXCP_KERNEL_PANIC;
    128106        }
    129107        }
    130108   
    131109    // analyse error code
    132         if( error == EXCP_USER_ERROR )      //  user error => kill the user process and return
     110        if( error == EXCP_USER_ERROR )          //  user error => kill user process
    133111        {
    134112        hal_exception_dump( this , regs_tbl );
     
    150128
    151129    if( this->type == THREAD_USER )
    152     printk("\n================= USER ERROR =======================================\n");
     130    printk("\n================= USER ERROR / cycle %d ====================\n",
     131           hal_time_stamp() );
    153132    else
    154     printk("\n================= KERNEL PANIC =====================================\n");
     133    printk("\n================= KERNEL PANIC / cycle %d ==================\n",
     134           hal_time_stamp() );
    155135
    156136        printk("  thread type = %s / trdid = %x / pid %x / core[%x,%d]\n"
Note: See TracChangeset for help on using the changeset viewer.