Index: trunk/kernel/kern/kernel_init.c
===================================================================
--- trunk/kernel/kern/kernel_init.c	(revision 517)
+++ trunk/kernel/kern/kernel_init.c	(revision 528)
@@ -250,5 +250,5 @@
             for( x = 0 ; x < info->x_size ; x++ )
             {
-                for( y = 0 ; y < info->y_size ; y++ )
+                for( y = 0 ; y < info->y_size - 1; y++ ) // [FIXME]
                 {
                     cxy_t  cxy = (x<<info->y_width) + y;
@@ -316,5 +316,5 @@
             for( x = 0 ; x < info->x_size ; x++ )
             {
-                for( y = 0 ; y < info->y_size ; y++ )
+                for( y = 0 ; y < info->y_size - 1; y++ ) // [FIXME]
                 {
                     cxy_t  cxy = (x<<info->y_width) + y;
@@ -439,7 +439,7 @@
 
                 // compute target cluster for chdev[func,channel,direction]
-                uint32_t offset     = ext_chdev_gid % ( info->x_size * info->y_size );
-                uint32_t cx         = offset / info->y_size;
-                uint32_t cy         = offset % info->y_size;
+                uint32_t offset     = ext_chdev_gid % ( info->x_size * (info->y_size - 1) ); // [FIXME]
+                uint32_t cx         = offset / (info->y_size - 1); // [FIXME]
+                uint32_t cy         = offset % (info->y_size - 1); // [FIXME]
                 uint32_t target_cxy = (cx<<info->y_width) + cy;
 
@@ -479,5 +479,5 @@
                     for( x = 0 ; x < info->x_size ; x++ )
                     {
-                        for( y = 0 ; y < info->y_size ; y++ )
+                        for( y = 0 ; y < info->y_size - 1; y++ ) // [FIXME]
                         {
                             cxy_t  cxy = (x<<info->y_width) + y;
@@ -562,5 +562,5 @@
     for( x = 0 ; x < info->x_size ; x++ )
     {
-        for( y = 0 ; y < info->y_size ; y++ )
+        for( y = 0 ; y < info->y_size - 1; y++ ) // [FIXME]
         {
             cxy_t  cxy = (x<<info->y_width) + y;
@@ -576,5 +576,5 @@
     for( x = 0 ; x < info->x_size ; x++ )
     {
-        for( y = 0 ; y < info->y_size ; y++ )
+        for( y = 0 ; y < info->y_size - 1; y++ ) // [FIXME]
         {
             cxy_t  cxy = (x<<info->y_width) + y;
@@ -613,5 +613,5 @@
             for( x = 0 ; x < info->x_size ; x++ )
             {
-                for( y = 0 ; y < info->y_size ; y++ )
+                for( y = 0 ; y < info->y_size - 1; y++ ) // [FIXME]
                 {
                     cxy_t  cxy = (x<<info->y_width) + y;
@@ -792,10 +792,13 @@
     thread->remote_locks = 0;
 
-    // CP0 in cluster 0 initialises TXT0 chdev descriptor
-    if( (core_lid == 0) && (core_cxy == 0) ) txt0_device_init( info );
-
-    /////////////////////////////////////////////////////////////////////////////////
-    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), 
-                                        (info->x_size * info->y_size) );
+    // CP0 in I/O cluster initialises TXT0 chdev descriptor
+    //if( (core_lid == 0) && (core_cxy == io_cxy) ) txt0_device_init( info );
+    // CP0 in cluster 0 initializes TXT0 chdev descriptor
+    if( core_cxy == 0 && core_lid == 0 ) txt0_device_init( info );
+    // [FIXME]
+
+    /////////////////////////////////////////////////////////////////////////////////
+    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
+                                        (info->x_size * (info->y_size - 1)) );
     barrier_wait( &local_barrier , info->cores_nr );
     /////////////////////////////////////////////////////////////////////////////////
@@ -834,6 +837,6 @@
 
     /////////////////////////////////////////////////////////////////////////////////
-    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), 
-                                        (info->x_size * info->y_size) );
+    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
+                                        (info->x_size * (info->y_size - 1)) );
     barrier_wait( &local_barrier , info->cores_nr );
     /////////////////////////////////////////////////////////////////////////////////
@@ -861,6 +864,6 @@
     
     ////////////////////////////////////////////////////////////////////////////////
-    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), 
-                                        (info->x_size * info->y_size) );
+    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
+                                        (info->x_size * (info->y_size - 1)) );
     barrier_wait( &local_barrier , info->cores_nr );
     ////////////////////////////////////////////////////////////////////////////////
@@ -894,6 +897,6 @@
 
     /////////////////////////////////////////////////////////////////////////////////
-    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), 
-                                        (info->x_size * info->y_size) );
+    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
+                                        (info->x_size * (info->y_size - 1)) );
     barrier_wait( &local_barrier , info->cores_nr );
     /////////////////////////////////////////////////////////////////////////////////
