Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*


2636         rq->q_struiot =
2637             (rq->q_flag & QSYNCSTR) ? rinit->qi_struiot : STRUIOT_NONE;
2638         wq->q_struiot =
2639             (wq->q_flag & QSYNCSTR) ? winit->qi_struiot : STRUIOT_NONE;
2640 }
2641 
2642 perdm_t *
2643 hold_dm(struct streamtab *str, uint32_t qflag, uint32_t sqtype)
2644 {
2645         syncq_t *sq;
2646         perdm_t **pp;
2647         perdm_t *p;
2648         perdm_t *dmp;
2649 
2650         ASSERT(str != NULL);
2651         ASSERT(qflag & (QPERMOD | QMTOUTPERIM));
2652 
2653         rw_enter(&perdm_rwlock, RW_READER);
2654         for (p = perdm_list; p != NULL; p = p->dm_next) {
2655                 if (p->dm_str == str) {      /* found one */
2656                         atomic_add_32(&(p->dm_ref), 1);
2657                         rw_exit(&perdm_rwlock);
2658                         return (p);
2659                 }
2660         }
2661         rw_exit(&perdm_rwlock);
2662 
2663         sq = new_syncq();
2664         if (qflag & QPERMOD) {
2665                 sq->sq_type = sqtype | SQ_PERMOD;
2666                 sq->sq_flags = sqtype & SQ_TYPES_IN_FLAGS;
2667         } else {
2668                 ASSERT(qflag & QMTOUTPERIM);
2669                 sq->sq_onext = sq->sq_oprev = sq;
2670         }
2671 
2672         dmp = kmem_alloc(sizeof (perdm_t), KM_SLEEP);
2673         dmp->dm_sq = sq;
2674         dmp->dm_str = str;
2675         dmp->dm_ref = 1;
2676         dmp->dm_next = NULL;




2636         rq->q_struiot =
2637             (rq->q_flag & QSYNCSTR) ? rinit->qi_struiot : STRUIOT_NONE;
2638         wq->q_struiot =
2639             (wq->q_flag & QSYNCSTR) ? winit->qi_struiot : STRUIOT_NONE;
2640 }
2641 
2642 perdm_t *
2643 hold_dm(struct streamtab *str, uint32_t qflag, uint32_t sqtype)
2644 {
2645         syncq_t *sq;
2646         perdm_t **pp;
2647         perdm_t *p;
2648         perdm_t *dmp;
2649 
2650         ASSERT(str != NULL);
2651         ASSERT(qflag & (QPERMOD | QMTOUTPERIM));
2652 
2653         rw_enter(&perdm_rwlock, RW_READER);
2654         for (p = perdm_list; p != NULL; p = p->dm_next) {
2655                 if (p->dm_str == str) {      /* found one */
2656                         atomic_inc_32(&(p->dm_ref));
2657                         rw_exit(&perdm_rwlock);
2658                         return (p);
2659                 }
2660         }
2661         rw_exit(&perdm_rwlock);
2662 
2663         sq = new_syncq();
2664         if (qflag & QPERMOD) {
2665                 sq->sq_type = sqtype | SQ_PERMOD;
2666                 sq->sq_flags = sqtype & SQ_TYPES_IN_FLAGS;
2667         } else {
2668                 ASSERT(qflag & QMTOUTPERIM);
2669                 sq->sq_onext = sq->sq_oprev = sq;
2670         }
2671 
2672         dmp = kmem_alloc(sizeof (perdm_t), KM_SLEEP);
2673         dmp->dm_sq = sq;
2674         dmp->dm_str = str;
2675         dmp->dm_ref = 1;
2676         dmp->dm_next = NULL;