Lines Matching refs:mmd

186 	multidata_t *mmd;  in mmd_alloc()  local
205 mmd = (multidata_t *)(buf_info + 1); in mmd_alloc()
206 mmd_mplen = sizeof (*mmd); in mmd_alloc()
208 if ((*mmd_mp = desballoc((uchar_t *)mmd, mmd_mplen, BPRI_HI, in mmd_alloc()
216 mmd->mmd_dp = (*mmd_mp)->b_datap; in mmd_alloc()
217 mmd->mmd_hbuf = hdr_mp; in mmd_alloc()
219 return (mmd); in mmd_alloc()
226 mmd_addpldbuf(multidata_t *mmd, mblk_t *pld_mp) in mmd_addpldbuf() argument
230 ASSERT(mmd != NULL); in mmd_addpldbuf()
231 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_addpldbuf()
234 mutex_enter(&mmd->mmd_pd_slab_lock); in mmd_addpldbuf()
236 mmd->mmd_pbuf_cnt < MULTIDATA_MAX_PBUFS; i++) { in mmd_addpldbuf()
237 if (mmd->mmd_pbuf[i] == pld_mp) { in mmd_addpldbuf()
242 (void *)pld_mp, (void *)mmd, i, mmd->mmd_pbuf_cnt)); in mmd_addpldbuf()
243 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_addpldbuf()
245 } else if (mmd->mmd_pbuf[i] == NULL) { in mmd_addpldbuf()
246 mmd->mmd_pbuf[i] = pld_mp; in mmd_addpldbuf()
247 mmd->mmd_pbuf_cnt++; in mmd_addpldbuf()
248 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_addpldbuf()
256 (void *)mmd, mmd->mmd_pbuf_cnt, MULTIDATA_MAX_PBUFS)); in mmd_addpldbuf()
257 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_addpldbuf()
270 multidata_t *mmd; in mmd_constructor() local
278 mmd = (multidata_t *)(buf_info + 1); in mmd_constructor()
279 mmd->mmd_magic = MULTIDATA_MAGIC; in mmd_constructor()
281 mutex_init(&(mmd->mmd_pd_slab_lock), NULL, MUTEX_DRIVER, NULL); in mmd_constructor()
282 QL_INIT(&(mmd->mmd_pd_slab_q)); in mmd_constructor()
283 QL_INIT(&(mmd->mmd_pd_q)); in mmd_constructor()
295 multidata_t *mmd; in mmd_destructor() local
300 mmd = (multidata_t *)((uchar_t *)buf + sizeof (struct mmd_buf_info)); in mmd_destructor()
302 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_destructor()
303 ASSERT(mmd->mmd_dp == NULL); in mmd_destructor()
304 ASSERT(mmd->mmd_hbuf == NULL); in mmd_destructor()
305 ASSERT(mmd->mmd_pbuf_cnt == 0); in mmd_destructor()
308 ASSERT(mmd->mmd_pbuf[i] == NULL); in mmd_destructor()
310 ASSERT(mmd->mmd_pattbl == NULL); in mmd_destructor()
312 mutex_destroy(&(mmd->mmd_pd_slab_lock)); in mmd_destructor()
313 ASSERT(mmd->mmd_pd_slab_q.ql_next == &(mmd->mmd_pd_slab_q)); in mmd_destructor()
314 ASSERT(mmd->mmd_slab_cnt == 0); in mmd_destructor()
315 ASSERT(mmd->mmd_pd_q.ql_next == &(mmd->mmd_pd_q)); in mmd_destructor()
316 ASSERT(mmd->mmd_pd_cnt == 0); in mmd_destructor()
317 ASSERT(mmd->mmd_hbuf_ref == 0); in mmd_destructor()
318 ASSERT(mmd->mmd_pbuf_ref == 0); in mmd_destructor()
327 multidata_t *mmd; in mmd_esballoc_free() local
335 mmd = (multidata_t *)(buf + sizeof (struct mmd_buf_info)); in mmd_esballoc_free()
336 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_esballoc_free()
338 ASSERT(mmd->mmd_dp != NULL); in mmd_esballoc_free()
339 ASSERT(mmd->mmd_dp->db_ref == 1); in mmd_esballoc_free()
342 pd = Q2PD(mmd->mmd_pd_q.ql_next); in mmd_esballoc_free()
343 while (pd != Q2PD(&(mmd->mmd_pd_q))) in mmd_esballoc_free()
344 pd = mmd_destroy_pdesc(mmd, pd); in mmd_esballoc_free()
346 ASSERT(mmd->mmd_pd_q.ql_next == &(mmd->mmd_pd_q)); in mmd_esballoc_free()
347 ASSERT(mmd->mmd_pd_cnt == 0); in mmd_esballoc_free()
348 ASSERT(mmd->mmd_hbuf_ref == 0); in mmd_esballoc_free()
349 ASSERT(mmd->mmd_pbuf_ref == 0); in mmd_esballoc_free()
352 if (mmd->mmd_pattbl != NULL) in mmd_esballoc_free()
353 mmd_destroy_pattbl(&(mmd->mmd_pattbl)); in mmd_esballoc_free()
356 slab = Q2PDSLAB(mmd->mmd_pd_slab_q.ql_next); in mmd_esballoc_free()
357 while (slab != Q2PDSLAB(&(mmd->mmd_pd_slab_q))) { in mmd_esballoc_free()
367 ASSERT(mmd->mmd_slab_cnt > 0); in mmd_esballoc_free()
368 mmd->mmd_slab_cnt--; in mmd_esballoc_free()
371 ASSERT(mmd->mmd_pd_slab_q.ql_next == &(mmd->mmd_pd_slab_q)); in mmd_esballoc_free()
372 ASSERT(mmd->mmd_slab_cnt == 0); in mmd_esballoc_free()
374 mmd->mmd_dp = NULL; in mmd_esballoc_free()
377 if (mmd->mmd_hbuf != NULL) { in mmd_esballoc_free()
378 freeb(mmd->mmd_hbuf); in mmd_esballoc_free()
379 mmd->mmd_hbuf = NULL; in mmd_esballoc_free()
383 if (mmd->mmd_pbuf[i] != NULL) { in mmd_esballoc_free()
384 freeb(mmd->mmd_pbuf[i]); in mmd_esballoc_free()
385 mmd->mmd_pbuf[i] = NULL; in mmd_esballoc_free()
386 ASSERT(mmd->mmd_pbuf_cnt > 0); in mmd_esballoc_free()
387 mmd->mmd_pbuf_cnt--; in mmd_esballoc_free()
391 ASSERT(mmd->mmd_pbuf_cnt == 0); in mmd_esballoc_free()
392 ASSERT(MUTEX_NOT_HELD(&(mmd->mmd_pd_slab_lock))); in mmd_esballoc_free()
406 multidata_t *mmd, *n_mmd; in mmd_copy() local
424 mmd = mmd_getmultidata(bp); in mmd_copy()
427 if (mmd->mmd_hbuf != NULL && (n_hbuf = copyb(mmd->mmd_hbuf)) == NULL) in mmd_copy()
431 mutex_enter(&mmd->mmd_pd_slab_lock); in mmd_copy()
433 n_pbuf_cnt = mmd->mmd_pbuf_cnt; in mmd_copy()
435 ASSERT(mmd->mmd_pbuf[i] != NULL); in mmd_copy()
436 n_pbuf[i] = copyb(mmd->mmd_pbuf[i]); in mmd_copy()
439 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_copy()
451 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_copy()
466 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_copy()
472 if (mmd->mmd_pattbl != NULL && in mmd_copy()
473 mmd_copy_pattbl(mmd->mmd_pattbl, n_mmd, NULL, kmflags) < 0) { in mmd_copy()
475 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_copy()
480 pd = mmd_getpdesc(mmd, NULL, NULL, 1, B_TRUE); /* first pdesc */ in mmd_copy()
507 base = mmd->mmd_hbuf->b_rptr; in mmd_copy()
524 ASSERT(mmd->mmd_pbuf[idx] != NULL); in mmd_copy()
527 base = mmd->mmd_pbuf[idx]->b_rptr; in mmd_copy()
550 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_copy()
559 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_copy()
569 multidata_t *mmd; in mmd_getmultidata() local
576 mmd = (multidata_t *)mp->b_rptr; in mmd_getmultidata()
577 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_getmultidata()
579 return (mmd); in mmd_getmultidata()
586 mmd_getregions(multidata_t *mmd, mbufinfo_t *mbi) in mmd_getregions() argument
590 ASSERT(mmd != NULL); in mmd_getregions()
591 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_getregions()
596 if (mmd->mmd_hbuf != NULL) { in mmd_getregions()
597 mbi->hbuf_rptr = mmd->mmd_hbuf->b_rptr; in mmd_getregions()
598 mbi->hbuf_wptr = mmd->mmd_hbuf->b_wptr; in mmd_getregions()
601 mutex_enter(&mmd->mmd_pd_slab_lock); in mmd_getregions()
602 for (i = 0; i < mmd->mmd_pbuf_cnt; i++) { in mmd_getregions()
603 ASSERT(mmd->mmd_pbuf[i] != NULL); in mmd_getregions()
604 mbi->pbuf_ary[i].pbuf_rptr = mmd->mmd_pbuf[i]->b_rptr; in mmd_getregions()
605 mbi->pbuf_ary[i].pbuf_wptr = mmd->mmd_pbuf[i]->b_wptr; in mmd_getregions()
608 mbi->pbuf_cnt = mmd->mmd_pbuf_cnt; in mmd_getregions()
609 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_getregions()
616 mmd_getcnt(multidata_t *mmd, uint_t *hbuf_ref, uint_t *pbuf_ref) in mmd_getcnt() argument
620 ASSERT(mmd != NULL); in mmd_getcnt()
621 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_getcnt()
623 mutex_enter(&(mmd->mmd_pd_slab_lock)); in mmd_getcnt()
625 *hbuf_ref = mmd->mmd_hbuf_ref; in mmd_getcnt()
627 *pbuf_ref = mmd->mmd_pbuf_ref; in mmd_getcnt()
628 pd_cnt = mmd->mmd_pd_cnt; in mmd_getcnt()
629 mutex_exit(&(mmd->mmd_pd_slab_lock)); in mmd_getcnt()
634 #define HBUF_REF_VALID(mmd, pdi) \ argument
635 ((mmd)->mmd_hbuf != NULL && (pdi)->hdr_rptr != NULL && \
641 (pdi)->hdr_base >= (mmd)->mmd_hbuf->b_rptr && \
642 MBLKIN((mmd)->mmd_hbuf, \
643 (pdi->hdr_base - (mmd)->mmd_hbuf->b_rptr), \
650 pbuf_ref_valid(multidata_t *mmd, pdescinfo_t *pdi) in pbuf_ref_valid() argument
656 mutex_enter(&mmd->mmd_pd_slab_lock); in pbuf_ref_valid()
657 if (pdi->pld_cnt == 0 || pdi->pld_cnt > mmd->mmd_pbuf_cnt) { in pbuf_ref_valid()
658 mutex_exit(&mmd->mmd_pd_slab_lock); in pbuf_ref_valid()
664 valid = (((idx = pa->pld_pbuf_idx) < mmd->mmd_pbuf_cnt) && in pbuf_ref_valid()
667 pa->pld_rptr >= mmd->mmd_pbuf[idx]->b_rptr && in pbuf_ref_valid()
668 MBLKIN(mmd->mmd_pbuf[idx], (pa->pld_rptr - in pbuf_ref_valid()
669 mmd->mmd_pbuf[idx]->b_rptr), in pbuf_ref_valid()
679 i, pdi->pld_cnt, idx, mmd->mmd_pbuf_cnt, in pbuf_ref_valid()
683 (void *)mmd->mmd_pbuf[idx]->b_rptr, in pbuf_ref_valid()
684 (void *)mmd->mmd_pbuf[idx]->b_wptr, in pbuf_ref_valid()
685 (int)MBLKL(mmd->mmd_pbuf[idx]))); in pbuf_ref_valid()
693 mutex_exit(&mmd->mmd_pd_slab_lock); in pbuf_ref_valid()
701 mmd_addpdesc(multidata_t *mmd, pdescinfo_t *pdi, int *err, int kmflags) in mmd_addpdesc() argument
703 ASSERT(mmd != NULL); in mmd_addpdesc()
704 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_addpdesc()
710 (((pdi->flags & PDESC_HBUF_REF) && !HBUF_REF_VALID(mmd, pdi)) || in mmd_addpdesc()
711 ((pdi->flags & PDESC_PBUF_REF) && !pbuf_ref_valid(mmd, pdi)))) { in mmd_addpdesc()
717 return (mmd_addpdesc_int(mmd, pdi, err, kmflags)); in mmd_addpdesc()
725 mmd_addpdesc_int(multidata_t *mmd, pdescinfo_t *pdi, int *err, int kmflags) in mmd_addpdesc_int() argument
731 ASSERT(!(pdi->flags & PDESC_HBUF_REF) || HBUF_REF_VALID(mmd, pdi)); in mmd_addpdesc_int()
732 ASSERT(!(pdi->flags & PDESC_PBUF_REF) || pbuf_ref_valid(mmd, pdi)); in mmd_addpdesc_int()
737 mutex_enter(&(mmd->mmd_pd_slab_lock)); in mmd_addpdesc_int()
743 slab_last = Q2PDSLAB(mmd->mmd_pd_slab_q.ql_prev); in mmd_addpdesc_int()
744 if (mmd->mmd_pd_slab_q.ql_next == &(mmd->mmd_pd_slab_q) || in mmd_addpdesc_int()
750 mutex_exit(&(mmd->mmd_pd_slab_lock)); in mmd_addpdesc_int()
753 slab->pds_mmd = mmd; in mmd_addpdesc_int()
759 insque(&(slab->pds_next), mmd->mmd_pd_slab_q.ql_prev); in mmd_addpdesc_int()
760 mmd->mmd_slab_cnt++; in mmd_addpdesc_int()
776 mmd->mmd_hbuf_ref++; in mmd_addpdesc_int()
778 mmd->mmd_pbuf_ref += pd->pd_pdi.pld_cnt; in mmd_addpdesc_int()
779 mmd->mmd_pd_cnt++; in mmd_addpdesc_int()
782 insque(&(pd->pd_next), mmd->mmd_pd_q.ql_prev); in mmd_addpdesc_int()
783 mutex_exit(&(mmd->mmd_pd_slab_lock)); in mmd_addpdesc_int()
837 mmd_destroy_pdesc(multidata_t *mmd, pdesc_t *pd) in mmd_destroy_pdesc() argument
851 ASSERT(mmd->mmd_hbuf_ref > 0); in mmd_destroy_pdesc()
852 mmd->mmd_hbuf_ref--; in mmd_destroy_pdesc()
855 ASSERT(mmd->mmd_pbuf_ref > 0); in mmd_destroy_pdesc()
856 mmd->mmd_pbuf_ref -= pd->pd_pdi.pld_cnt; in mmd_destroy_pdesc()
858 ASSERT(mmd->mmd_pd_cnt > 0); in mmd_destroy_pdesc()
859 mmd->mmd_pd_cnt--; in mmd_destroy_pdesc()
870 multidata_t *mmd; in mmd_rempdesc() local
875 mmd = pd->pd_slab->pds_mmd; in mmd_rempdesc()
876 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_rempdesc()
878 mutex_enter(&(mmd->mmd_pd_slab_lock)); in mmd_rempdesc()
886 if (mmd->mmd_dp->db_ref > 1) { in mmd_rempdesc()
889 ASSERT(mmd->mmd_hbuf_ref > 0); in mmd_rempdesc()
890 mmd->mmd_hbuf_ref--; in mmd_rempdesc()
893 ASSERT(mmd->mmd_pbuf_ref > 0); in mmd_rempdesc()
894 mmd->mmd_pbuf_ref -= pd->pd_pdi.pld_cnt; in mmd_rempdesc()
896 ASSERT(mmd->mmd_pd_cnt > 0); in mmd_rempdesc()
897 mmd->mmd_pd_cnt--; in mmd_rempdesc()
899 (void) mmd_destroy_pdesc(mmd, pd); in mmd_rempdesc()
901 mutex_exit(&(mmd->mmd_pd_slab_lock)); in mmd_rempdesc()
908 mmd_getpdesc(multidata_t *mmd, pdesc_t *pd, pdescinfo_t *pdi, uint_t forw, in mmd_getpdesc() argument
913 ASSERT(pd == NULL || pd->pd_slab->pds_mmd == mmd); in mmd_getpdesc()
914 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_getpdesc()
915 ASSERT(!mutex_held || MUTEX_HELD(&(mmd->mmd_pd_slab_lock))); in mmd_getpdesc()
918 mutex_enter(&(mmd->mmd_pd_slab_lock)); in mmd_getpdesc()
919 pd_head = Q2PD(&(mmd->mmd_pd_q)); in mmd_getpdesc()
926 pd = forw ? Q2PD(mmd->mmd_pd_q.ql_next) : in mmd_getpdesc()
927 Q2PD(mmd->mmd_pd_q.ql_prev); in mmd_getpdesc()
943 mutex_exit(&(mmd->mmd_pd_slab_lock)); in mmd_getpdesc()
962 mmd_getfirstpdesc(multidata_t *mmd, pdescinfo_t *pdi) in mmd_getfirstpdesc() argument
964 return (mmd_getpdesc(mmd, NULL, pdi, 1, B_FALSE)); in mmd_getfirstpdesc()
971 mmd_getlastpdesc(multidata_t *mmd, pdescinfo_t *pdi) in mmd_getlastpdesc() argument
973 return (mmd_getpdesc(mmd, NULL, pdi, 0, B_FALSE)); in mmd_getlastpdesc()
1035 multidata_t *mmd; in mmd_adjpdesc() local
1042 mmd = pd->pd_slab->pds_mmd; in mmd_adjpdesc()
1043 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_adjpdesc()
1055 (((pdi->flags & PDESC_HBUF_REF) && !HBUF_REF_VALID(mmd, pdi)) || in mmd_adjpdesc()
1056 ((pdi->flags & PDESC_PBUF_REF) && !pbuf_ref_valid(mmd, pdi)))) in mmd_adjpdesc()
1079 multidata_t *mmd; in mmd_transform() local
1088 mmd = pd->pd_slab->pds_mmd; in mmd_transform()
1089 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_transform()
1095 mutex_enter(&mmd->mmd_pd_slab_lock); in mmd_transform()
1107 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_transform()
1129 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_transform()
1139 multidata_t *mmd; in mmd_transform_link() local
1146 mmd = pd->pd_slab->pds_mmd; in mmd_transform_link()
1147 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_transform_link()
1157 if ((nmp = dupb(mmd->mmd_hbuf)) == NULL) in mmd_transform_link()
1169 mutex_enter(&mmd->mmd_pd_slab_lock); in mmd_transform_link()
1171 ASSERT(mmd->mmd_pbuf[pa->pld_pbuf_idx] != NULL); in mmd_transform_link()
1177 mp = dupb(mmd->mmd_pbuf[pa->pld_pbuf_idx]); in mmd_transform_link()
1181 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_transform_link()
1191 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_transform_link()
1201 mmd_dupbufs(multidata_t *mmd, mblk_t **hmp, mblk_t **pmp) in mmd_dupbufs() argument
1203 ASSERT(mmd != NULL); in mmd_dupbufs()
1204 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_dupbufs()
1208 if (mmd->mmd_hbuf != NULL && in mmd_dupbufs()
1209 (*hmp = dupb(mmd->mmd_hbuf)) == NULL) in mmd_dupbufs()
1217 mutex_enter(&mmd->mmd_pd_slab_lock); in mmd_dupbufs()
1219 for (i = 0; i < mmd->mmd_pbuf_cnt; i++) { in mmd_dupbufs()
1220 ASSERT(mmd->mmd_pbuf[i] != NULL); in mmd_dupbufs()
1221 mp = dupb(mmd->mmd_pbuf[i]); in mmd_dupbufs()
1227 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_dupbufs()
1235 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_dupbufs()
1268 mmd_addpattr(multidata_t *mmd, pdesc_t *pd, pattrinfo_t *pai, in mmd_addpattr() argument
1277 ASSERT(mmd != NULL); in mmd_addpattr()
1278 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_addpattr()
1283 tbl_p = pd != NULL ? &(pd->pd_pattbl) : &(mmd->mmd_pattbl); in mmd_addpattr()
1314 pa->pat_mmd = mmd; in mmd_addpattr()
1523 mmd_getpattr(multidata_t *mmd, pdesc_t *pd, pattrinfo_t *pai) in mmd_getpattr() argument
1528 ASSERT(mmd != NULL); in mmd_getpattr()
1529 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_getpattr()
1533 tbl = pd != NULL ? pd->pd_pattbl : mmd->mmd_pattbl; in mmd_getpattr()
1557 mmd_getsize(multidata_t *mmd, uint_t *ptotal, uint_t *pinuse) in mmd_getsize() argument
1563 ASSERT(mmd != NULL); in mmd_getsize()
1564 ASSERT(mmd->mmd_magic == MULTIDATA_MAGIC); in mmd_getsize()
1566 mutex_enter(&mmd->mmd_pd_slab_lock); in mmd_getsize()
1570 if (mmd->mmd_hbuf != NULL) in mmd_getsize()
1571 *ptotal += MBLKL(mmd->mmd_hbuf); in mmd_getsize()
1573 for (i = 0; i < mmd->mmd_pbuf_cnt; i++) { in mmd_getsize()
1574 ASSERT(mmd->mmd_pbuf[i] != NULL); in mmd_getsize()
1575 *ptotal += MBLKL(mmd->mmd_pbuf[i]); in mmd_getsize()
1582 pd = mmd_getpdesc(mmd, NULL, NULL, 1, B_TRUE); in mmd_getsize()
1587 pd = mmd_getpdesc(mmd, pd, NULL, 1, B_TRUE); in mmd_getsize()
1602 mutex_exit(&mmd->mmd_pd_slab_lock); in mmd_getsize()