Changeset 566 for trunk/kernel/syscalls/sys_sem.c
- Timestamp:
- Oct 4, 2018, 11:50:21 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/syscalls/sys_sem.c
r469 r566 51 51 uint32_t * current_value ) // pointer on current value buffer 52 52 { 53 vseg_t * vseg; 53 vseg_t * vseg; // for vaddr check 54 54 error_t error; 55 uint32_t current; // semaphore current value56 xptr_t sem_xp; // extended pointer on semaphore57 55 58 56 thread_t * this = CURRENT_THREAD; … … 90 88 // call relevant kernel function to initialize semaphore 91 89 error = remote_sem_create( (intptr_t)vaddr , 92 init_value, 93 XPTR( local_cxy , &sem_xp ) ); 94 90 init_value ); 95 91 if ( error ) 96 92 { … … 103 99 return -1; 104 100 } 105 106 break; 107 } 101 } 102 break; 108 103 ////////////////// 109 104 case SEM_GETVALUE: … … 115 110 116 111 #if DEBUG_SYSCALLS_ERROR 117 printk("\n[ERROR] in %s GETVALUE: unmapped targetbuffer %x / thread %x in process %x / cycle %d\n",112 printk("\n[ERROR] in %s GETVALUE: unmapped buffer %x / thread %x in process %x / cycle %d\n", 118 113 __FUNCTION__ , (intptr_t)current_value, this->trdid, process->pid, (uint32_t)hal_get_cycles() ); 119 114 vmm_display( process , false ); … … 124 119 125 120 // 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 ); 127 122 128 123 // check semaphore registered … … 139 134 140 135 // call relevant kernel function to get semaphore current value 136 uint32_t current; 141 137 remote_sem_get_value( sem_xp , ¤t ); 142 138 143 139 // return value to user 144 140 hal_copy_to_uspace( current_value , ¤t , sizeof(uint32_t) ); 145 146 break; 147 } 141 } 142 break; 148 143 ////////////// 149 144 case SEM_WAIT: 150 145 { 151 146 // 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 ); 153 148 154 149 // check semaphore registered … … 167 162 // call relevant kernel function to wait semaphore available 168 163 remote_sem_wait( sem_xp ); 169 170 break; 171 } 164 } 165 break; 172 166 ////////////// 173 167 case SEM_POST: 174 168 { 175 169 // 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 ); 177 171 178 172 // check semaphore registered … … 190 184 // call relevant kernel function to release semaphore 191 185 remote_sem_post( sem_xp ); 192 193 break; 194 } 186 } 187 break; 195 188 ///////////////// 196 189 case SEM_DESTROY: 197 190 { 198 191 // 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 ); 200 193 201 194 // check semaphore registered … … 213 206 // destroy semaphore 214 207 remote_sem_destroy( sem_xp ); 215 216 break;217 208 } 209 break; 218 210 /////// 219 211 default: // undefined operation … … 234 226 tm_end = hal_get_cycles(); 235 227 if( 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 } 228 printk("\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 ); 244 231 #endif 245 232
Note: See TracChangeset
for help on using the changeset viewer.