Print this page
patch lower-case-segops

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/fs/proc/prsubr.c
          +++ new/usr/src/uts/common/fs/proc/prsubr.c
↓ open down ↓ 1475 lines elided ↑ open up ↑
1476 1476  break_seg(proc_t *p)
1477 1477  {
1478 1478          caddr_t addr = p->p_brkbase;
1479 1479          struct seg *seg;
1480 1480          struct vnode *vp;
1481 1481  
1482 1482          if (p->p_brksize != 0)
1483 1483                  addr += p->p_brksize - 1;
1484 1484          seg = as_segat(p->p_as, addr);
1485 1485          if (seg != NULL && seg->s_ops == &segvn_ops &&
1486      -            (SEGOP_GETVP(seg, seg->s_base, &vp) != 0 || vp == NULL))
     1486 +            (segop_getvp(seg, seg->s_base, &vp) != 0 || vp == NULL))
1487 1487                  return (seg);
1488 1488          return (NULL);
1489 1489  }
1490 1490  
1491 1491  /*
1492 1492   * Implementation of service functions to handle procfs generic chained
1493 1493   * copyout buffers.
1494 1494   */
1495 1495  typedef struct pr_iobuf_list {
1496 1496          list_node_t     piol_link;      /* buffer linkage */
↓ open down ↓ 144 lines elided ↑ open up ↑
1641 1641                  for (saddr = seg->s_base; saddr < eaddr; saddr = naddr) {
1642 1642                          prot = pr_getprot(seg, reserved, &tmp,
1643 1643                              &saddr, &naddr, eaddr);
1644 1644                          if (saddr == naddr)
1645 1645                                  continue;
1646 1646  
1647 1647                          mp = pr_iol_newbuf(iolhead, sizeof (*mp));
1648 1648  
1649 1649                          mp->pr_vaddr = (uintptr_t)saddr;
1650 1650                          mp->pr_size = naddr - saddr;
1651      -                        mp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
     1651 +                        mp->pr_offset = segop_getoffset(seg, saddr);
1652 1652                          mp->pr_mflags = 0;
1653 1653                          if (prot & PROT_READ)
1654 1654                                  mp->pr_mflags |= MA_READ;
1655 1655                          if (prot & PROT_WRITE)
1656 1656                                  mp->pr_mflags |= MA_WRITE;
1657 1657                          if (prot & PROT_EXEC)
1658 1658                                  mp->pr_mflags |= MA_EXEC;
1659      -                        if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
     1659 +                        if (segop_gettype(seg, saddr) & MAP_SHARED)
1660 1660                                  mp->pr_mflags |= MA_SHARED;
1661      -                        if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
     1661 +                        if (segop_gettype(seg, saddr) & MAP_NORESERVE)
1662 1662                                  mp->pr_mflags |= MA_NORESERVE;
1663 1663                          if (seg->s_ops == &segspt_shmops ||
1664 1664                              (seg->s_ops == &segvn_ops &&
1665      -                            (SEGOP_GETVP(seg, saddr, &vp) != 0 || vp == NULL)))
     1665 +                            (segop_getvp(seg, saddr, &vp) != 0 || vp == NULL)))
1666 1666                                  mp->pr_mflags |= MA_ANON;
1667 1667                          if (seg == brkseg)
1668 1668                                  mp->pr_mflags |= MA_BREAK;
1669 1669                          else if (seg == stkseg) {
1670 1670                                  mp->pr_mflags |= MA_STACK;
1671 1671                                  if (reserved) {
1672 1672                                          size_t maxstack =
1673 1673                                              ((size_t)p->p_stk_ctl +
1674 1674                                              PAGEOFFSET) & PAGEMASK;
1675 1675                                          mp->pr_vaddr =
↓ open down ↓ 5 lines elided ↑ open up ↑
1681 1681                          }
1682 1682                          if (seg->s_ops == &segspt_shmops)
1683 1683                                  mp->pr_mflags |= MA_ISM | MA_SHM;
1684 1684                          mp->pr_pagesize = PAGESIZE;
1685 1685  
1686 1686                          /*
1687 1687                           * Manufacture a filename for the "object" directory.
1688 1688                           */
1689 1689                          vattr.va_mask = AT_FSID|AT_NODEID;
1690 1690                          if (seg->s_ops == &segvn_ops &&
1691      -                            SEGOP_GETVP(seg, saddr, &vp) == 0 &&
     1691 +                            segop_getvp(seg, saddr, &vp) == 0 &&
1692 1692                              vp != NULL && vp->v_type == VREG &&
1693 1693                              VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
1694 1694                                  if (vp == p->p_exec)
1695 1695                                          (void) strcpy(mp->pr_mapname, "a.out");
1696 1696                                  else
1697 1697                                          pr_object_name(mp->pr_mapname,
1698 1698                                              vp, &vattr);
1699 1699                          }
1700 1700  
1701 1701                          /*
↓ open down ↓ 50 lines elided ↑ open up ↑
1752 1752                  for (saddr = seg->s_base; saddr < eaddr; saddr = naddr) {
1753 1753                          prot = pr_getprot(seg, reserved, &tmp,
1754 1754                              &saddr, &naddr, eaddr);
1755 1755                          if (saddr == naddr)
1756 1756                                  continue;
1757 1757  
1758 1758                          mp = pr_iol_newbuf(iolhead, sizeof (*mp));
1759 1759  
1760 1760                          mp->pr_vaddr = (caddr32_t)(uintptr_t)saddr;
1761 1761                          mp->pr_size = (size32_t)(naddr - saddr);
1762      -                        mp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
     1762 +                        mp->pr_offset = segop_getoffset(seg, saddr);
1763 1763                          mp->pr_mflags = 0;
1764 1764                          if (prot & PROT_READ)
1765 1765                                  mp->pr_mflags |= MA_READ;
1766 1766                          if (prot & PROT_WRITE)
1767 1767                                  mp->pr_mflags |= MA_WRITE;
1768 1768                          if (prot & PROT_EXEC)
1769 1769                                  mp->pr_mflags |= MA_EXEC;
1770      -                        if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
     1770 +                        if (segop_gettype(seg, saddr) & MAP_SHARED)
1771 1771                                  mp->pr_mflags |= MA_SHARED;
1772      -                        if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
     1772 +                        if (segop_gettype(seg, saddr) & MAP_NORESERVE)
1773 1773                                  mp->pr_mflags |= MA_NORESERVE;
1774 1774                          if (seg->s_ops == &segspt_shmops ||
1775 1775                              (seg->s_ops == &segvn_ops &&
1776      -                            (SEGOP_GETVP(seg, saddr, &vp) != 0 || vp == NULL)))
     1776 +                            (segop_getvp(seg, saddr, &vp) != 0 || vp == NULL)))
1777 1777                                  mp->pr_mflags |= MA_ANON;
1778 1778                          if (seg == brkseg)
1779 1779                                  mp->pr_mflags |= MA_BREAK;
1780 1780                          else if (seg == stkseg) {
1781 1781                                  mp->pr_mflags |= MA_STACK;
1782 1782                                  if (reserved) {
1783 1783                                          size_t maxstack =
1784 1784                                              ((size_t)p->p_stk_ctl +
1785 1785                                              PAGEOFFSET) & PAGEMASK;
1786 1786                                          uintptr_t vaddr =
↓ open down ↓ 6 lines elided ↑ open up ↑
1793 1793                          }
1794 1794                          if (seg->s_ops == &segspt_shmops)
1795 1795                                  mp->pr_mflags |= MA_ISM | MA_SHM;
1796 1796                          mp->pr_pagesize = PAGESIZE;
1797 1797  
1798 1798                          /*
1799 1799                           * Manufacture a filename for the "object" directory.
1800 1800                           */
1801 1801                          vattr.va_mask = AT_FSID|AT_NODEID;
1802 1802                          if (seg->s_ops == &segvn_ops &&
1803      -                            SEGOP_GETVP(seg, saddr, &vp) == 0 &&
     1803 +                            segop_getvp(seg, saddr, &vp) == 0 &&
1804 1804                              vp != NULL && vp->v_type == VREG &&
1805 1805                              VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
1806 1806                                  if (vp == p->p_exec)
1807 1807                                          (void) strcpy(mp->pr_mapname, "a.out");
1808 1808                                  else
1809 1809                                          pr_object_name(mp->pr_mapname,
1810 1810                                              vp, &vattr);
1811 1811                          }
1812 1812  
1813 1813                          /*
↓ open down ↓ 132 lines elided ↑ open up ↑
1946 1946                                  continue;
1947 1947                          npage = len / PAGESIZE;
1948 1948                          next = (uintptr_t)(pmp + 1) + round8(npage);
1949 1949                          /*
1950 1950                           * It's possible that the address space can change
1951 1951                           * subtlely even though we're holding as->a_lock
1952 1952                           * due to the nondeterminism of page_exists() in
1953 1953                           * the presence of asychronously flushed pages or
1954 1954                           * mapped files whose sizes are changing.
1955 1955                           * page_exists() may be called indirectly from
1956      -                         * pr_getprot() by a SEGOP_INCORE() routine.
     1956 +                         * pr_getprot() by a segop_incore() routine.
1957 1957                           * If this happens we need to make sure we don't
1958 1958                           * overrun the buffer whose size we computed based
1959 1959                           * on the initial iteration through the segments.
1960 1960                           * Once we've detected an overflow, we need to clean
1961 1961                           * up the temporary memory allocated in pr_getprot()
1962 1962                           * and retry. If there's a pending signal, we return
1963 1963                           * EINTR so that this thread can be dislodged if
1964 1964                           * a latent bug causes us to spin indefinitely.
1965 1965                           */
1966 1966                          if (next > (uintptr_t)buf + size) {
↓ open down ↓ 5 lines elided ↑ open up ↑
1972 1972                                  if (ISSIG(curthread, JUSTLOOKING))
1973 1973                                          return (EINTR);
1974 1974  
1975 1975                                  goto again;
1976 1976                          }
1977 1977  
1978 1978                          php->pr_nmap++;
1979 1979                          php->pr_npage += npage;
1980 1980                          pmp->pr_vaddr = (uintptr_t)saddr;
1981 1981                          pmp->pr_npage = npage;
1982      -                        pmp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
     1982 +                        pmp->pr_offset = segop_getoffset(seg, saddr);
1983 1983                          pmp->pr_mflags = 0;
1984 1984                          if (prot & PROT_READ)
1985 1985                                  pmp->pr_mflags |= MA_READ;
1986 1986                          if (prot & PROT_WRITE)
1987 1987                                  pmp->pr_mflags |= MA_WRITE;
1988 1988                          if (prot & PROT_EXEC)
1989 1989                                  pmp->pr_mflags |= MA_EXEC;
1990      -                        if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
     1990 +                        if (segop_gettype(seg, saddr) & MAP_SHARED)
1991 1991                                  pmp->pr_mflags |= MA_SHARED;
1992      -                        if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
     1992 +                        if (segop_gettype(seg, saddr) & MAP_NORESERVE)
1993 1993                                  pmp->pr_mflags |= MA_NORESERVE;
1994 1994                          if (seg->s_ops == &segspt_shmops ||
1995 1995                              (seg->s_ops == &segvn_ops &&
1996      -                            (SEGOP_GETVP(seg, saddr, &vp) != 0 || vp == NULL)))
     1996 +                            (segop_getvp(seg, saddr, &vp) != 0 || vp == NULL)))
1997 1997                                  pmp->pr_mflags |= MA_ANON;
1998 1998                          if (seg->s_ops == &segspt_shmops)
1999 1999                                  pmp->pr_mflags |= MA_ISM | MA_SHM;
2000 2000                          pmp->pr_pagesize = PAGESIZE;
2001 2001                          /*
2002 2002                           * Manufacture a filename for the "object" directory.
2003 2003                           */
2004 2004                          vattr.va_mask = AT_FSID|AT_NODEID;
2005 2005                          if (seg->s_ops == &segvn_ops &&
2006      -                            SEGOP_GETVP(seg, saddr, &vp) == 0 &&
     2006 +                            segop_getvp(seg, saddr, &vp) == 0 &&
2007 2007                              vp != NULL && vp->v_type == VREG &&
2008 2008                              VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
2009 2009                                  if (vp == p->p_exec)
2010 2010                                          (void) strcpy(pmp->pr_mapname, "a.out");
2011 2011                                  else
2012 2012                                          pr_object_name(pmp->pr_mapname,
2013 2013                                              vp, &vattr);
2014 2014                          }
2015 2015  
2016 2016                          /*
↓ open down ↓ 76 lines elided ↑ open up ↑
2093 2093                                  continue;
2094 2094                          npage = len / PAGESIZE;
2095 2095                          next = (uintptr_t)(pmp + 1) + round8(npage);
2096 2096                          /*
2097 2097                           * It's possible that the address space can change
2098 2098                           * subtlely even though we're holding as->a_lock
2099 2099                           * due to the nondeterminism of page_exists() in
2100 2100                           * the presence of asychronously flushed pages or
2101 2101                           * mapped files whose sizes are changing.
2102 2102                           * page_exists() may be called indirectly from
2103      -                         * pr_getprot() by a SEGOP_INCORE() routine.
     2103 +                         * pr_getprot() by a segop_incore() routine.
2104 2104                           * If this happens we need to make sure we don't
2105 2105                           * overrun the buffer whose size we computed based
2106 2106                           * on the initial iteration through the segments.
2107 2107                           * Once we've detected an overflow, we need to clean
2108 2108                           * up the temporary memory allocated in pr_getprot()
2109 2109                           * and retry. If there's a pending signal, we return
2110 2110                           * EINTR so that this thread can be dislodged if
2111 2111                           * a latent bug causes us to spin indefinitely.
2112 2112                           */
2113 2113                          if (next > (uintptr_t)buf + size) {
↓ open down ↓ 5 lines elided ↑ open up ↑
2119 2119                                  if (ISSIG(curthread, JUSTLOOKING))
2120 2120                                          return (EINTR);
2121 2121  
2122 2122                                  goto again;
2123 2123                          }
2124 2124  
2125 2125                          php->pr_nmap++;
2126 2126                          php->pr_npage += npage;
2127 2127                          pmp->pr_vaddr = (caddr32_t)(uintptr_t)saddr;
2128 2128                          pmp->pr_npage = (size32_t)npage;
2129      -                        pmp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
     2129 +                        pmp->pr_offset = segop_getoffset(seg, saddr);
2130 2130                          pmp->pr_mflags = 0;
2131 2131                          if (prot & PROT_READ)
2132 2132                                  pmp->pr_mflags |= MA_READ;
2133 2133                          if (prot & PROT_WRITE)
2134 2134                                  pmp->pr_mflags |= MA_WRITE;
2135 2135                          if (prot & PROT_EXEC)
2136 2136                                  pmp->pr_mflags |= MA_EXEC;
2137      -                        if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
     2137 +                        if (segop_gettype(seg, saddr) & MAP_SHARED)
2138 2138                                  pmp->pr_mflags |= MA_SHARED;
2139      -                        if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
     2139 +                        if (segop_gettype(seg, saddr) & MAP_NORESERVE)
2140 2140                                  pmp->pr_mflags |= MA_NORESERVE;
2141 2141                          if (seg->s_ops == &segspt_shmops ||
2142 2142                              (seg->s_ops == &segvn_ops &&
2143      -                            (SEGOP_GETVP(seg, saddr, &vp) != 0 || vp == NULL)))
     2143 +                            (segop_getvp(seg, saddr, &vp) != 0 || vp == NULL)))
2144 2144                                  pmp->pr_mflags |= MA_ANON;
2145 2145                          if (seg->s_ops == &segspt_shmops)
2146 2146                                  pmp->pr_mflags |= MA_ISM | MA_SHM;
2147 2147                          pmp->pr_pagesize = PAGESIZE;
2148 2148                          /*
2149 2149                           * Manufacture a filename for the "object" directory.
2150 2150                           */
2151 2151                          vattr.va_mask = AT_FSID|AT_NODEID;
2152 2152                          if (seg->s_ops == &segvn_ops &&
2153      -                            SEGOP_GETVP(seg, saddr, &vp) == 0 &&
     2153 +                            segop_getvp(seg, saddr, &vp) == 0 &&
2154 2154                              vp != NULL && vp->v_type == VREG &&
2155 2155                              VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
2156 2156                                  if (vp == p->p_exec)
2157 2157                                          (void) strcpy(pmp->pr_mapname, "a.out");
2158 2158                                  else
2159 2159                                          pr_object_name(pmp->pr_mapname,
2160 2160                                              vp, &vattr);
2161 2161                          }
2162 2162  
2163 2163                          /*
↓ open down ↓ 1157 lines elided ↑ open up ↑
3321 3321          while ((pwp = avl_destroy_nodes(&as->a_wpage, &cookie)) != NULL) {
3322 3322                  retrycnt = 0;
3323 3323                  if ((prot = pwp->wp_oprot) != 0) {
3324 3324                          caddr_t addr = pwp->wp_vaddr;
3325 3325                          struct seg *seg;
3326 3326                  retry:
3327 3327  
3328 3328                          if ((pwp->wp_prot != prot ||
3329 3329                              (pwp->wp_flags & WP_NOWATCH)) &&
3330 3330                              (seg = as_segat(as, addr)) != NULL) {
3331      -                                err = SEGOP_SETPROT(seg, addr, PAGESIZE, prot);
     3331 +                                err = segop_setprot(seg, addr, PAGESIZE, prot);
3332 3332                                  if (err == IE_RETRY) {
3333 3333                                          ASSERT(retrycnt == 0);
3334 3334                                          retrycnt++;
3335 3335                                          goto retry;
3336 3336                                  }
3337 3337                          }
3338 3338                  }
3339 3339                  kmem_free(pwp, sizeof (struct watched_page));
3340 3340          }
3341 3341  
↓ open down ↓ 85 lines elided ↑ open up ↑
3427 3427                  pwp->wp_read++;
3428 3428          if (flags & WA_WRITE)
3429 3429                  pwp->wp_write++;
3430 3430          if (flags & WA_EXEC)
3431 3431                  pwp->wp_exec++;
3432 3432  
3433 3433          if (!(p->p_flag & SVFWAIT)) {
3434 3434                  vaddr = pwp->wp_vaddr;
3435 3435                  if (pwp->wp_oprot == 0 &&
3436 3436                      (seg = as_segat(as, vaddr)) != NULL) {
3437      -                        SEGOP_GETPROT(seg, vaddr, 0, &prot);
     3437 +                        (void) segop_getprot(seg, vaddr, 0, &prot);
3438 3438                          pwp->wp_oprot = (uchar_t)prot;
3439 3439                          pwp->wp_prot = (uchar_t)prot;
3440 3440                  }
3441 3441                  if (pwp->wp_oprot != 0) {
3442 3442                          prot = pwp->wp_oprot;
3443 3443                          if (pwp->wp_read)
3444 3444                                  prot &= ~(PROT_READ|PROT_WRITE|PROT_EXEC);
3445 3445                          if (pwp->wp_write)
3446 3446                                  prot &= ~PROT_WRITE;
3447 3447                          if (pwp->wp_exec)
↓ open down ↓ 185 lines elided ↑ open up ↑
3633 3633          if (lastpg < pnlim)
3634 3634                  len = (size_t)(eaddr - addr);
3635 3635          else
3636 3636                  len = pagev->pg_npages * PAGESIZE;
3637 3637  
3638 3638          if (pagev->pg_incore != NULL) {
3639 3639                  /*
3640 3640                   * INCORE cleverly has different semantics than GETPROT:
3641 3641                   * it returns info on pages up to but NOT including addr + len.
3642 3642                   */
3643      -                SEGOP_INCORE(seg, addr, len, pagev->pg_incore);
     3643 +                (void) segop_incore(seg, addr, len, pagev->pg_incore);
3644 3644                  pn = pagev->pg_pnbase;
3645 3645  
3646 3646                  do {
3647 3647                          /*
3648 3648                           * Guilty knowledge here:  We know that segvn_incore
3649 3649                           * returns more than just the low-order bit that
3650 3650                           * indicates the page is actually in memory.  If any
3651 3651                           * bits are set, then the page has backing store.
3652 3652                           */
3653 3653                          if (pagev->pg_incore[pn++ - pagev->pg_pnbase])
↓ open down ↓ 7 lines elided ↑ open up ↑
3661 3661                   */
3662 3662                  if (addr < eaddr)
3663 3663                          goto refill;
3664 3664          }
3665 3665  
3666 3666          /*
3667 3667           * Need to take len - 1 because addr + len is the address of the
3668 3668           * first byte of the page just past the end of what we want.
3669 3669           */
3670 3670  out:
3671      -        SEGOP_GETPROT(seg, saddr, len - 1, pagev->pg_protv);
     3671 +        (void) segop_getprot(seg, saddr, len - 1, pagev->pg_protv);
3672 3672          return (addr);
3673 3673  }
3674 3674  
3675 3675  static caddr_t
3676 3676  pr_pagev_nextprot(prpagev_t *pagev, struct seg *seg,
3677 3677      caddr_t *saddrp, caddr_t eaddr, uint_t *protp)
3678 3678  {
3679 3679          /*
3680 3680           * Our starting address is either the specified address, or the base
3681 3681           * address from the start of the pagev.  If the latter is greater,
↓ open down ↓ 100 lines elided ↑ open up ↑
3782 3782           * If this is a segvn mapping of a regular file, return the smaller
3783 3783           * of the segment size and the remaining size of the file beyond
3784 3784           * the file offset corresponding to seg->s_base.
3785 3785           */
3786 3786          if (seg->s_ops == &segvn_ops) {
3787 3787                  vattr_t vattr;
3788 3788                  vnode_t *vp;
3789 3789  
3790 3790                  vattr.va_mask = AT_SIZE;
3791 3791  
3792      -                if (SEGOP_GETVP(seg, seg->s_base, &vp) == 0 &&
     3792 +                if (segop_getvp(seg, seg->s_base, &vp) == 0 &&
3793 3793                      vp != NULL && vp->v_type == VREG &&
3794 3794                      VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
3795 3795  
3796 3796                          u_offset_t fsize = vattr.va_size;
3797      -                        u_offset_t offset = SEGOP_GETOFFSET(seg, seg->s_base);
     3797 +                        u_offset_t offset = segop_getoffset(seg, seg->s_base);
3798 3798  
3799 3799                          if (fsize < offset)
3800 3800                                  fsize = 0;
3801 3801                          else
3802 3802                                  fsize -= offset;
3803 3803  
3804 3804                          fsize = roundup(fsize, (u_offset_t)PAGESIZE);
3805 3805  
3806 3806                          if (fsize < (u_offset_t)size)
3807 3807                                  size = (size_t)fsize;
↓ open down ↓ 9 lines elided ↑ open up ↑
3817 3817          if (seg->s_ops == &segspt_shmops)
3818 3818                  return (MIN(spt_realsize(seg), size));
3819 3819  
3820 3820          /*
3821 3821           * If this is segment is a mapping from /dev/null, then this is a
3822 3822           * reservation of virtual address space and has no actual size.
3823 3823           * Such segments are backed by segdev and have type set to neither
3824 3824           * MAP_SHARED nor MAP_PRIVATE.
3825 3825           */
3826 3826          if (seg->s_ops == &segdev_ops &&
3827      -            ((SEGOP_GETTYPE(seg, seg->s_base) &
     3827 +            ((segop_gettype(seg, seg->s_base) &
3828 3828              (MAP_SHARED | MAP_PRIVATE)) == 0))
3829 3829                  return (0);
3830 3830  
3831 3831          /*
3832 3832           * If this segment doesn't match one of the special types we handle,
3833 3833           * just return the size of the segment itself.
3834 3834           */
3835 3835          return (size);
3836 3836  }
3837 3837  
↓ open down ↓ 210 lines elided ↑ open up ↑
4048 4048                           * ranges that have different underlying page sizes.
4049 4049                           */
4050 4050                          for (; saddr < baddr; saddr = naddr) {
4051 4051                                  psz = pr_getpagesize(seg, saddr, &naddr, baddr);
4052 4052                                  ASSERT(naddr >= saddr && naddr <= baddr);
4053 4053  
4054 4054                                  mp = pr_iol_newbuf(iolhead, sizeof (*mp));
4055 4055  
4056 4056                                  mp->pr_vaddr = (uintptr_t)saddr;
4057 4057                                  mp->pr_size = naddr - saddr;
4058      -                                mp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
     4058 +                                mp->pr_offset = segop_getoffset(seg, saddr);
4059 4059                                  mp->pr_mflags = 0;
4060 4060                                  if (prot & PROT_READ)
4061 4061                                          mp->pr_mflags |= MA_READ;
4062 4062                                  if (prot & PROT_WRITE)
4063 4063                                          mp->pr_mflags |= MA_WRITE;
4064 4064                                  if (prot & PROT_EXEC)
4065 4065                                          mp->pr_mflags |= MA_EXEC;
4066      -                                if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
     4066 +                                if (segop_gettype(seg, saddr) & MAP_SHARED)
4067 4067                                          mp->pr_mflags |= MA_SHARED;
4068      -                                if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
     4068 +                                if (segop_gettype(seg, saddr) & MAP_NORESERVE)
4069 4069                                          mp->pr_mflags |= MA_NORESERVE;
4070 4070                                  if (seg->s_ops == &segspt_shmops ||
4071 4071                                      (seg->s_ops == &segvn_ops &&
4072      -                                    (SEGOP_GETVP(seg, saddr, &vp) != 0 ||
     4072 +                                    (segop_getvp(seg, saddr, &vp) != 0 ||
4073 4073                                      vp == NULL)))
4074 4074                                          mp->pr_mflags |= MA_ANON;
4075 4075                                  if (seg == brkseg)
4076 4076                                          mp->pr_mflags |= MA_BREAK;
4077 4077                                  else if (seg == stkseg)
4078 4078                                          mp->pr_mflags |= MA_STACK;
4079 4079                                  if (seg->s_ops == &segspt_shmops)
4080 4080                                          mp->pr_mflags |= MA_ISM | MA_SHM;
4081 4081  
4082 4082                                  mp->pr_pagesize = PAGESIZE;
↓ open down ↓ 2 lines elided ↑ open up ↑
4085 4085                                  } else {
4086 4086                                          mp->pr_hatpagesize = psz;
4087 4087                                  }
4088 4088  
4089 4089                                  /*
4090 4090                                   * Manufacture a filename for the "object" dir.
4091 4091                                   */
4092 4092                                  mp->pr_dev = PRNODEV;
4093 4093                                  vattr.va_mask = AT_FSID|AT_NODEID;
4094 4094                                  if (seg->s_ops == &segvn_ops &&
4095      -                                    SEGOP_GETVP(seg, saddr, &vp) == 0 &&
     4095 +                                    segop_getvp(seg, saddr, &vp) == 0 &&
4096 4096                                      vp != NULL && vp->v_type == VREG &&
4097 4097                                      VOP_GETATTR(vp, &vattr, 0, CRED(),
4098 4098                                      NULL) == 0) {
4099 4099                                          mp->pr_dev = vattr.va_fsid;
4100 4100                                          mp->pr_ino = vattr.va_nodeid;
4101 4101                                          if (vp == p->p_exec)
4102 4102                                                  (void) strcpy(mp->pr_mapname,
4103 4103                                                      "a.out");
4104 4104                                          else
4105 4105                                                  pr_object_name(mp->pr_mapname,
↓ open down ↓ 11 lines elided ↑ open up ↑
4117 4117  
4118 4118                                          mp->pr_mflags |= MA_SHM;
4119 4119                                  } else {
4120 4120                                          mp->pr_shmid = -1;
4121 4121                                  }
4122 4122  
4123 4123                                  npages = ((uintptr_t)(naddr - saddr)) >>
4124 4124                                      PAGESHIFT;
4125 4125                                  parr = kmem_zalloc(npages, KM_SLEEP);
4126 4126  
4127      -                                SEGOP_INCORE(seg, saddr, naddr - saddr, parr);
     4127 +                                (void) segop_incore(seg, saddr, naddr - saddr,
     4128 +                                    parr);
4128 4129  
4129 4130                                  for (pagenum = 0; pagenum < npages; pagenum++) {
4130 4131                                          if (parr[pagenum] & SEG_PAGE_INCORE)
4131 4132                                                  mp->pr_rss++;
4132 4133                                          if (parr[pagenum] & SEG_PAGE_ANON)
4133 4134                                                  mp->pr_anon++;
4134 4135                                          if (parr[pagenum] & SEG_PAGE_LOCKED)
4135 4136                                                  mp->pr_locked++;
4136 4137                                  }
4137 4138                                  kmem_free(parr, npages);
↓ open down ↓ 94 lines elided ↑ open up ↑
4232 4233                           * ranges that have different underlying page sizes.
4233 4234                           */
4234 4235                          for (; saddr < baddr; saddr = naddr) {
4235 4236                                  psz = pr_getpagesize(seg, saddr, &naddr, baddr);
4236 4237                                  ASSERT(naddr >= saddr && naddr <= baddr);
4237 4238  
4238 4239                                  mp = pr_iol_newbuf(iolhead, sizeof (*mp));
4239 4240  
4240 4241                                  mp->pr_vaddr = (caddr32_t)(uintptr_t)saddr;
4241 4242                                  mp->pr_size = (size32_t)(naddr - saddr);
4242      -                                mp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
     4243 +                                mp->pr_offset = segop_getoffset(seg, saddr);
4243 4244                                  mp->pr_mflags = 0;
4244 4245                                  if (prot & PROT_READ)
4245 4246                                          mp->pr_mflags |= MA_READ;
4246 4247                                  if (prot & PROT_WRITE)
4247 4248                                          mp->pr_mflags |= MA_WRITE;
4248 4249                                  if (prot & PROT_EXEC)
4249 4250                                          mp->pr_mflags |= MA_EXEC;
4250      -                                if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
     4251 +                                if (segop_gettype(seg, saddr) & MAP_SHARED)
4251 4252                                          mp->pr_mflags |= MA_SHARED;
4252      -                                if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
     4253 +                                if (segop_gettype(seg, saddr) & MAP_NORESERVE)
4253 4254                                          mp->pr_mflags |= MA_NORESERVE;
4254 4255                                  if (seg->s_ops == &segspt_shmops ||
4255 4256                                      (seg->s_ops == &segvn_ops &&
4256      -                                    (SEGOP_GETVP(seg, saddr, &vp) != 0 ||
     4257 +                                    (segop_getvp(seg, saddr, &vp) != 0 ||
4257 4258                                      vp == NULL)))
4258 4259                                          mp->pr_mflags |= MA_ANON;
4259 4260                                  if (seg == brkseg)
4260 4261                                          mp->pr_mflags |= MA_BREAK;
4261 4262                                  else if (seg == stkseg)
4262 4263                                          mp->pr_mflags |= MA_STACK;
4263 4264                                  if (seg->s_ops == &segspt_shmops)
4264 4265                                          mp->pr_mflags |= MA_ISM | MA_SHM;
4265 4266  
4266 4267                                  mp->pr_pagesize = PAGESIZE;
↓ open down ↓ 2 lines elided ↑ open up ↑
4269 4270                                  } else {
4270 4271                                          mp->pr_hatpagesize = psz;
4271 4272                                  }
4272 4273  
4273 4274                                  /*
4274 4275                                   * Manufacture a filename for the "object" dir.
4275 4276                                   */
4276 4277                                  mp->pr_dev = PRNODEV32;
4277 4278                                  vattr.va_mask = AT_FSID|AT_NODEID;
4278 4279                                  if (seg->s_ops == &segvn_ops &&
4279      -                                    SEGOP_GETVP(seg, saddr, &vp) == 0 &&
     4280 +                                    segop_getvp(seg, saddr, &vp) == 0 &&
4280 4281                                      vp != NULL && vp->v_type == VREG &&
4281 4282                                      VOP_GETATTR(vp, &vattr, 0, CRED(),
4282 4283                                      NULL) == 0) {
4283 4284                                          (void) cmpldev(&mp->pr_dev,
4284 4285                                              vattr.va_fsid);
4285 4286                                          mp->pr_ino = vattr.va_nodeid;
4286 4287                                          if (vp == p->p_exec)
4287 4288                                                  (void) strcpy(mp->pr_mapname,
4288 4289                                                      "a.out");
4289 4290                                          else
↓ open down ↓ 12 lines elided ↑ open up ↑
4302 4303  
4303 4304                                          mp->pr_mflags |= MA_SHM;
4304 4305                                  } else {
4305 4306                                          mp->pr_shmid = -1;
4306 4307                                  }
4307 4308  
4308 4309                                  npages = ((uintptr_t)(naddr - saddr)) >>
4309 4310                                      PAGESHIFT;
4310 4311                                  parr = kmem_zalloc(npages, KM_SLEEP);
4311 4312  
4312      -                                SEGOP_INCORE(seg, saddr, naddr - saddr, parr);
     4313 +                                (void) segop_incore(seg, saddr, naddr - saddr,
     4314 +                                    parr);
4313 4315  
4314 4316                                  for (pagenum = 0; pagenum < npages; pagenum++) {
4315 4317                                          if (parr[pagenum] & SEG_PAGE_INCORE)
4316 4318                                                  mp->pr_rss++;
4317 4319                                          if (parr[pagenum] & SEG_PAGE_ANON)
4318 4320                                                  mp->pr_anon++;
4319 4321                                          if (parr[pagenum] & SEG_PAGE_LOCKED)
4320 4322                                                  mp->pr_locked++;
4321 4323                                  }
4322 4324                                  kmem_free(parr, npages);
4323 4325                          }
4324 4326                  }
4325 4327                  ASSERT(tmp == NULL);
4326 4328          } while ((seg = AS_SEGNEXT(as, seg)) != NULL);
4327 4329  
4328 4330          return (0);
4329 4331  }
4330 4332  #endif  /* _SYSCALL32_IMPL */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX