Print this page
5083 avoid undefined order of operations in assignments

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/intel/io/dktp/drvobj/strategy.c
          +++ new/usr/src/uts/intel/io/dktp/drvobj/strategy.c
↓ open down ↓ 227 lines elided ↑ open up ↑
 228  228                  if (dsnglp->ds_kstat) {
 229  229                          kstat_waitq_enter(KSTAT_IO_PTR(dsnglp->ds_kstat));
 230  230                  }
 231  231                  mutex_exit(&dsnglp->ds_mutex);
 232  232                  return (0);
 233  233          }
 234  234          if (dsnglp->ds_kstat) {
 235  235                  kstat_waitq_enter(KSTAT_IO_PTR(dsnglp->ds_kstat));
 236  236          }
 237  237          if (TGCOM_PKT(tgcom_objp, in_bp, dsngl_restart,
 238      -                (caddr_t)dsnglp) != DDI_SUCCESS) {
      238 +            (caddr_t)dsnglp) != DDI_SUCCESS) {
 239  239  
 240  240                  dsnglp->ds_bp = in_bp;
 241  241                  mutex_exit(&dsnglp->ds_mutex);
 242  242                  return (0);
 243  243          }
 244  244          dsnglp->ds_outcnt++;
 245  245          if (dsnglp->ds_kstat)
 246  246                  kstat_waitq_to_runq(KSTAT_IO_PTR(dsnglp->ds_kstat));
 247  247          mutex_exit(&dsnglp->ds_mutex);
 248  248          TGCOM_TRANSPORT(tgcom_objp, in_bp);
↓ open down ↓ 113 lines elided ↑ open up ↑
 362  362                          kstat_waitq_enter(KSTAT_IO_PTR(dmultp->ds_kstat));
 363  363                  }
 364  364                  mutex_exit(&dmultp->ds_mutex);
 365  365                  return (0);
 366  366          }
 367  367          if (dmultp->ds_kstat) {
 368  368                  kstat_waitq_enter(KSTAT_IO_PTR(dmultp->ds_kstat));
 369  369          }
 370  370  
 371  371          if (TGCOM_PKT(tgcom_objp, in_bp, dmult_restart,
 372      -                (caddr_t)dmultp) != DDI_SUCCESS) {
      372 +            (caddr_t)dmultp) != DDI_SUCCESS) {
 373  373  
 374  374                  dmultp->ds_bp = in_bp;
 375  375                  mutex_exit(&dmultp->ds_mutex);
 376  376                  return (0);
 377  377          }
 378  378          dmultp->ds_outcnt++;
 379  379          if (dmultp->ds_kstat)
 380  380                  kstat_waitq_to_runq(KSTAT_IO_PTR(dmultp->ds_kstat));
 381  381          mutex_exit(&dmultp->ds_mutex);
 382  382  
↓ open down ↓ 469 lines elided ↑ open up ↑
 852  852  {
 853  853          struct que_data *qfp;
 854  854          struct que_obj *queobjp;
 855  855  
 856  856          queobjp = kmem_zalloc((sizeof (*queobjp) + sizeof (*qfp)), KM_NOSLEEP);
 857  857          if (!queobjp)
 858  858                  return (NULL);
 859  859  
 860  860          queobjp->que_ops = &qmerge_ops;
 861  861          qfp = (struct que_data *)(queobjp+1);
 862      -        qfp->q_tab.hd_private = qfp->q_tab.hd_private = 0;
      862 +        qfp->q_tab.hd_private = 0;
 863  863          qfp->q_tab.hd_sync_next = qfp->q_tab.hd_async_next = NULL;
 864  864          qfp->q_tab.hd_cnt = (void *)qmerge_sync2async;
 865  865          queobjp->que_data = (opaque_t)qfp;
 866  866  
 867  867          return ((opaque_t)queobjp);
 868  868  }
 869  869  
 870  870  static int
 871  871  qmerge_free(struct que_obj *queobjp)
 872  872  {
↓ open down ↓ 296 lines elided ↑ open up ↑
1169 1169                  } else {
1170 1170                          if (BP_LT_HD(sync_bp, dp) && BP_LT_HD(async_bp, dp)) {
1171 1171                                  if (qmerge2wayscan) {
1172 1172                                          flags |= QNEAR_BACKWARD;
1173 1173                                          *sync_bpp = sync_bp->av_back;
1174 1174                                          *async_bpp = async_bp->av_back;
1175 1175                                          goto begin_nextbp;
1176 1176                                  } else {
1177 1177                                          flags &= ~QNEAR_ASYNCALSO;
1178 1178                                          SYNC2ASYNC(qfp) =
1179      -                                                (void *)qmerge_sync2async;
     1179 +                                            (void *)qmerge_sync2async;
1180 1180                                          qfp->q_tab.hd_private = 0;
1181 1181                                          goto begin_nextbp;
1182 1182                                  }
1183 1183                          }
1184 1184                          if (BP_GT_HD(async_bp, dp) && BP_GT_HD(sync_bp, dp)) {
1185 1185                                  if (BP_LT_BP(async_bp, sync_bp)) {
1186 1186                                          bpp = async_bpp;
1187 1187                                          bp = *async_bpp;
1188 1188                                  } else {
1189 1189                                          bpp = sync_bpp;
↓ open down ↓ 35 lines elided ↑ open up ↑
1225 1225                          if (DBLK(bp) < DBLK(bp->av_back)) {
1226 1226                                  flags &= ~QNEAR_BACKWARD;
1227 1227                                  cnt = (intptr_t)SYNC2ASYNC(qfp);
1228 1228                                  if (cnt > 0) {
1229 1229                                          cnt--;
1230 1230                                          SYNC2ASYNC(qfp) = (void *)cnt;
1231 1231                                  } else {
1232 1232                                          if (*async_bpp)
1233 1233                                                  flags |= QNEAR_ASYNCALSO;
1234 1234                                          SYNC2ASYNC(qfp) =
1235      -                                                (void *)qmerge_sync2async;
     1235 +                                            (void *)qmerge_sync2async;
1236 1236                                  }
1237 1237                                  private = 0;
1238 1238                          }
1239 1239                  } else if (DBLK(bp) > DBLK(bp->av_forw)) {
1240 1240                          private = 0;
1241 1241                          if (qmerge2wayscan) {
1242 1242                                  flags |= QNEAR_BACKWARD;
1243 1243                                  private = DBLK(bp);
1244 1244                          } else {
1245 1245                                  cnt = (intptr_t)SYNC2ASYNC(qfp);
1246 1246                                  if (cnt > 0) {
1247 1247                                          cnt--;
1248 1248                                          SYNC2ASYNC(qfp) = (void *)cnt;
1249 1249                                  } else {
1250 1250                                          if (*async_bpp)
1251 1251                                                  flags |= QNEAR_ASYNCALSO;
1252 1252                                          SYNC2ASYNC(qfp) =
1253      -                                                (void *)qmerge_sync2async;
     1253 +                                            (void *)qmerge_sync2async;
1254 1254                                  }
1255 1255                          }
1256 1256                  } else if (qmerge2wayscan == 0) {
1257 1257                          private = DBLK(bp->av_forw);
1258 1258                  }
1259 1259                  bpp = sync_bpp;
1260 1260          }
1261 1261  
1262 1262          if (bp->av_forw) {
1263 1263                  *can_merge = !(bp->b_flags & B_READ);
↓ open down ↓ 206 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX