Ignore:
Timestamp:
Oct 4, 2018, 11:50:21 PM (3 years ago)
Author:
alain
Message:

Complete restructuration of kernel locks.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/kernel/syscalls/sys_sem.c

    r469 r566  
    5151             uint32_t     * current_value )   // pointer on current value buffer
    5252{
    53         vseg_t         * vseg;
     53        vseg_t         * vseg;        // for vaddr check
    5454    error_t          error;
    55     uint32_t         current;     // semaphore current value
    56     xptr_t           sem_xp;      // extended pointer on semaphore
    5755
    5856    thread_t       * this    = CURRENT_THREAD;
     
    9088            // call relevant kernel function to initialize semaphore
    9189            error = remote_sem_create( (intptr_t)vaddr ,
    92                                        init_value,
    93                                        XPTR( local_cxy , &sem_xp ) );
    94 
     90                                       init_value );
    9591            if ( error )
    9692            {
     
    10399                return -1;
    104100            }
    105 
    106             break;
    107         }
     101        }
     102        break;
    108103        //////////////////
    109104        case SEM_GETVALUE:
     
    115110
    116111#if DEBUG_SYSCALLS_ERROR
    117 printk("\n[ERROR] in %s GETVALUE: unmapped target buffer %x / thread %x in process %x / cycle %d\n",
     112printk("\n[ERROR] in %s GETVALUE: unmapped buffer %x / thread %x in process %x / cycle %d\n",
    118113__FUNCTION__ , (intptr_t)current_value, this->trdid, process->pid, (uint32_t)hal_get_cycles() );
    119114vmm_display( process , false );
     
    124119
    125120            // get extended pointer on remote semaphore
    126             sem_xp = remote_sem_from_vaddr( (intptr_t)vaddr );
     121            xptr_t sem_xp = remote_sem_from_ident( (intptr_t)vaddr );
    127122
    128123            // check semaphore registered
     
    139134
    140135            // call relevant kernel function to get semaphore current value
     136            uint32_t current;
    141137                    remote_sem_get_value( sem_xp , &current );
    142138 
    143139            // return value to user
    144140            hal_copy_to_uspace( current_value , &current , sizeof(uint32_t) );
    145 
    146             break;
    147         }
     141        }
     142        break;
    148143        //////////////
    149144            case SEM_WAIT:
    150145        { 
    151146            // get extended pointer on remote semaphore
    152             sem_xp = remote_sem_from_vaddr( (intptr_t)vaddr );
     147            xptr_t sem_xp = remote_sem_from_ident( (intptr_t)vaddr );
    153148
    154149            // check semaphore registered
     
    167162            // call relevant kernel function to wait semaphore available
    168163            remote_sem_wait( sem_xp );
    169            
    170             break;
    171         }
     164        }
     165        break;
    172166        //////////////
    173167            case SEM_POST:
    174168        {
    175169            // get extended pointer on remote semaphore
    176             sem_xp = remote_sem_from_vaddr( (intptr_t)vaddr );
     170            xptr_t sem_xp = remote_sem_from_ident( (intptr_t)vaddr );
    177171
    178172            // check semaphore registered
     
    190184            // call relevant kernel function to release semaphore
    191185            remote_sem_post( sem_xp );
    192 
    193                         break;
    194         }
     186        }
     187                break;
    195188        /////////////////
    196189            case SEM_DESTROY:
    197190        {
    198191            // get extended pointer on remote semaphore
    199             sem_xp = remote_sem_from_vaddr( (intptr_t)vaddr );
     192            xptr_t sem_xp = remote_sem_from_ident( (intptr_t)vaddr );
    200193
    201194            // check semaphore registered
     
    213206            // destroy semaphore
    214207            remote_sem_destroy( sem_xp );
    215 
    216             break;
    217208            }   
     209        break;
    218210        ///////
    219211            default:  // undefined operation                       
     
    234226tm_end = hal_get_cycles();
    235227if( DEBUG_SYS_SEM < tm_end )
    236 {
    237     cxy_t          sem_cxy = GET_CXY( sem_xp );
    238     remote_sem_t * sem_ptr = GET_PTR( sem_xp );
    239     uint32_t       value   = hal_remote_lw( XPTR( sem_cxy , &sem_ptr->count ) );
    240     printk("\n[DBG] %s : thread %x in process %x exit for %s / value %d / cost = %d / cycle %d\n",
    241     __FUNCTION__, this->trdid, process->pid, sys_sem_op_str( operation ), value,
    242     (uint32_t)(tm_end - tm_start), (uint32_t)tm_end );
    243 }
     228printk("\n[DBG] %s : thread %x in process %x exit for %s / cost = %d / cycle %d\n",
     229__FUNCTION__, this->trdid, process->pid, sys_sem_op_str( operation ),
     230(uint32_t)(tm_end - tm_start), (uint32_t)tm_end );
    244231#endif
    245232
Note: See TracChangeset for help on using the changeset viewer.