Ignore:
Timestamp:
Dec 12, 2014, 4:55:06 PM (10 years ago)
Author:
alain
Message:

1) Introducing a hierarchical, distributed lock, implemented as a

Sliced Binary Tree (sbt_lock_t) in the locks.c and locks.h files.

2) Introducing a kernel level distributed, remote_malloc() service,

In the kernel_malloc.c and kernel_malloc.h files.
This service requires one heap[x][y] global vseg per cluster.
This service is used by the distributed lock.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • soft/giet_vm/giet_common/tty0.c

    r455 r466  
    1010#include <hard_config.h>
    1111#include <tty0.h>
     12#include <stdarg.h>
    1213#include <tty_driver.h>
    13 #include <stdarg.h>
    1414#include <utils.h>
    1515#include <locks.h>
     
    114114}
    115115
    116 //////////////////////////////////
    117 void _printf( char * format, ... )
    118 {
    119     va_list ap;
    120     va_start(ap, format);
    121     unsigned int save_sr;                   // to save SR value in critical section
    122 
    123     // get TTY lock
    124     _it_disable( &save_sr );
    125     _simple_lock_acquire( &_tty_tx_lock[0] );
     116//////////////////////////////////////////////////////////
     117static void _kernel_printf( char * format, va_list* args )
     118{
    126119
    127120printf_text:
     
    143136    }
    144137
    145     // release TTY lock
    146     _simple_lock_release( &_tty_tx_lock[0] );
    147     _it_restore( &save_sr );
    148 
    149     va_end(ap);
    150138    return;
    151139
     
    163151            case ('c'):             /* char conversion */
    164152            {
    165                 int val = va_arg( ap, int );
     153                int val = va_arg( *args , int );
    166154                len = 1;
    167155                buf[0] = val;
     
    171159            case ('d'):             /* 32 bits decimal signed  */
    172160            {
    173                 int val = va_arg( ap, int );
     161                int val = va_arg( *args , int );
    174162                if (val < 0)
    175163                {
     
    188176            case ('u'):             /* 32 bits decimal unsigned  */
    189177            {
    190                 unsigned int val = va_arg( ap, unsigned int );
     178                unsigned int val = va_arg( *args , unsigned int );
    191179                for(i = 0; i < 10; i++)
    192180                {
     
    200188            case ('x'):             /* 32 bits hexadecimal unsigned */
    201189            {
    202                 unsigned int val = va_arg( ap, unsigned int );
     190                unsigned int val = va_arg( *args , unsigned int );
    203191                if ( _tty0_write( "0x" , 2 ) ) goto return_error;
    204192                for(i = 0; i < 8; i++)
     
    213201            case ('l'):            /* 64 bits hexadecimal unsigned */
    214202            {
    215                 unsigned long long val = va_arg( ap, unsigned long long );
     203                unsigned long long val = va_arg( *args , unsigned long long );
    216204                if ( _tty0_write( "0x" , 2 ) ) goto return_error;
    217205                for(i = 0; i < 16; i++)
     
    226214            case ('s'):             /* string */
    227215            {
    228                 char* str = va_arg( ap, char* );
     216                char* str = va_arg( *args , char* );
    229217                while (str[len])
    230218                {
     
    246234
    247235    {
    248         // release TTY lock
    249         _simple_lock_release( &_tty_tx_lock[0] );
    250         _it_restore( &save_sr );
    251 
    252         // try to print a non protected error message...
     236        // try to print an error message and exit...
    253237        unsigned int procid     = _get_procid();
    254238        unsigned int x          = (procid >> (Y_WIDTH + P_WIDTH)) & ((1<<X_WIDTH)-1);
    255239        unsigned int y          = (procid >> P_WIDTH) & ((1<<Y_WIDTH)-1);
    256240        unsigned int lpid       = procid & ((1<<P_WIDTH)-1);
    257 
    258241        _puts("\n\n[GIET ERROR] in _printf() for processor[");
    259242        _putd( x );
     
    266249        _exit();
    267250    }
    268 }  // end _printf()
     251}  // end _kernel_printf()
     252
     253///////////////////////////////////////
     254void _nolock_printf( char* format, ...)
     255{
     256    va_list   args;
     257
     258    va_start( args , format );
     259    _kernel_printf( format , &args );
     260    va_end( args );
     261}
     262////////////////////////////////
     263void _printf( char* format, ...)
     264{
     265    va_list       args;
     266    unsigned int  save_sr;
     267
     268    // get TTY0 lock
     269    _it_disable( &save_sr );
     270    _sbt_lock_acquire( &_tty_tx_lock[0] );
     271
     272    va_start( args , format );
     273    _kernel_printf( format , &args );
     274    va_end( args );
     275
     276    // release TTY0 lock
     277    _sbt_lock_release( &_tty_tx_lock[0] );
     278    _it_restore( &save_sr );
     279}
    269280
    270281
Note: See TracChangeset for help on using the changeset viewer.