Print this page
const-ify make segment ops structures
There is no reason to keep the segment ops structures writable.
patch lower-case-segops
@@ -95,12 +95,12 @@
ulong_t pg_pnbase; /* pn within segment of first protv element */
} prpagev_t;
size_t pagev_lim = 256 * 1024; /* limit on number of pages in prpagev_t */
-extern struct seg_ops segdev_ops; /* needs a header file */
-extern struct seg_ops segspt_shmops; /* needs a header file */
+extern const struct seg_ops segdev_ops; /* needs a header file */
+extern const struct seg_ops segspt_shmops; /* needs a header file */
static int set_watched_page(proc_t *, caddr_t, caddr_t, ulong_t, ulong_t);
static void clear_watched_page(proc_t *, caddr_t, caddr_t, ulong_t);
/*
@@ -1481,11 +1481,11 @@
if (p->p_brksize != 0)
addr += p->p_brksize - 1;
seg = as_segat(p->p_as, addr);
if (seg != NULL && seg->s_ops == &segvn_ops &&
- (SEGOP_GETVP(seg, seg->s_base, &vp) != 0 || vp == NULL))
+ (segop_getvp(seg, seg->s_base, &vp) != 0 || vp == NULL))
return (seg);
return (NULL);
}
/*
@@ -1646,25 +1646,25 @@
mp = pr_iol_newbuf(iolhead, sizeof (*mp));
mp->pr_vaddr = (uintptr_t)saddr;
mp->pr_size = naddr - saddr;
- mp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
+ mp->pr_offset = segop_getoffset(seg, saddr);
mp->pr_mflags = 0;
if (prot & PROT_READ)
mp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
mp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
mp->pr_mflags |= MA_EXEC;
- if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
+ if (segop_gettype(seg, saddr) & MAP_SHARED)
mp->pr_mflags |= MA_SHARED;
- if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
+ if (segop_gettype(seg, saddr) & MAP_NORESERVE)
mp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
- (SEGOP_GETVP(seg, saddr, &vp) != 0 || vp == NULL)))
+ (segop_getvp(seg, saddr, &vp) != 0 || vp == NULL)))
mp->pr_mflags |= MA_ANON;
if (seg == brkseg)
mp->pr_mflags |= MA_BREAK;
else if (seg == stkseg) {
mp->pr_mflags |= MA_STACK;
@@ -1686,11 +1686,11 @@
/*
* Manufacture a filename for the "object" directory.
*/
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
- SEGOP_GETVP(seg, saddr, &vp) == 0 &&
+ segop_getvp(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
if (vp == p->p_exec)
(void) strcpy(mp->pr_mapname, "a.out");
else
@@ -1757,25 +1757,25 @@
mp = pr_iol_newbuf(iolhead, sizeof (*mp));
mp->pr_vaddr = (caddr32_t)(uintptr_t)saddr;
mp->pr_size = (size32_t)(naddr - saddr);
- mp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
+ mp->pr_offset = segop_getoffset(seg, saddr);
mp->pr_mflags = 0;
if (prot & PROT_READ)
mp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
mp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
mp->pr_mflags |= MA_EXEC;
- if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
+ if (segop_gettype(seg, saddr) & MAP_SHARED)
mp->pr_mflags |= MA_SHARED;
- if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
+ if (segop_gettype(seg, saddr) & MAP_NORESERVE)
mp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
- (SEGOP_GETVP(seg, saddr, &vp) != 0 || vp == NULL)))
+ (segop_getvp(seg, saddr, &vp) != 0 || vp == NULL)))
mp->pr_mflags |= MA_ANON;
if (seg == brkseg)
mp->pr_mflags |= MA_BREAK;
else if (seg == stkseg) {
mp->pr_mflags |= MA_STACK;
@@ -1798,11 +1798,11 @@
/*
* Manufacture a filename for the "object" directory.
*/
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
- SEGOP_GETVP(seg, saddr, &vp) == 0 &&
+ segop_getvp(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
if (vp == p->p_exec)
(void) strcpy(mp->pr_mapname, "a.out");
else
@@ -1951,11 +1951,11 @@
* subtlely even though we're holding as->a_lock
* due to the nondeterminism of page_exists() in
* the presence of asychronously flushed pages or
* mapped files whose sizes are changing.
* page_exists() may be called indirectly from
- * pr_getprot() by a SEGOP_INCORE() routine.
+ * pr_getprot() by a segop_incore() routine.
* If this happens we need to make sure we don't
* overrun the buffer whose size we computed based
* on the initial iteration through the segments.
* Once we've detected an overflow, we need to clean
* up the temporary memory allocated in pr_getprot()
@@ -1977,35 +1977,35 @@
php->pr_nmap++;
php->pr_npage += npage;
pmp->pr_vaddr = (uintptr_t)saddr;
pmp->pr_npage = npage;
- pmp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
+ pmp->pr_offset = segop_getoffset(seg, saddr);
pmp->pr_mflags = 0;
if (prot & PROT_READ)
pmp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
pmp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
pmp->pr_mflags |= MA_EXEC;
- if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
+ if (segop_gettype(seg, saddr) & MAP_SHARED)
pmp->pr_mflags |= MA_SHARED;
- if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
+ if (segop_gettype(seg, saddr) & MAP_NORESERVE)
pmp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
- (SEGOP_GETVP(seg, saddr, &vp) != 0 || vp == NULL)))
+ (segop_getvp(seg, saddr, &vp) != 0 || vp == NULL)))
pmp->pr_mflags |= MA_ANON;
if (seg->s_ops == &segspt_shmops)
pmp->pr_mflags |= MA_ISM | MA_SHM;
pmp->pr_pagesize = PAGESIZE;
/*
* Manufacture a filename for the "object" directory.
*/
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
- SEGOP_GETVP(seg, saddr, &vp) == 0 &&
+ segop_getvp(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
if (vp == p->p_exec)
(void) strcpy(pmp->pr_mapname, "a.out");
else
@@ -2098,11 +2098,11 @@
* subtlely even though we're holding as->a_lock
* due to the nondeterminism of page_exists() in
* the presence of asychronously flushed pages or
* mapped files whose sizes are changing.
* page_exists() may be called indirectly from
- * pr_getprot() by a SEGOP_INCORE() routine.
+ * pr_getprot() by a segop_incore() routine.
* If this happens we need to make sure we don't
* overrun the buffer whose size we computed based
* on the initial iteration through the segments.
* Once we've detected an overflow, we need to clean
* up the temporary memory allocated in pr_getprot()
@@ -2124,35 +2124,35 @@
php->pr_nmap++;
php->pr_npage += npage;
pmp->pr_vaddr = (caddr32_t)(uintptr_t)saddr;
pmp->pr_npage = (size32_t)npage;
- pmp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
+ pmp->pr_offset = segop_getoffset(seg, saddr);
pmp->pr_mflags = 0;
if (prot & PROT_READ)
pmp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
pmp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
pmp->pr_mflags |= MA_EXEC;
- if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
+ if (segop_gettype(seg, saddr) & MAP_SHARED)
pmp->pr_mflags |= MA_SHARED;
- if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
+ if (segop_gettype(seg, saddr) & MAP_NORESERVE)
pmp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
- (SEGOP_GETVP(seg, saddr, &vp) != 0 || vp == NULL)))
+ (segop_getvp(seg, saddr, &vp) != 0 || vp == NULL)))
pmp->pr_mflags |= MA_ANON;
if (seg->s_ops == &segspt_shmops)
pmp->pr_mflags |= MA_ISM | MA_SHM;
pmp->pr_pagesize = PAGESIZE;
/*
* Manufacture a filename for the "object" directory.
*/
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
- SEGOP_GETVP(seg, saddr, &vp) == 0 &&
+ segop_getvp(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
if (vp == p->p_exec)
(void) strcpy(pmp->pr_mapname, "a.out");
else
@@ -3326,11 +3326,11 @@
retry:
if ((pwp->wp_prot != prot ||
(pwp->wp_flags & WP_NOWATCH)) &&
(seg = as_segat(as, addr)) != NULL) {
- err = SEGOP_SETPROT(seg, addr, PAGESIZE, prot);
+ err = segop_setprot(seg, addr, PAGESIZE, prot);
if (err == IE_RETRY) {
ASSERT(retrycnt == 0);
retrycnt++;
goto retry;
}
@@ -3432,11 +3432,11 @@
if (!(p->p_flag & SVFWAIT)) {
vaddr = pwp->wp_vaddr;
if (pwp->wp_oprot == 0 &&
(seg = as_segat(as, vaddr)) != NULL) {
- SEGOP_GETPROT(seg, vaddr, 0, &prot);
+ segop_getprot(seg, vaddr, 0, &prot);
pwp->wp_oprot = (uchar_t)prot;
pwp->wp_prot = (uchar_t)prot;
}
if (pwp->wp_oprot != 0) {
prot = pwp->wp_oprot;
@@ -3638,11 +3638,11 @@
if (pagev->pg_incore != NULL) {
/*
* INCORE cleverly has different semantics than GETPROT:
* it returns info on pages up to but NOT including addr + len.
*/
- SEGOP_INCORE(seg, addr, len, pagev->pg_incore);
+ segop_incore(seg, addr, len, pagev->pg_incore);
pn = pagev->pg_pnbase;
do {
/*
* Guilty knowledge here: We know that segvn_incore
@@ -3666,11 +3666,11 @@
/*
* Need to take len - 1 because addr + len is the address of the
* first byte of the page just past the end of what we want.
*/
out:
- SEGOP_GETPROT(seg, saddr, len - 1, pagev->pg_protv);
+ segop_getprot(seg, saddr, len - 1, pagev->pg_protv);
return (addr);
}
static caddr_t
pr_pagev_nextprot(prpagev_t *pagev, struct seg *seg,
@@ -3787,16 +3787,16 @@
vattr_t vattr;
vnode_t *vp;
vattr.va_mask = AT_SIZE;
- if (SEGOP_GETVP(seg, seg->s_base, &vp) == 0 &&
+ if (segop_getvp(seg, seg->s_base, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(), NULL) == 0) {
u_offset_t fsize = vattr.va_size;
- u_offset_t offset = SEGOP_GETOFFSET(seg, seg->s_base);
+ u_offset_t offset = segop_getoffset(seg, seg->s_base);
if (fsize < offset)
fsize = 0;
else
fsize -= offset;
@@ -3822,11 +3822,11 @@
* reservation of virtual address space and has no actual size.
* Such segments are backed by segdev and have type set to neither
* MAP_SHARED nor MAP_PRIVATE.
*/
if (seg->s_ops == &segdev_ops &&
- ((SEGOP_GETTYPE(seg, seg->s_base) &
+ ((segop_gettype(seg, seg->s_base) &
(MAP_SHARED | MAP_PRIVATE)) == 0))
return (0);
/*
* If this segment doesn't match one of the special types we handle,
@@ -4053,25 +4053,25 @@
mp = pr_iol_newbuf(iolhead, sizeof (*mp));
mp->pr_vaddr = (uintptr_t)saddr;
mp->pr_size = naddr - saddr;
- mp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
+ mp->pr_offset = segop_getoffset(seg, saddr);
mp->pr_mflags = 0;
if (prot & PROT_READ)
mp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
mp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
mp->pr_mflags |= MA_EXEC;
- if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
+ if (segop_gettype(seg, saddr) & MAP_SHARED)
mp->pr_mflags |= MA_SHARED;
- if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
+ if (segop_gettype(seg, saddr) & MAP_NORESERVE)
mp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
- (SEGOP_GETVP(seg, saddr, &vp) != 0 ||
+ (segop_getvp(seg, saddr, &vp) != 0 ||
vp == NULL)))
mp->pr_mflags |= MA_ANON;
if (seg == brkseg)
mp->pr_mflags |= MA_BREAK;
else if (seg == stkseg)
@@ -4090,11 +4090,11 @@
* Manufacture a filename for the "object" dir.
*/
mp->pr_dev = PRNODEV;
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
- SEGOP_GETVP(seg, saddr, &vp) == 0 &&
+ segop_getvp(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(),
NULL) == 0) {
mp->pr_dev = vattr.va_fsid;
mp->pr_ino = vattr.va_nodeid;
@@ -4122,11 +4122,11 @@
npages = ((uintptr_t)(naddr - saddr)) >>
PAGESHIFT;
parr = kmem_zalloc(npages, KM_SLEEP);
- SEGOP_INCORE(seg, saddr, naddr - saddr, parr);
+ segop_incore(seg, saddr, naddr - saddr, parr);
for (pagenum = 0; pagenum < npages; pagenum++) {
if (parr[pagenum] & SEG_PAGE_INCORE)
mp->pr_rss++;
if (parr[pagenum] & SEG_PAGE_ANON)
@@ -4237,25 +4237,25 @@
mp = pr_iol_newbuf(iolhead, sizeof (*mp));
mp->pr_vaddr = (caddr32_t)(uintptr_t)saddr;
mp->pr_size = (size32_t)(naddr - saddr);
- mp->pr_offset = SEGOP_GETOFFSET(seg, saddr);
+ mp->pr_offset = segop_getoffset(seg, saddr);
mp->pr_mflags = 0;
if (prot & PROT_READ)
mp->pr_mflags |= MA_READ;
if (prot & PROT_WRITE)
mp->pr_mflags |= MA_WRITE;
if (prot & PROT_EXEC)
mp->pr_mflags |= MA_EXEC;
- if (SEGOP_GETTYPE(seg, saddr) & MAP_SHARED)
+ if (segop_gettype(seg, saddr) & MAP_SHARED)
mp->pr_mflags |= MA_SHARED;
- if (SEGOP_GETTYPE(seg, saddr) & MAP_NORESERVE)
+ if (segop_gettype(seg, saddr) & MAP_NORESERVE)
mp->pr_mflags |= MA_NORESERVE;
if (seg->s_ops == &segspt_shmops ||
(seg->s_ops == &segvn_ops &&
- (SEGOP_GETVP(seg, saddr, &vp) != 0 ||
+ (segop_getvp(seg, saddr, &vp) != 0 ||
vp == NULL)))
mp->pr_mflags |= MA_ANON;
if (seg == brkseg)
mp->pr_mflags |= MA_BREAK;
else if (seg == stkseg)
@@ -4274,11 +4274,11 @@
* Manufacture a filename for the "object" dir.
*/
mp->pr_dev = PRNODEV32;
vattr.va_mask = AT_FSID|AT_NODEID;
if (seg->s_ops == &segvn_ops &&
- SEGOP_GETVP(seg, saddr, &vp) == 0 &&
+ segop_getvp(seg, saddr, &vp) == 0 &&
vp != NULL && vp->v_type == VREG &&
VOP_GETATTR(vp, &vattr, 0, CRED(),
NULL) == 0) {
(void) cmpldev(&mp->pr_dev,
vattr.va_fsid);
@@ -4307,11 +4307,11 @@
npages = ((uintptr_t)(naddr - saddr)) >>
PAGESHIFT;
parr = kmem_zalloc(npages, KM_SLEEP);
- SEGOP_INCORE(seg, saddr, naddr - saddr, parr);
+ segop_incore(seg, saddr, naddr - saddr, parr);
for (pagenum = 0; pagenum < npages; pagenum++) {
if (parr[pagenum] & SEG_PAGE_INCORE)
mp->pr_rss++;
if (parr[pagenum] & SEG_PAGE_ANON)