Print this page
patch as-lock-macro-simplification
*** 186,196 ****
struct seg *s1;
struct seg *s2;
size_t size;
struct as *as = seg->s_as;
! ASSERT(as && AS_WRITE_HELD(as, &as->a_lock));
/*
* Need a page per virtual color or just 1 if no vac.
*/
mutex_enter(&segnf_lock);
--- 186,196 ----
struct seg *s1;
struct seg *s2;
size_t size;
struct as *as = seg->s_as;
! ASSERT(as && AS_WRITE_HELD(as));
/*
* Need a page per virtual color or just 1 if no vac.
*/
mutex_enter(&segnf_lock);
*** 304,314 ****
* Split a segment at addr for length len.
*/
static int
segnf_unmap(struct seg *seg, caddr_t addr, size_t len)
{
! ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock));
/*
* Check for bad sizes.
*/
if (addr < seg->s_base || addr + len > seg->s_base + seg->s_size ||
--- 304,314 ----
* Split a segment at addr for length len.
*/
static int
segnf_unmap(struct seg *seg, caddr_t addr, size_t len)
{
! ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as));
/*
* Check for bad sizes.
*/
if (addr < seg->s_base || addr + len > seg->s_base + seg->s_size ||
*** 373,383 ****
* Free a segment.
*/
static void
segnf_free(struct seg *seg)
{
! ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock));
}
/*
* No faults allowed on segnf.
*/
--- 373,383 ----
* Free a segment.
*/
static void
segnf_free(struct seg *seg)
{
! ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as));
}
/*
* No faults allowed on segnf.
*/
*** 389,408 ****
/* ARGSUSED */
static int
segnf_setprot(struct seg *seg, caddr_t addr, size_t len, uint_t prot)
{
! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
return (EACCES);
}
/* ARGSUSED */
static int
segnf_checkprot(struct seg *seg, caddr_t addr, size_t len, uint_t prot)
{
uint_t sprot;
! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
sprot = seg->s_as == &kas ? PROT_READ : PROT_READ|PROT_USER;
return ((prot & sprot) == prot ? 0 : EACCES);
}
--- 389,408 ----
/* ARGSUSED */
static int
segnf_setprot(struct seg *seg, caddr_t addr, size_t len, uint_t prot)
{
! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
return (EACCES);
}
/* ARGSUSED */
static int
segnf_checkprot(struct seg *seg, caddr_t addr, size_t len, uint_t prot)
{
uint_t sprot;
! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
sprot = seg->s_as == &kas ? PROT_READ : PROT_READ|PROT_USER;
return ((prot & sprot) == prot ? 0 : EACCES);
}
*** 422,461 ****
static int
segnf_getprot(struct seg *seg, caddr_t addr, size_t len, uint_t *protv)
{
size_t pgno = seg_page(seg, addr + len) - seg_page(seg, addr) + 1;
size_t p;
! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
for (p = 0; p < pgno; ++p)
protv[p] = PROT_READ;
return (0);
}
/* ARGSUSED */
static u_offset_t
segnf_getoffset(struct seg *seg, caddr_t addr)
{
! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
return ((u_offset_t)0);
}
/* ARGSUSED */
static int
segnf_gettype(struct seg *seg, caddr_t addr)
{
! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
return (MAP_SHARED);
}
/* ARGSUSED */
static int
segnf_getvp(struct seg *seg, caddr_t addr, struct vnode **vpp)
{
! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock));
*vpp = &nfvp;
return (0);
}
--- 422,461 ----
static int
segnf_getprot(struct seg *seg, caddr_t addr, size_t len, uint_t *protv)
{
size_t pgno = seg_page(seg, addr + len) - seg_page(seg, addr) + 1;
size_t p;
! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
for (p = 0; p < pgno; ++p)
protv[p] = PROT_READ;
return (0);
}
/* ARGSUSED */
static u_offset_t
segnf_getoffset(struct seg *seg, caddr_t addr)
{
! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
return ((u_offset_t)0);
}
/* ARGSUSED */
static int
segnf_gettype(struct seg *seg, caddr_t addr)
{
! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
return (MAP_SHARED);
}
/* ARGSUSED */
static int
segnf_getvp(struct seg *seg, caddr_t addr, struct vnode **vpp)
{
! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as));
*vpp = &nfvp;
return (0);
}