Print this page
5042 stop using deprecated atomic functions


 200  * The sobj_ops vector exports a set of functions needed when a thread
 201  * is asleep on a synchronization object of a given type.
 202  */
 203 static sobj_ops_t rw_sobj_ops = {
 204         SOBJ_RWLOCK, rw_owner, turnstile_stay_asleep, turnstile_change_pri
 205 };
 206 
 207 /*
 208  * If the system panics on an rwlock, save the address of the offending
 209  * rwlock in panic_rwlock_addr, and save the contents in panic_rwlock.
 210  */
 211 static rwlock_impl_t panic_rwlock;
 212 static rwlock_impl_t *panic_rwlock_addr;
 213 
 214 static void
 215 rw_panic(char *msg, rwlock_impl_t *lp)
 216 {
 217         if (panicstr)
 218                 return;
 219 
 220         if (casptr(&panic_rwlock_addr, NULL, lp) == NULL)
 221                 panic_rwlock = *lp;
 222 
 223         panic("%s, lp=%p wwwh=%lx thread=%p",
 224             msg, (void *)lp, panic_rwlock.rw_wwwh, (void *)curthread);
 225 }
 226 
 227 /* ARGSUSED */
 228 void
 229 rw_init(krwlock_t *rwlp, char *name, krw_type_t type, void *arg)
 230 {
 231         ((rwlock_impl_t *)rwlp)->rw_wwwh = 0;
 232 }
 233 
 234 void
 235 rw_destroy(krwlock_t *rwlp)
 236 {
 237         rwlock_impl_t *lp = (rwlock_impl_t *)rwlp;
 238 
 239         if (lp->rw_wwwh != 0) {
 240                 if ((lp->rw_wwwh & RW_DOUBLE_LOCK) == RW_DOUBLE_LOCK)




 200  * The sobj_ops vector exports a set of functions needed when a thread
 201  * is asleep on a synchronization object of a given type.
 202  */
 203 static sobj_ops_t rw_sobj_ops = {
 204         SOBJ_RWLOCK, rw_owner, turnstile_stay_asleep, turnstile_change_pri
 205 };
 206 
 207 /*
 208  * If the system panics on an rwlock, save the address of the offending
 209  * rwlock in panic_rwlock_addr, and save the contents in panic_rwlock.
 210  */
 211 static rwlock_impl_t panic_rwlock;
 212 static rwlock_impl_t *panic_rwlock_addr;
 213 
 214 static void
 215 rw_panic(char *msg, rwlock_impl_t *lp)
 216 {
 217         if (panicstr)
 218                 return;
 219 
 220         if (atomic_cas_ptr(&panic_rwlock_addr, NULL, lp) == NULL)
 221                 panic_rwlock = *lp;
 222 
 223         panic("%s, lp=%p wwwh=%lx thread=%p",
 224             msg, (void *)lp, panic_rwlock.rw_wwwh, (void *)curthread);
 225 }
 226 
 227 /* ARGSUSED */
 228 void
 229 rw_init(krwlock_t *rwlp, char *name, krw_type_t type, void *arg)
 230 {
 231         ((rwlock_impl_t *)rwlp)->rw_wwwh = 0;
 232 }
 233 
 234 void
 235 rw_destroy(krwlock_t *rwlp)
 236 {
 237         rwlock_impl_t *lp = (rwlock_impl_t *)rwlp;
 238 
 239         if (lp->rw_wwwh != 0) {
 240                 if ((lp->rw_wwwh & RW_DOUBLE_LOCK) == RW_DOUBLE_LOCK)