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

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/sparc/dtrace/fasttrap_isa.c
          +++ new/usr/src/uts/sparc/dtrace/fasttrap_isa.c
↓ open down ↓ 16 lines elided ↑ open up ↑
  17   17   * information: Portions Copyright [yyyy] [name of copyright owner]
  18   18   *
  19   19   * CDDL HEADER END
  20   20   */
  21   21  
  22   22  /*
  23   23   * Copyright 2007 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/fasttrap_isa.h>
  30   28  #include <sys/fasttrap_impl.h>
  31   29  #include <sys/dtrace.h>
  32   30  #include <sys/dtrace_impl.h>
  33   31  #include <sys/cmn_err.h>
  34   32  #include <sys/frame.h>
  35   33  #include <sys/stack.h>
  36   34  #include <sys/sysmacros.h>
  37   35  #include <sys/trap.h>
  38   36  
↓ open down ↓ 1364 lines elided ↑ open up ↑
1403 1401  
1404 1402          /*
1405 1403           * Before we look at the user's stack, we'll check the register
1406 1404           * windows to see if the information we want is in there.
1407 1405           */
1408 1406          cookie = dtrace_interrupt_disable();
1409 1407          if (dtrace_getotherwin() > 0) {
1410 1408                  value = dtrace_getreg_win(reg, 1);
1411 1409                  dtrace_interrupt_enable(cookie);
1412 1410  
1413      -                atomic_add_64(&fasttrap_getreg_fast_cnt, 1);
     1411 +                atomic_inc_64(&fasttrap_getreg_fast_cnt);
1414 1412  
1415 1413                  return (value);
1416 1414          }
1417 1415          dtrace_interrupt_enable(cookie);
1418 1416  
1419 1417          /*
1420 1418           * First check the machpcb structure to see if we've already read
1421 1419           * in the register window we're looking for; if we haven't, (and
1422 1420           * we probably haven't) try to copy in the value of the register.
1423 1421           */
↓ open down ↓ 4 lines elided ↑ open up ↑
1428 1426                  struct frame *fr = (struct frame *)(rp->r_sp + STACK_BIAS);
1429 1427  
1430 1428                  if (mpcb->mpcb_wbcnt > 0) {
1431 1429                          struct rwindow *rwin = (void *)mpcb->mpcb_wbuf;
1432 1430                          int i = mpcb->mpcb_wbcnt;
1433 1431                          do {
1434 1432                                  i--;
1435 1433                                  if ((long)mpcb->mpcb_spbuf[i] != rp->r_sp)
1436 1434                                          continue;
1437 1435  
1438      -                                atomic_add_64(&fasttrap_getreg_mpcb_cnt, 1);
     1436 +                                atomic_inc_64(&fasttrap_getreg_mpcb_cnt);
1439 1437                                  return (rwin[i].rw_local[reg - 16]);
1440 1438                          } while (i > 0);
1441 1439                  }
1442 1440  
1443 1441                  if (fasttrap_fulword(&fr->fr_local[reg - 16], &value) != 0)
1444 1442                          goto err;
1445 1443          } else {
1446 1444                  struct frame32 *fr =
1447 1445                      (struct frame32 *)(uintptr_t)(caddr32_t)rp->r_sp;
1448 1446                  uint32_t *v32 = (uint32_t *)&value;
1449 1447  
1450 1448                  if (mpcb->mpcb_wbcnt > 0) {
1451 1449                          struct rwindow32 *rwin = (void *)mpcb->mpcb_wbuf;
1452 1450                          int i = mpcb->mpcb_wbcnt;
1453 1451                          do {
1454 1452                                  i--;
1455 1453                                  if ((long)mpcb->mpcb_spbuf[i] != rp->r_sp)
1456 1454                                          continue;
1457 1455  
1458      -                                atomic_add_64(&fasttrap_getreg_mpcb_cnt, 1);
     1456 +                                atomic_inc_64(&fasttrap_getreg_mpcb_cnt);
1459 1457                                  return (rwin[i].rw_local[reg - 16]);
1460 1458                          } while (i > 0);
1461 1459                  }
1462 1460  
1463 1461                  if (fasttrap_fuword32(&fr->fr_local[reg - 16], &v32[1]) != 0)
1464 1462                          goto err;
1465 1463  
1466 1464                  v32[0] = 0;
1467 1465          }
1468 1466  
1469      -        atomic_add_64(&fasttrap_getreg_slow_cnt, 1);
     1467 +        atomic_inc_64(&fasttrap_getreg_slow_cnt);
