Changeset 635 for trunk/kernel/libk/remote_mutex.c
- Timestamp:
- Jun 26, 2019, 11:42:37 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/libk/remote_mutex.c
r619 r635 2 2 * remote_mutex.c - POSIX mutex implementation. 3 3 * 4 * Authors Alain Greiner (2016,2017,2018 )4 * Authors Alain Greiner (2016,2017,2018,2019) 5 5 * 6 6 * Copyright (c) UPMC Sorbonne Universites … … 84 84 error_t remote_mutex_create( intptr_t ident ) 85 85 { 86 xptr_t mutex_xp;87 86 remote_mutex_t * mutex_ptr; 87 kmem_req_t req; 88 88 89 89 // get pointer on local process descriptor … … 97 97 process_t * ref_ptr = (process_t *)GET_PTR( ref_xp ); 98 98 99 // allocate memory for mutex descriptor 100 if( ref_cxy == local_cxy ) // local cluster is the reference 101 { 102 kmem_req_t req; 103 req.type = KMEM_MUTEX; 104 req.flags = AF_ZERO; 105 mutex_ptr = kmem_alloc( &req ); 106 mutex_xp = XPTR( local_cxy , mutex_ptr ); 107 } 108 else // reference is remote 109 { 110 rpc_kcm_alloc_client( ref_cxy , KMEM_MUTEX , &mutex_xp ); 111 mutex_ptr = GET_PTR( mutex_xp ); 112 } 113 114 if( mutex_ptr == NULL ) return 0xFFFFFFFF; 99 // allocate memory for mutex descriptor in reference cluster 100 req.type = KMEM_KCM; 101 req.order = bits_log2( sizeof(remote_mutex_t) ); 102 req.flags = AF_ZERO | AF_KERNEL; 103 mutex_ptr = kmem_remote_alloc( ref_cxy , &req ); 104 105 if( mutex_ptr == NULL ) 106 { 107 printk("\n[ERROR] in %s : cannot create mutex\n", __FUNCTION__); 108 return -1; 109 } 115 110 116 111 // initialise mutex … … 150 145 void remote_mutex_destroy( xptr_t mutex_xp ) 151 146 { 147 kmem_req_t req; 148 152 149 // get pointer on local process descriptor 153 150 process_t * process = CURRENT_THREAD->process; … … 174 171 175 172 // release memory allocated for mutex descriptor 176 if( mutex_cxy == local_cxy ) // reference is local 177 { 178 kmem_req_t req; 179 req.type = KMEM_MUTEX; 180 req.ptr = mutex_ptr; 181 kmem_free( &req ); 182 } 183 else // reference is remote 184 { 185 rpc_kcm_free_client( mutex_cxy , mutex_ptr , KMEM_MUTEX ); 186 } 173 req.type = KMEM_KCM; 174 req.ptr = mutex_ptr; 175 kmem_remote_free( mutex_cxy , &req ); 187 176 188 177 } // end remote_mutex_destroy()
Note: See TracChangeset
for help on using the changeset viewer.