Print this page
patch as-lock-macro-simplification

*** 366,376 **** /* * Since the address space is "write" locked, we * don't need the segment lock to protect "segdev" data. */ ! ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock)); hat_map(seg->s_as->a_hat, seg->s_base, seg->s_size, HAT_MAP); sdp = sdp_alloc(); --- 366,376 ---- /* * Since the address space is "write" locked, we * don't need the segment lock to protect "segdev" data. */ ! ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as)); hat_map(seg->s_as->a_hat, seg->s_base, seg->s_size, HAT_MAP); sdp = sdp_alloc();
*** 472,482 **** /* * Since the address space is "write" locked, we * don't need the segment lock to protect "segdev" data. */ ! ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock)); newsdp = sdp_alloc(); newseg->s_ops = seg->s_ops; newseg->s_data = (void *)newsdp; --- 472,482 ---- /* * Since the address space is "write" locked, we * don't need the segment lock to protect "segdev" data. */ ! ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as)); newsdp = sdp_alloc(); newseg->s_ops = seg->s_ops; newseg->s_data = (void *)newsdp;
*** 644,654 **** /* * Since the address space is "write" locked, we * don't need the segment lock to protect "segdev" data. */ ! ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock)); if ((sz = sdp->softlockcnt) > 0) { /* * Fail the unmap if pages are SOFTLOCKed through this mapping. * softlockcnt is protected from change by the as write lock. --- 644,654 ---- /* * Since the address space is "write" locked, we * don't need the segment lock to protect "segdev" data. */ ! ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as)); if ((sz = sdp->softlockcnt) > 0) { /* * Fail the unmap if pages are SOFTLOCKed through this mapping. * softlockcnt is protected from change by the as write lock.
*** 1133,1143 **** /* * Since the address space is "write" locked, we * don't need the segment lock to protect "segdev" data. */ ! ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as, &seg->s_as->a_lock)); while (dhp != NULL) dhp = devmap_handle_unmap(dhp); VN_RELE(sdp->vp); --- 1133,1143 ---- /* * Since the address space is "write" locked, we * don't need the segment lock to protect "segdev" data. */ ! ASSERT(seg->s_as && AS_WRITE_HELD(seg->s_as)); while (dhp != NULL) dhp = devmap_handle_unmap(dhp); VN_RELE(sdp->vp);
*** 1615,1625 **** (void *)dhp_head, (void *)seg, (void *)addr, len, type); DEBUGF(7, (CE_CONT, "segdev_fault: dhp_head %p seg %p " "addr %p len %lx type %x\n", (void *)dhp_head, (void *)seg, (void *)addr, len, type)); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); /* Handle non-devmap case */ if (dhp_head == NULL) return (segdev_faultpages(hat, seg, addr, len, type, rw, NULL)); --- 1615,1625 ---- (void *)dhp_head, (void *)seg, (void *)addr, len, type); DEBUGF(7, (CE_CONT, "segdev_fault: dhp_head %p seg %p " "addr %p len %lx type %x\n", (void *)dhp_head, (void *)seg, (void *)addr, len, type)); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); /* Handle non-devmap case */ if (dhp_head == NULL) return (segdev_faultpages(hat, seg, addr, len, type, rw, NULL));
*** 2055,2065 **** static faultcode_t segdev_faulta(struct seg *seg, caddr_t addr) { TRACE_2(TR_FAC_DEVMAP, TR_DEVMAP_FAULTA, "segdev_faulta: seg=%p addr=%p", (void *)seg, (void *)addr); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); return (0); } static int --- 2055,2065 ---- static faultcode_t segdev_faulta(struct seg *seg, caddr_t addr) { TRACE_2(TR_FAC_DEVMAP, TR_DEVMAP_FAULTA, "segdev_faulta: seg=%p addr=%p", (void *)seg, (void *)addr); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); return (0); } static int
*** 2073,2083 **** size_t mlen, sz; TRACE_4(TR_FAC_DEVMAP, TR_DEVMAP_SETPROT, "segdev_setprot:start seg=%p addr=%p len=%lx prot=%x", (void *)seg, (void *)addr, len, prot); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); if ((sz = sdp->softlockcnt) > 0 && dhp_head != NULL) { /* * Fail the setprot if pages are SOFTLOCKed through this * mapping. --- 2073,2083 ---- size_t mlen, sz; TRACE_4(TR_FAC_DEVMAP, TR_DEVMAP_SETPROT, "segdev_setprot:start seg=%p addr=%p len=%lx prot=%x", (void *)seg, (void *)addr, len, prot); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); if ((sz = sdp->softlockcnt) > 0 && dhp_head != NULL) { /* * Fail the setprot if pages are SOFTLOCKed through this * mapping.
*** 2196,2206 **** struct vpage *vp, *evp; TRACE_4(TR_FAC_DEVMAP, TR_DEVMAP_CHECKPROT, "segdev_checkprot:start seg=%p addr=%p len=%lx prot=%x", (void *)seg, (void *)addr, len, prot); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); /* * If segment protection can be used, simply check against them */ rw_enter(&sdp->lock, RW_READER); --- 2196,2206 ---- struct vpage *vp, *evp; TRACE_4(TR_FAC_DEVMAP, TR_DEVMAP_CHECKPROT, "segdev_checkprot:start seg=%p addr=%p len=%lx prot=%x", (void *)seg, (void *)addr, len, prot); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); /* * If segment protection can be used, simply check against them */ rw_enter(&sdp->lock, RW_READER);
*** 2233,2243 **** size_t pgno; TRACE_4(TR_FAC_DEVMAP, TR_DEVMAP_GETPROT, "segdev_getprot:start seg=%p addr=%p len=%lx protv=%p", (void *)seg, (void *)addr, len, (void *)protv); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); pgno = seg_page(seg, addr + len) - seg_page(seg, addr) + 1; if (pgno != 0) { rw_enter(&sdp->lock, RW_READER); if (sdp->pageprot == 0) { --- 2233,2243 ---- size_t pgno; TRACE_4(TR_FAC_DEVMAP, TR_DEVMAP_GETPROT, "segdev_getprot:start seg=%p addr=%p len=%lx protv=%p", (void *)seg, (void *)addr, len, (void *)protv); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); pgno = seg_page(seg, addr + len) - seg_page(seg, addr) + 1; if (pgno != 0) { rw_enter(&sdp->lock, RW_READER); if (sdp->pageprot == 0) {
*** 2264,2274 **** register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; TRACE_2(TR_FAC_DEVMAP, TR_DEVMAP_GETOFFSET, "segdev_getoffset:start seg=%p addr=%p", (void *)seg, (void *)addr); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); return ((u_offset_t)sdp->offset + (addr - seg->s_base)); } /*ARGSUSED*/ --- 2264,2274 ---- register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; TRACE_2(TR_FAC_DEVMAP, TR_DEVMAP_GETOFFSET, "segdev_getoffset:start seg=%p addr=%p", (void *)seg, (void *)addr); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); return ((u_offset_t)sdp->offset + (addr - seg->s_base)); } /*ARGSUSED*/
*** 2278,2288 **** register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; TRACE_2(TR_FAC_DEVMAP, TR_DEVMAP_GETTYPE, "segdev_gettype:start seg=%p addr=%p", (void *)seg, (void *)addr); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); return (sdp->type); } --- 2278,2288 ---- register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; TRACE_2(TR_FAC_DEVMAP, TR_DEVMAP_GETTYPE, "segdev_gettype:start seg=%p addr=%p", (void *)seg, (void *)addr); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); return (sdp->type); }
*** 2293,2303 **** register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; TRACE_2(TR_FAC_DEVMAP, TR_DEVMAP_GETVP, "segdev_getvp:start seg=%p addr=%p", (void *)seg, (void *)addr); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); /* * Note that this vp is the common_vp of the device, where the * pages are hung .. */ --- 2293,2303 ---- register struct segdev_data *sdp = (struct segdev_data *)seg->s_data; TRACE_2(TR_FAC_DEVMAP, TR_DEVMAP_GETVP, "segdev_getvp:start seg=%p addr=%p", (void *)seg, (void *)addr); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); /* * Note that this vp is the common_vp of the device, where the * pages are hung .. */
*** 2323,2333 **** static int segdev_sync(struct seg *seg, caddr_t addr, size_t len, int attr, uint_t flags) { TRACE_0(TR_FAC_DEVMAP, TR_DEVMAP_SYNC, "segdev_sync:start"); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); return (0); } /* --- 2323,2333 ---- static int segdev_sync(struct seg *seg, caddr_t addr, size_t len, int attr, uint_t flags) { TRACE_0(TR_FAC_DEVMAP, TR_DEVMAP_SYNC, "segdev_sync:start"); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); return (0); } /*
*** 2339,2349 **** { size_t v = 0; TRACE_0(TR_FAC_DEVMAP, TR_DEVMAP_INCORE, "segdev_incore:start"); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); for (len = (len + PAGEOFFSET) & PAGEMASK; len; len -= PAGESIZE, v += PAGESIZE) *vec++ = 1; return (v); --- 2339,2349 ---- { size_t v = 0; TRACE_0(TR_FAC_DEVMAP, TR_DEVMAP_INCORE, "segdev_incore:start"); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); for (len = (len + PAGEOFFSET) & PAGEMASK; len; len -= PAGESIZE, v += PAGESIZE) *vec++ = 1; return (v);
*** 2358,2368 **** segdev_lockop(struct seg *seg, caddr_t addr, size_t len, int attr, int op, ulong_t *lockmap, size_t pos) { TRACE_0(TR_FAC_DEVMAP, TR_DEVMAP_LOCKOP, "segdev_lockop:start"); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); return (0); } /* --- 2358,2368 ---- segdev_lockop(struct seg *seg, caddr_t addr, size_t len, int attr, int op, ulong_t *lockmap, size_t pos) { TRACE_0(TR_FAC_DEVMAP, TR_DEVMAP_LOCKOP, "segdev_lockop:start"); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); return (0); } /*
*** 2373,2383 **** static int segdev_advise(struct seg *seg, caddr_t addr, size_t len, uint_t behav) { TRACE_0(TR_FAC_DEVMAP, TR_DEVMAP_ADVISE, "segdev_advise:start"); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as, &seg->s_as->a_lock)); return (0); } /* --- 2373,2383 ---- static int segdev_advise(struct seg *seg, caddr_t addr, size_t len, uint_t behav) { TRACE_0(TR_FAC_DEVMAP, TR_DEVMAP_ADVISE, "segdev_advise:start"); ! ASSERT(seg->s_as && AS_LOCK_HELD(seg->s_as)); return (0); } /*
*** 3078,3088 **** /* * Hat layer only supports devload to process' context for which * the as lock is held. Verify here and return error if drivers * inadvertently call devmap_load on a wrong devmap handle. */ ! if ((asp != &kas) && !AS_LOCK_HELD(asp, &asp->a_lock)) return (FC_MAKE_ERR(EINVAL)); soff = (ssize_t)(offset - dhp->dh_uoff); soff = round_down_p2(soff, PAGESIZE); if (soff < 0 || soff >= dhp->dh_len) --- 3078,3088 ---- /* * Hat layer only supports devload to process' context for which * the as lock is held. Verify here and return error if drivers * inadvertently call devmap_load on a wrong devmap handle. */ ! if ((asp != &kas) && !AS_LOCK_HELD(asp)) return (FC_MAKE_ERR(EINVAL)); soff = (ssize_t)(offset - dhp->dh_uoff); soff = round_down_p2(soff, PAGESIZE); if (soff < 0 || soff >= dhp->dh_len)