1470 1468          return (value);
1471 1469  
1472 1470  err:
1473 1471          /*
1474 1472           * If the copy in failed, the process will be in a irrecoverable
1475 1473           * state, and we have no choice but to kill it.
1476 1474           */
1477 1475          psignal(ttoproc(curthread), SIGILL);
1478 1476          return (0);
1479 1477  }
↓ open down ↓ 18 lines elided ↑ open up ↑
1498 1496          }
1499 1497  
1500 1498          /*
1501 1499           * If the user process is still using some register windows, we
1502 1500           * can just place the value in the correct window.
1503 1501           */
1504 1502          cookie = dtrace_interrupt_disable();
1505 1503          if (dtrace_getotherwin() > 0) {
1506 1504                  dtrace_putreg_win(reg, value);
1507 1505                  dtrace_interrupt_enable(cookie);
1508      -                atomic_add_64(&fasttrap_putreg_fast_cnt, 1);
     1506 +                atomic_inc_64(&fasttrap_putreg_fast_cnt);
1509 1507                  return;
1510 1508          }
1511 1509          dtrace_interrupt_enable(cookie);
1512 1510  
1513 1511          /*
1514 1512           * First see if there's a copy of the register window in the
1515 1513           * machpcb structure that we can modify; if there isn't try to
1516 1514           * copy out the value. If that fails, we try to create a new
1517 1515           * register window in the machpcb structure. While this isn't
1518 1516           * _precisely_ the intended use of the machpcb structure, it
↓ open down ↓ 10 lines elided ↑ open up ↑
1529 1527                  struct rwindow *rwin = (struct rwindow *)mpcb->mpcb_wbuf;
1530 1528  
1531 1529                  if (mpcb->mpcb_wbcnt > 0) {
1532 1530                          int i = mpcb->mpcb_wbcnt;
1533 1531                          do {
1534 1532                                  i--;
1535 1533                                  if ((long)mpcb->mpcb_spbuf[i] != rp->r_sp)
1536 1534                                          continue;
1537 1535  
1538 1536                                  rwin[i].rw_local[reg - 16] = value;
1539      -                                atomic_add_64(&fasttrap_putreg_mpcb_cnt, 1);
     1537 +                                atomic_inc_64(&fasttrap_putreg_mpcb_cnt);
1540 1538                                  return;
1541 1539                          } while (i > 0);
1542 1540                  }
1543 1541  
1544 1542                  if (fasttrap_sulword(&fr->fr_local[reg - 16], value) != 0) {
1545 1543                          if (mpcb->mpcb_wbcnt >= MAXWIN || copyin(fr,
1546 1544                              &rwin[mpcb->mpcb_wbcnt], sizeof (*rwin)) != 0)
1547 1545                                  goto err;
1548 1546  
1549 1547                          rwin[mpcb->mpcb_wbcnt].rw_local[reg - 16] = value;
1550 1548                          mpcb->mpcb_spbuf[mpcb->mpcb_wbcnt] = (caddr_t)rp->r_sp;
1551 1549                          mpcb->mpcb_wbcnt++;
1552      -                        atomic_add_64(&fasttrap_putreg_mpcb_cnt, 1);
     1550 +                        atomic_inc_64(&fasttrap_putreg_mpcb_cnt);
1553 1551                          return;
1554 1552                  }
1555 1553          } else {
1556 1554                  struct frame32 *fr =
1557 1555                      (struct frame32 *)(uintptr_t)(caddr32_t)rp->r_sp;
1558 1556                  /* LINTED - alignment */
1559 1557                  struct rwindow32 *rwin = (struct rwindow32 *)mpcb->mpcb_wbuf;
1560 1558                  uint32_t v32 = (uint32_t)value;
1561 1559  
1562 1560                  if (mpcb->mpcb_wbcnt > 0) {
1563 1561                          int i = mpcb->mpcb_wbcnt;
1564 1562                          do {
1565 1563                                  i--;
1566 1564                                  if ((long)mpcb->mpcb_spbuf[i] != rp->r_sp)
1567 1565                                          continue;
1568 1566  
1569 1567                                  rwin[i].rw_local[reg - 16] = v32;
1570      -                                atomic_add_64(&fasttrap_putreg_mpcb_cnt, 1);
     1568 +                                atomic_inc_64(&fasttrap_putreg_mpcb_cnt);
1571 1569                                  return;
1572 1570                          } while (i > 0);
1573 1571                  }
1574 1572  
1575 1573                  if (fasttrap_suword32(&fr->fr_local[reg - 16], v32) != 0) {
1576 1574                          if (mpcb->mpcb_wbcnt >= MAXWIN || copyin(fr,
1577 1575                              &rwin[mpcb->mpcb_wbcnt], sizeof (*rwin)) != 0)
1578 1576                                  goto err;
1579 1577  
1580 1578                          rwin[mpcb->mpcb_wbcnt].rw_local[reg - 16] = v32;
1581 1579                          mpcb->mpcb_spbuf[mpcb->mpcb_wbcnt] = (caddr_t)rp->r_sp;
1582 1580                          mpcb->mpcb_wbcnt++;
1583      -                        atomic_add_64(&fasttrap_putreg_mpcb_cnt, 1);
     1581 +                        atomic_inc_64(&fasttrap_putreg_mpcb_cnt);
1584 1582                          return;
1585 1583                  }
1586 1584          }
1587 1585  
1588      -        atomic_add_64(&fasttrap_putreg_slow_cnt, 1);
     1586 +        atomic_inc_64(&fasttrap_putreg_slow_cnt);
1589 1587          return;
1590 1588  
1591 1589  err:
1592 1590          /*
1593 1591           * If we couldn't record this register's value, the process is in an
1594 1592           * irrecoverable state and we have no choice but to euthanize it.
1595 1593           */
1596 1594          psignal(ttoproc(curthread), SIGILL);
1597 1595  }
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX