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

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/ipp/dscpmk/dscpmk.c
          +++ new/usr/src/uts/common/ipp/dscpmk/dscpmk.c
↓ open down ↓ 16 lines elided ↑ open up ↑
  17   17   * fields enclosed by brackets "[]" replaced with your own identifying
  18   18   * information: Portions Copyright [yyyy] [name of copyright owner]
  19   19   *
  20   20   * CDDL HEADER END
  21   21   */
  22   22  /*
  23   23   * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
  24   24   * Use is subject to license terms.
  25   25   */
  26   26  
  27      -#pragma ident   "%Z%%M% %I%     %E% SMI"
  28      -
  29   27  #include <sys/types.h>
  30   28  #include <sys/atomic.h>
  31   29  #include <sys/pattr.h>
  32   30  #include <netinet/in.h>
  33   31  #include <netinet/ip6.h>
  34   32  #include <inet/common.h>
  35   33  #include <inet/ip.h>
  36   34  #include <inet/ip6.h>
  37   35  #include <ipp/dscpmk/dscpmk_impl.h>
  38   36  
↓ open down ↓ 22 lines elided ↑ open up ↑
  61   59          /*
  62   60           * The action module will receive an M_DATA or an M_CTL followed
  63   61           * by an M_DATA. In the latter case skip the M_CTL.
  64   62           */
  65   63          if (mp->b_datap->db_type != M_DATA) {
  66   64                  if ((mp->b_cont != NULL) &&
  67   65                      (mp->b_cont->b_datap->db_type == M_DATA)) {
  68   66                          mp = mp->b_cont;
  69   67                  } else {
  70   68                          dscpmk0dbg(("dscpmk_process: no data\n"));
  71      -                        atomic_add_64(&dscpmk_data->epackets, 1);
       69 +                        atomic_inc_64(&dscpmk_data->epackets);
  72   70                          return (EINVAL);
  73   71                  }
  74   72          }
  75   73  
  76   74          /* Pull-up needed? */
  77   75          if ((mp->b_wptr - mp->b_rptr) < IP_SIMPLE_HDR_LENGTH) {
  78   76                  if (!pullupmsg(mp, IP_SIMPLE_HDR_LENGTH)) {
  79   77                          dscpmk0dbg(("dscpmk_process: pullup failed\n"));
  80      -                        atomic_add_64(&dscpmk_data->epackets, 1);
       78 +                        atomic_inc_64(&dscpmk_data->epackets);
  81   79                          return (EINVAL);
  82   80                  }
  83   81          }
  84   82          ipha = (ipha_t *)mp->b_rptr;
  85   83  
  86   84          /* Update global stats */
  87      -        atomic_add_64(&dscpmk_data->npackets, 1);
       85 +        atomic_inc_64(&dscpmk_data->npackets);
  88   86  
  89   87          /*
  90   88           * This should only be called for outgoing packets. For inbound packets
  91   89           * proceed with the next action.
  92   90           */
  93   91          if ((proc == IPP_LOCAL_IN) || (proc == IPP_FWD_IN)) {
  94   92                  dscpmk2dbg(("dscpmk_process: cannot mark incoming packets\n"));
  95      -                atomic_add_64(&dscpmk_data->ipackets, 1);
       93 +                atomic_inc_64(&dscpmk_data->ipackets);
  96   94                  return (0);
  97   95          }
  98   96  
  99   97          /* Figure out the ToS or the Traffic Class from the message */
 100   98          if (IPH_HDR_VERSION(ipha) == IPV4_VERSION) {
 101   99                  dscp = ipha->ipha_type_of_service;
 102  100                  is_v4 = B_TRUE;
 103  101          } else {
 104  102                  ip6_hdr = (ip6_t *)mp->b_rptr;
 105  103                  dscp = __IPV6_TCLASS_FROM_FLOW(ip6_hdr->ip6_vcf);
↓ open down ↓ 1 lines elided ↑ open up ↑
 107  105          }
 108  106  
 109  107          /*
 110  108           * Select the new dscp from the dscp_map after ignoring the
 111  109           * ECN/CU from dscp (hence dscp >> 2). new_dscp will be the
 112  110           * 6-bit DSCP value.
 113  111           */
 114  112          new_dscp = dscpmk_data->dscp_map[dscp >> 2];
 115  113  
 116  114          /* Update stats for this new_dscp */
 117      -        atomic_add_64(&dscpmk_data->dscp_stats[new_dscp].npackets, 1);
      115 +        atomic_inc_64(&dscpmk_data->dscp_stats[new_dscp].npackets);
 118  116  
 119  117          /*
 120  118           * if new_dscp is same as the original, update stats and
 121  119           * return.
 122  120           */
 123  121          if (new_dscp == (dscp >> 2)) {
 124      -                atomic_add_64(&dscpmk_data->unchanged, 1);
      122 +                atomic_inc_64(&dscpmk_data->unchanged);
 125  123                  return (0);
 126  124          }
 127  125  
 128  126          /* Get back the ECN/CU value from the original dscp */
 129  127          new_dscp = (new_dscp << 2) | (dscp & 0x3);
 130  128  
 131      -        atomic_add_64(&dscpmk_data->changed, 1);
      129 +        atomic_inc_64(&dscpmk_data->changed);
 132  130          /*
 133  131           * IPv4 : ToS structure -- RFC 791
 134  132           *
 135  133           *        0   1   2   3   4   5   6   7
 136  134           *      +---+---+---+---+---+---+---+---+
 137  135           *      | IP Precd  | D | T | R | 0 | 0 |
 138  136           *      |           |   |   |   |   |   |
 139  137           *      +---+---+---+---+---+---+---+---+
 140  138           *
 141  139           * For Backward Compatability the diff serv DSCP will be mapped
↓ open down ↓ 44 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX