Print this page
5042 stop using deprecated atomic functions

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/i86pc/os/memnode.c
          +++ new/usr/src/uts/i86pc/os/memnode.c
↓ open down ↓ 78 lines elided ↑ open up ↑
  79   79           * the slice.
  80   80           */
  81   81          if (mem_node_physalign) {
  82   82                  start &= ~(btop(mem_node_physalign) - 1);
  83   83                  end = roundup(end, btop(mem_node_physalign)) - 1;
  84   84          }
  85   85  
  86   86          mnode = PFN_2_MEM_NODE(start);
  87   87          ASSERT(mnode >= 0 && mnode < max_mem_nodes);
  88   88  
  89      -        if (cas32((uint32_t *)&mem_node_config[mnode].exists, 0, 1)) {
       89 +        if (atomic_cas_32((uint32_t *)&mem_node_config[mnode].exists, 0, 1)) {
  90   90                  /*
  91   91                   * Add slice to existing node.
  92   92                   */
  93   93                  if (start < mem_node_config[mnode].physbase)
  94   94                          mem_node_config[mnode].physbase = start;
  95   95                  if (end > mem_node_config[mnode].physmax)
  96   96                          mem_node_config[mnode].physmax = end;
  97   97          } else {
  98   98                  mem_node_config[mnode].physbase = start;
  99   99                  mem_node_config[mnode].physmax = end;
 100  100                  atomic_add_16(&num_memnodes, 1);
 101  101                  do {
 102  102                          oldmask = memnodes_mask;
 103  103                          newmask = memnodes_mask | (1ull << mnode);
 104      -                } while (cas64(&memnodes_mask, oldmask, newmask) != oldmask);
      104 +                } while (atomic_cas_64(&memnodes_mask, oldmask, newmask) !=
      105 +                    oldmask);
 105  106          }
 106  107  
 107  108          /*
 108  109           * Inform the common lgrp framework about the new memory
 109  110           */
 110  111          lgrp_config(LGRP_CONFIG_MEM_ADD, mnode, MEM_NODE_2_LGRPHAND(mnode));
 111  112  }
 112  113  
 113  114  /*
 114  115   * Remove a PFN range from a memnode.  On some platforms,
↓ open down ↓ 39 lines elided ↑ open up ↑
 154  155                  lgrp_config(LGRP_CONFIG_MEM_DEL,
 155  156                      mnode, MEM_NODE_2_LGRPHAND(mnode));
 156  157  
 157  158                  /*
 158  159                   * Delete the whole node.
 159  160                   */
 160  161                  ASSERT(MNODE_PGCNT(mnode) == 0);
 161  162                  do {
 162  163                          omask = memnodes_mask;
 163  164                          nmask = omask & ~(1ull << mnode);
 164      -                } while (cas64(&memnodes_mask, omask, nmask) != omask);
      165 +                } while (atomic_cas_64(&memnodes_mask, omask, nmask) != omask);
 165  166                  atomic_add_16(&num_memnodes, -1);
 166  167                  mem_node_config[mnode].exists = 0;
 167  168          }
 168  169  }
 169  170  
 170  171  void
 171  172  mem_node_add_range(pfn_t start, pfn_t end)
 172  173  {
 173  174          if (&plat_slice_add)
 174  175                  plat_slice_add(start, end);
↓ open down ↓ 47 lines elided ↑ open up ↑
 222  223  mem_node_alloc()
 223  224  {
 224  225          int mnode;
 225  226          mnodeset_t newmask, oldmask;
 226  227  
 227  228          /*
 228  229           * Find an unused memnode.  Update it atomically to prevent
 229  230           * a first time memnode creation race.
 230  231           */
 231  232          for (mnode = 0; mnode < max_mem_nodes; mnode++)
 232      -                if (cas32((uint32_t *)&mem_node_config[mnode].exists,
      233 +                if (atomic_cas_32((uint32_t *)&mem_node_config[mnode].exists,
 233  234                      0, 1) == 0)
 234  235                          break;
 235  236  
 236  237          if (mnode >= max_mem_nodes)
 237  238                  panic("Out of free memnodes\n");
 238  239  
 239  240          mem_node_config[mnode].physbase = (pfn_t)-1l;
 240  241          mem_node_config[mnode].physmax = 0;
 241  242          atomic_add_16(&num_memnodes, 1);
 242  243          do {
 243  244                  oldmask = memnodes_mask;
 244  245                  newmask = memnodes_mask | (1ull << mnode);
 245      -        } while (cas64(&memnodes_mask, oldmask, newmask) != oldmask);
      246 +        } while (atomic_cas_64(&memnodes_mask, oldmask, newmask) != oldmask);
 246  247  
 247  248          return (mnode);
 248  249  }
 249  250  
 250  251  /*
 251  252   * Find the intersection between a memnode and a memlist
 252  253   * and returns the number of pages that overlap.
 253  254   *
 254  255   * Assumes the list is protected from DR operations by
 255  256   * the memlist lock.
↓ open down ↓ 28 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX