Changeset 528


Ignore:
Timestamp:
Sep 21, 2018, 10:15:58 PM (5 years ago)
Author:
nicolas.van.phan@…
Message:

Change usage of y_max/x_max for iterating through clusters.

This is due to empty cluster (without memory or not CPU cluster),
like IO cluster of MIPS32 LETI architecture.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/kernel/fs/vfs.c

    r527 r528  
    11301130    uint32_t  y_size    = LOCAL_CLUSTER->y_size;
    11311131    uint32_t  y_width   = LOCAL_CLUSTER->y_width;
    1132     uint32_t  index     = ( hal_get_cycles() + hal_get_gid() ) % (x_size * y_size);
    1133     uint32_t  x         = index / y_size;   
    1134     uint32_t  y         = index % y_size;
     1132    uint32_t  index     = ( hal_get_cycles() + hal_get_gid() ) % (x_size * (y_size - 1)); // [FIXME]
     1133    uint32_t  x         = index / (y_size - 1); // [FIXME]
     1134    uint32_t  y         = index % (y_size - 1); // [FIXME]
    11351135
    11361136    return (x<<y_width) + y;
  • trunk/kernel/kern/kernel_init.c

    r517 r528  
    250250            for( x = 0 ; x < info->x_size ; x++ )
    251251            {
    252                 for( y = 0 ; y < info->y_size ; y++ )
     252                for( y = 0 ; y < info->y_size - 1; y++ ) // [FIXME]
    253253                {
    254254                    cxy_t  cxy = (x<<info->y_width) + y;
     
    316316            for( x = 0 ; x < info->x_size ; x++ )
    317317            {
    318                 for( y = 0 ; y < info->y_size ; y++ )
     318                for( y = 0 ; y < info->y_size - 1; y++ ) // [FIXME]
    319319                {
    320320                    cxy_t  cxy = (x<<info->y_width) + y;
     
    439439
    440440                // compute target cluster for chdev[func,channel,direction]
    441                 uint32_t offset     = ext_chdev_gid % ( info->x_size * info->y_size );
    442                 uint32_t cx         = offset / info->y_size;
    443                 uint32_t cy         = offset % info->y_size;
     441                uint32_t offset     = ext_chdev_gid % ( info->x_size * (info->y_size - 1) ); // [FIXME]
     442                uint32_t cx         = offset / (info->y_size - 1); // [FIXME]
     443                uint32_t cy         = offset % (info->y_size - 1); // [FIXME]
    444444                uint32_t target_cxy = (cx<<info->y_width) + cy;
    445445
     
    479479                    for( x = 0 ; x < info->x_size ; x++ )
    480480                    {
    481                         for( y = 0 ; y < info->y_size ; y++ )
     481                        for( y = 0 ; y < info->y_size - 1; y++ ) // [FIXME]
    482482                        {
    483483                            cxy_t  cxy = (x<<info->y_width) + y;
     
    562562    for( x = 0 ; x < info->x_size ; x++ )
    563563    {
    564         for( y = 0 ; y < info->y_size ; y++ )
     564        for( y = 0 ; y < info->y_size - 1; y++ ) // [FIXME]
    565565        {
    566566            cxy_t  cxy = (x<<info->y_width) + y;
     
    576576    for( x = 0 ; x < info->x_size ; x++ )
    577577    {
    578         for( y = 0 ; y < info->y_size ; y++ )
     578        for( y = 0 ; y < info->y_size - 1; y++ ) // [FIXME]
    579579        {
    580580            cxy_t  cxy = (x<<info->y_width) + y;
     
    613613            for( x = 0 ; x < info->x_size ; x++ )
    614614            {
    615                 for( y = 0 ; y < info->y_size ; y++ )
     615                for( y = 0 ; y < info->y_size - 1; y++ ) // [FIXME]
    616616                {
    617617                    cxy_t  cxy = (x<<info->y_width) + y;
     
    792792    thread->remote_locks = 0;
    793793
    794     // CP0 in cluster 0 initialises TXT0 chdev descriptor
    795     if( (core_lid == 0) && (core_cxy == 0) ) txt0_device_init( info );
    796 
    797     /////////////////////////////////////////////////////////////////////////////////
    798     if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ),
    799                                         (info->x_size * info->y_size) );
     794    // CP0 in I/O cluster initialises TXT0 chdev descriptor
     795    //if( (core_lid == 0) && (core_cxy == io_cxy) ) txt0_device_init( info );
     796    // CP0 in cluster 0 initializes TXT0 chdev descriptor
     797    if( core_cxy == 0 && core_lid == 0 ) txt0_device_init( info );
     798    // [FIXME]
     799
     800    /////////////////////////////////////////////////////////////////////////////////
     801    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
     802                                        (info->x_size * (info->y_size - 1)) );
    800803    barrier_wait( &local_barrier , info->cores_nr );
    801804    /////////////////////////////////////////////////////////////////////////////////
     
    834837
    835838    /////////////////////////////////////////////////////////////////////////////////
    836     if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ),
    837                                         (info->x_size * info->y_size) );
     839    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
     840                                        (info->x_size * (info->y_size - 1)) );
    838841    barrier_wait( &local_barrier , info->cores_nr );
    839842    /////////////////////////////////////////////////////////////////////////////////
     
    861864   
    862865    ////////////////////////////////////////////////////////////////////////////////
    863     if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ),
    864                                         (info->x_size * info->y_size) );
     866    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
     867                                        (info->x_size * (info->y_size - 1)) );
    865868    barrier_wait( &local_barrier , info->cores_nr );
    866869    ////////////////////////////////////////////////////////////////////////////////
     
    894897
    895898    /////////////////////////////////////////////////////////////////////////////////
    896     if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ),
    897                                         (info->x_size * info->y_size) );
     899    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
     900                                        (info->x_size * (info->y_size - 1)) );
    898901    barrier_wait( &local_barrier , info->cores_nr );
    899902    /////////////////////////////////////////////////////////////////////////////////
     
    9991002
    10001003    /////////////////////////////////////////////////////////////////////////////////
    1001     if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ),
    1002                                         (info->x_size * info->y_size) );
     1004    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
     1005                                        (info->x_size * (info->y_size - 1)) );
    10031006    barrier_wait( &local_barrier , info->cores_nr );
    10041007    /////////////////////////////////////////////////////////////////////////////////
     
    10601063
    10611064    /////////////////////////////////////////////////////////////////////////////////
    1062     if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ),
    1063                                         (info->x_size * info->y_size) );
     1065    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
     1066                                        (info->x_size * (info->y_size - 1)) );
    10641067    barrier_wait( &local_barrier , info->cores_nr );
    10651068    /////////////////////////////////////////////////////////////////////////////////
     
    10771080    /////////////////////////////////////////////////////////////////////////////////
    10781081
    1079     if( (core_lid ==  0) && (local_cxy == 0) )
     1082    if( (core_lid ==  0) && (local_cxy == 0) )  // [FIXME]
    10801083    {
    10811084        // create "dev" and "external" directories.
     
    10951098
    10961099    /////////////////////////////////////////////////////////////////////////////////
    1097     if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ),
    1098                                         (info->x_size * info->y_size) );
     1100    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
     1101                                        (info->x_size * (info->y_size - 1)) );
    10991102    barrier_wait( &local_barrier , info->cores_nr );
    11001103    /////////////////////////////////////////////////////////////////////////////////
     
    11161119    if( core_lid == 0 )
    11171120    {
    1118         // get extended pointer on "extend" field of VFS context for DEVFS in cluster 0
    1119         xptr_t  extend_xp = XPTR( 0 , &fs_context[FS_TYPE_DEVFS].extend );
     1121        // get extended pointer on "extend" field of VFS context for DEVFS in cluster IO
     1122        xptr_t  extend_xp = XPTR( 0 , &fs_context[FS_TYPE_DEVFS].extend ); // [FIXME]
    11201123
    11211124        // get pointer on DEVFS context in cluster 0
     
    11321135
    11331136    /////////////////////////////////////////////////////////////////////////////////
    1134     if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ),
    1135                                         (info->x_size * info->y_size) );
     1137    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
     1138                                        (info->x_size * (info->y_size - 1)) );
    11361139    barrier_wait( &local_barrier , info->cores_nr );
    11371140    /////////////////////////////////////////////////////////////////////////////////
     
    11581161
    11591162    /////////////////////////////////////////////////////////////////////////////////
    1160     if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ),
    1161                                         (info->x_size * info->y_size) );
     1163    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
     1164                                        (info->x_size * (info->y_size - 1)) );
    11621165    barrier_wait( &local_barrier , info->cores_nr );
    11631166    /////////////////////////////////////////////////////////////////////////////////
     
    11781181    /////////////////////////////////////////////////////////////////////////////////
    11791182   
    1180     if( (core_lid == 0) && (local_cxy == 0) )
     1183    if( (core_lid ==  0) && (local_cxy == 0) ) // [FIXME]
    11811184    {
    11821185        print_banner( (info->x_size * info->y_size) , info->cores_nr );
  • trunk/kernel/mm/vmm.c

    r492 r528  
    13871387        uint32_t y_size  = LOCAL_CLUSTER->y_size;
    13881388        uint32_t y_width = LOCAL_CLUSTER->y_width;
    1389         uint32_t index   = vpn & ((x_size * y_size) - 1);
    1390         uint32_t x       = index / y_size;
    1391         uint32_t y       = index % y_size;
     1389        uint32_t index   = vpn & ((x_size * (y_size - 1)) - 1); // [FIXME]
     1390        uint32_t x       = index / (y_size - 1); // [FIXME]
     1391        uint32_t y       = index % (y_size - 1); // [FIXME]
    13921392        page_cxy         = (x<<y_width) + y;
    13931393    }
  • trunk/user/init/init.c

    r475 r528  
    9090 
    9191#if DEBUG_PROCESS_INIT
    92 unsigned int  x_size;        // number of clusters in a row
    93 unsigned int  y_size;        // number of clusters in a column
    94 unsigned int  ncores;        // number of cores per cluster
    95 unsigned int  x;             // cluster x coordinate
    96 unsigned int  y;             // cluster y coordinate
    97 unsigned int  cxy;           // cluster identifier
    98 unsigned int  lid;           // core local index
     92{
     93    unsigned int  x_size;        // number of clusters in a row
     94    unsigned int  y_size;        // number of clusters in a column
     95    unsigned int  ncores;        // number of cores per cluster
     96    unsigned int  x;             // cluster x coordinate
     97    unsigned int  y;             // cluster y coordinate
     98    unsigned int  cxy;           // cluster identifier
     99    unsigned int  lid;           // core local index
    99100
    100 // get hardware config
    101 get_config( &x_size , &y_size , &ncores );
    102    
    103 // INIT displays processes and threads in all clusters
    104 for( x = 0 ; x < x_size ; x++ )
    105 {
    106     for( y = 0 ; y < y_size ; y++ )
     101    // get hardware config
     102    get_config( &x_size , &y_size , &ncores );
     103
     104    // INIT displays processes and threads in all clusters
     105    for( x = 0 ; x < x_size ; x++ )
    107106    {
    108         cxy = CXY_FROM_XY( x , y );
    109         display_cluster_processes( cxy );
    110         for( lid = 0 ; lid < ncores ; lid++ )
    111         {
    112             display_sched( cxy , lid );
     107        for( y = 0 ; y < y_size - 1 ; y++ )
     108        {
     109            cxy = CXY_FROM_XY( x , y );
     110            display_cluster_processes( cxy );
     111            for( lid = 0 ; lid < ncores ; lid++ )
     112            {
     113                display_sched( cxy , lid );
     114            }
    113115        }
    114116    }
Note: See TracChangeset for help on using the changeset viewer.