@@ -999,6 +1002,6 @@
 
     /////////////////////////////////////////////////////////////////////////////////
-    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), 
-                                        (info->x_size * info->y_size) );
+    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
+                                        (info->x_size * (info->y_size - 1)) );
     barrier_wait( &local_barrier , info->cores_nr );
     /////////////////////////////////////////////////////////////////////////////////
@@ -1060,6 +1063,6 @@
 
     /////////////////////////////////////////////////////////////////////////////////
-    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), 
-                                        (info->x_size * info->y_size) );
+    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
+                                        (info->x_size * (info->y_size - 1)) );
     barrier_wait( &local_barrier , info->cores_nr );
     /////////////////////////////////////////////////////////////////////////////////
@@ -1077,5 +1080,5 @@
     /////////////////////////////////////////////////////////////////////////////////
 
-    if( (core_lid ==  0) && (local_cxy == 0) ) 
+    if( (core_lid ==  0) && (local_cxy == 0) )  // [FIXME]
     {
         // create "dev" and "external" directories.
@@ -1095,6 +1098,6 @@
 
     /////////////////////////////////////////////////////////////////////////////////
-    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), 
-                                        (info->x_size * info->y_size) );
+    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
+                                        (info->x_size * (info->y_size - 1)) );
     barrier_wait( &local_barrier , info->cores_nr );
     /////////////////////////////////////////////////////////////////////////////////
@@ -1116,6 +1119,6 @@
     if( core_lid == 0 )
     {
-        // get extended pointer on "extend" field of VFS context for DEVFS in cluster 0
-        xptr_t  extend_xp = XPTR( 0 , &fs_context[FS_TYPE_DEVFS].extend );
+        // get extended pointer on "extend" field of VFS context for DEVFS in cluster IO
+        xptr_t  extend_xp = XPTR( 0 , &fs_context[FS_TYPE_DEVFS].extend ); // [FIXME]
 
         // get pointer on DEVFS context in cluster 0
@@ -1132,6 +1135,6 @@
 
     /////////////////////////////////////////////////////////////////////////////////
-    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), 
-                                        (info->x_size * info->y_size) );
+    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
+                                        (info->x_size * (info->y_size - 1)) );
     barrier_wait( &local_barrier , info->cores_nr );
     /////////////////////////////////////////////////////////////////////////////////
@@ -1158,6 +1161,6 @@
 
     /////////////////////////////////////////////////////////////////////////////////
-    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ),
-                                        (info->x_size * info->y_size) );
+    if( core_lid == 0 ) remote_barrier( XPTR( 0 , &global_barrier ), // [FIXME]
+                                        (info->x_size * (info->y_size - 1)) );
     barrier_wait( &local_barrier , info->cores_nr );
     /////////////////////////////////////////////////////////////////////////////////
@@ -1178,5 +1181,5 @@
     /////////////////////////////////////////////////////////////////////////////////
     
-    if( (core_lid == 0) && (local_cxy == 0) ) 
+    if( (core_lid ==  0) && (local_cxy == 0) ) // [FIXME]
     {
         print_banner( (info->x_size * info->y_size) , info->cores_nr );
