Changeset 415 for trunk/kernel/kern


Ignore:
Timestamp:
Dec 22, 2017, 1:16:59 PM (6 years ago)
Author:
alain
Message:

Few bugs.

Location:
trunk/kernel/kern
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/kernel/kern/printk.h

    r409 r415  
    331331#endif
    332332
    333 #if CONFIG_SIGNAL_DEBUG
    334 #define signal_dmsg(...)   if(hal_time_stamp() > CONFIG_SIGNAL_DEBUG) printk(__VA_ARGS__)
    335 #else
    336 #define signal_dmsg(...)
     333#if CONFIG_SIGACTION_DEBUG
     334#define sigaction_dmsg(...)   if(hal_time_stamp() > CONFIG_SIGACTION_DEBUG) printk(__VA_ARGS__)
     335#else
     336#define sigaction_dmsg(...)
    337337#endif
    338338
  • trunk/kernel/kern/process.c

    r409 r415  
    125125    uint32_t    stdout_id;
    126126    uint32_t    stderr_id;
     127    error_t     error;
    127128
    128129process_dmsg("\n[DBG] %s : core[%x,%d] enters for process %x / ppid = %x\n",
     
    139140
    140141    // initialize vmm as empty
    141     vmm_init( process );
     142    error = vmm_init( process );
     143    assert( (error == 0) , __FUNCTION__ , "cannot initialize VMM\n" );
     144 
    142145
    143146process_dmsg("\n[DBG] %s : core[%x,%d] / vmm empty for process %x\n",
     
    259262                           xptr_t      reference_process_xp )
    260263{
     264    error_t error;
     265
    261266    // get reference process cluster and local pointer
    262267    cxy_t       ref_cxy = GET_CXY( reference_process_xp );
     
    272277
    273278    // reset local process vmm
    274     vmm_init( local_process );
     279    error = vmm_init( local_process );
     280    assert( (error == 0) , __FUNCTION__ , "cannot initialize VMM\n");
    275281
    276282    // reset process file descriptors array
     
    309315    // register new process descriptor in owner cluster manager copies_list
    310316    cluster_process_copies_link( local_process );
    311 
    312     // initialize signal manager TODO [AG]
    313317
    314318        hal_fence();
     
    397401    process_t        * process_ptr;       // local pointer on process copy
    398402
    399 signal_dmsg("\n[DBG] %s : enter for signal %s to process %x in cluster %x\n",
     403sigaction_dmsg("\n[DBG] %s : enter for signal %s to process %x in cluster %x\n",
    400404__FUNCTION__ , process_action_str( action_type ) , process , local_cxy );
    401405
     
    432436        process_ptr = (process_t *)GET_PTR( process_xp );
    433437
    434 printk("\n    @@@ %s : process = %x / pid = %x / ppid = %x\n",
     438sigaction_dmsg("\n[DBG] %s : process = %x / pid = %x / ppid = %x\n",
    435439__FUNCTION__ , process_ptr , process_ptr->pid , process_ptr->ppid );
    436440
     
    449453    sched_yield("BLOCKED on RPC");
    450454
    451 signal_dmsg("\n[DBG] %s : exit for signal %s to process %x in cluster %x\n",
     455sigaction_dmsg("\n[DBG] %s : exit for signal %s to process %x in cluster %x\n",
    452456__FUNCTION__ , process_action_str( action_type ) , process , local_cxy );
    453457
     
    471475    killer = CURRENT_THREAD;
    472476
    473 signal_dmsg("\n[DBG] %s : enter for process %x in cluster %x\n",
     477sigaction_dmsg("\n[DBG] %s : enter for process %x in cluster %x\n",
    474478__FUNCTION__ , process->pid , local_cxy );
    475479
     
    532536    }
    533537
    534 signal_dmsg("\n[DBG] %s : exit for process %x in cluster %x / %d threads blocked\n",
     538sigaction_dmsg("\n[DBG] %s : exit for process %x in cluster %x / %d threads blocked\n",
    535539__FUNCTION__ , process->pid , local_cxy , count );
    536540
     
    553557    killer = CURRENT_THREAD;
    554558
    555 signal_dmsg("\n[DBG] %s : enter for process %x in cluster %x\n",
     559sigaction_dmsg("\n[DBG] %s : enter for process %x in cluster %x\n",
    556560__FUNCTION__ , process->pid , local_cxy );
    557561
     
    586590    }
    587591
    588 signal_dmsg("\n[DBG] %s : exit for process %x in cluster %x / %d threads blocked\n",
     592sigaction_dmsg("\n[DBG] %s : exit for process %x in cluster %x / %d threads blocked\n",
    589593__FUNCTION__ , process->pid , local_cxy , req_count );
    590594
     
    607611    pid = process->pid;
    608612
    609 signal_dmsg("\n[DBG] %s : enter for process %x in cluster %x at cycle %d\n",
     613sigaction_dmsg("\n[DBG] %s : enter for process %x in cluster %x at cycle %d\n",
    610614__FUNCTION__ , pid , local_cxy , (uint32_t)hal_get_cycles() );
    611615
     
    648652    }
    649653
    650 signal_dmsg("\n[DBG] %s : exit for process %x in cluster %x at cycle %d\n",
     654sigaction_dmsg("\n[DBG] %s : exit for process %x in cluster %x at cycle %d\n",
    651655__FUNCTION__ , pid , local_cxy , (uint32_t)hal_get_cycles() );
    652656
     
    11811185__FUNCTION__, local_cxy, CURRENT_THREAD->core->lid );
    11821186
    1183     // re-initialize VMM
    1184     vmm_init( process );
     1187    // initialize VMM
     1188    error = vmm_init( process );
     1189        {
     1190                printk("\n[ERROR] in %s : cannot initialize VMM for process %x / path = %s\n",
     1191                __FUNCTION__, pid , path );
     1192        process_destroy( process );
     1193        return -1;
     1194        }
     1195
     1196    if( error )
    11851197
    11861198    // register "code" and "data" vsegs as well as entry-point and vfs_bin_xp
    11871199    // in VMM, using information contained in the elf file.
    1188         if( elf_load_process( path , process ) )
     1200        error = elf_load_process( path , process );
     1201
     1202    if( error )
    11891203        {
    11901204                printk("\n[ERROR] in %s : failed to access .elf file for process %x / path = %s\n",
  • trunk/kernel/kern/process.h

    r409 r415  
    5959enum process_sigactions
    6060{
    61     BLOCK_ALL_THREADS,
    62     UNBLOCK_ALL_THREADS,
    63     DELETE_ALL_THREADS,
     61    BLOCK_ALL_THREADS    = 11,
     62    UNBLOCK_ALL_THREADS  = 22,
     63    DELETE_ALL_THREADS   = 33,
    6464};
    6565
  • trunk/kernel/kern/rpc.c

    r409 r415  
    106106    rpc->lid       = core->lid;
    107107
     108printk("\n   @@@ enter %s : rpc_desc_cxy = %x / rpc_desc_ptr = %x / index = %d / &index = %x\n",
     109__FUNCTION__ , local_cxy , rpc , rpc->index , &rpc->index);
     110 
    108111    // build an extended pointer on the RPC descriptor
    109112        xptr_t   desc_xp = XPTR( local_cxy , rpc );
     
    176179    }
    177180   
     181printk("\n   @@@ exit %s : rpc_desc_cxy = %x / rpc_desc_ptr = %x / index = %d / &index = %x\n",
     182__FUNCTION__ , local_cxy , rpc , rpc->index , &rpc->index);
     183 
    178184}  // end rpc_send()
    179185
     
    245251    }
    246252
     253//@@@
     254sched_display( 0 );
     255//@@@
     256
    247257grpc_dmsg("\n[DBG] %s : core[%x,%d] / interrupted thread %s deschedules / cycle %d\n",
    248258__FUNCTION__, local_cxy, core->lid, thread_type_str(this->type), hal_time_stamp() );
     
    300310                while( 1 )  // internal loop
    301311            {
     312
    302313                    empty = local_fifo_get_item( rpc_fifo , (uint64_t *)&desc_xp );
    303314
     
    311322                        index = hal_remote_lw( XPTR( desc_cxy , &desc_ptr->index ) );
    312323
     324printk("\n   @@@ in %s : rpc_desc_cxy = %x / rpc_desc_ptr = %x / index = %d / &index = %x\n",
     325__FUNCTION__ , desc_cxy , desc_ptr , index , &desc_ptr->index );
     326 
    313327grpc_dmsg("\n[DBG] %s : core[%x,%d] / RPC thread %x / starts rpc %d / cycle %d\n",
    314 __FUNCTION__ , local_cxy , this->core->lid , this->trdid , index , hal_time_stamp() );
     328__FUNCTION__ , local_cxy , this->core->lid , this->trdid , index , (uint32_t)hal_get_cycles() );
    315329
    316330                    // call the relevant server function
     
    980994
    981995/////////////////////////////////////////////////////////////////////////////////////////
    982 // [9]     Marshaling functions attached to RPC_PROCESS_KILL (multicast / non blocking)
     996// [9] Marshaling functions attached to RPC_PROCESS_SIGACTION (multicast / non blocking)
    983997/////////////////////////////////////////////////////////////////////////////////////////
    984998
     
    9901004                                   xptr_t      client_xp )     // in
    9911005{
    992 signal_dmsg("\n[DBG] %s : enter for %s / thread %x on core[%x,%d] / cycle %d\n",
    993 __FUNCTION__ , process_action_str( sigaction ) , CURRENT_THREAD ,
     1006sigaction_dmsg("\n[DBG] %s : enter for %s (%d) / thread %x on core[%x,%d] / cycle %d\n",
     1007__FUNCTION__ , process_action_str( sigaction ) , sigaction , CURRENT_THREAD ,
    9941008local_cxy , CURRENT_THREAD->core->lid , hal_time_stamp() );
    9951009
     
    10071021    rpc_send( cxy , &rpc , false );
    10081022
    1009 signal_dmsg("\n[DBG] %s : exit for %s / thread %x on core[%x,%d] / cycle %d\n",
    1010 __FUNCTION__ , process_action_str( sigaction ) , CURRENT_THREAD ,
     1023sigaction_dmsg("\n[DBG] %s : exit for %s (%d) / thread %x on core[%x,%d] / cycle %d\n",
     1024__FUNCTION__ , process_action_str( sigaction ) , sigaction , CURRENT_THREAD ,
    10111025local_cxy , CURRENT_THREAD->core->lid , hal_time_stamp() );
    10121026
     
    10301044    client_xp = (xptr_t)               hal_remote_lwd( XPTR( client_cxy , &desc->args[3] ) );
    10311045   
    1032 signal_dmsg("\n[DBG] %s : enter for %s / thread %x on core[%x,%d] / cycle %d\n",
    1033 __FUNCTION__ , process_action_str( action ) , CURRENT_THREAD ,
     1046sigaction_dmsg("\n[DBG] %s : enter for %s (%d) / thread %x on core[%x,%d] / cycle %d\n",
     1047__FUNCTION__ , process_action_str( action ) , action , CURRENT_THREAD ,
    10341048local_cxy , CURRENT_THREAD->core->lid , hal_time_stamp() );
    10351049
     
    10391053    else if (action == UNBLOCK_ALL_THREADS ) process_unblock( process , rsp_xp , client_xp );
    10401054
    1041 signal_dmsg("\n[DBG] %s : exit for %s / thread %x on core[%x,%d] / cycle %d\n",
    1042 __FUNCTION__ , process_action_str( action ) , CURRENT_THREAD ,
     1055sigaction_dmsg("\n[DBG] %s : exit for %s (%d) / thread %x on core[%x,%d] / cycle %d\n",
     1056__FUNCTION__ , process_action_str( action ) , action , CURRENT_THREAD ,
    10431057local_cxy , CURRENT_THREAD->core->lid , hal_time_stamp() );
    10441058}
Note: See TracChangeset for help on using the changeset viewer.