Lines Matching refs:prwc

240 prwritectl_readin(prwritectl_t *prwc, size_t needed)  in prwritectl_readin()  argument
249 if (prwc->prwc_curvalid > needed) { in prwritectl_readin()
250 ASSERT3U(prwc->prwc_buflen, >=, prwc->prwc_curvalid); in prwritectl_readin()
251 ASSERT3U(prwc->prwc_buflen, >=, needed); in prwritectl_readin()
267 if (needed - prwc->prwc_curvalid > prwc->prwc_uiop->uio_resid) { in prwritectl_readin()
271 if (prwc->prwc_locked) { in prwritectl_readin()
272 prunlock(prwc->prwc_pnp); in prwritectl_readin()
273 prwc->prwc_locked = B_FALSE; in prwritectl_readin()
276 if (needed > prwc->prwc_buflen) { in prwritectl_readin()
278 prwc->prwc_buf = kmem_rezalloc(prwc->prwc_buf, in prwritectl_readin()
279 prwc->prwc_buflen, new_len, KM_SLEEP); in prwritectl_readin()
280 if (prwc->prwc_need32) { in prwritectl_readin()
281 prwc->prwc_buf32 = kmem_rezalloc(prwc->prwc_buf32, in prwritectl_readin()
282 prwc->prwc_buflen, new_len, KM_SLEEP); in prwritectl_readin()
284 prwc->prwc_buflen = new_len; in prwritectl_readin()
287 toread = MIN(prwc->prwc_buflen - prwc->prwc_curvalid, in prwritectl_readin()
288 prwc->prwc_uiop->uio_resid); in prwritectl_readin()
289 ASSERT3U(toread, >=, needed - prwc->prwc_curvalid); in prwritectl_readin()
290 start = (void *)((uintptr_t)prwc->prwc_buf + prwc->prwc_curvalid); in prwritectl_readin()
291 if ((ret = uiomove(start, toread, UIO_WRITE, prwc->prwc_uiop)) != 0) { in prwritectl_readin()
295 prwc->prwc_curvalid += toread; in prwritectl_readin()
300 prwritectl_cmd_identify(const prwritectl_t *prwc, in prwritectl_cmd_identify() argument
307 cmd = (long)*(int32_t *)prwc->prwc_buf; in prwritectl_cmd_identify()
309 cmd = *(long *)prwc->prwc_buf; in prwritectl_cmd_identify()
350 prwritectl_t prwc; in prwritectl_common() local
354 bzero(&prwc, sizeof (prwc)); in prwritectl_common()
355 prwc.prwc_pnp = VTOP(vp); in prwritectl_common()
356 prwc.prwc_uiop = uiop; in prwritectl_common()
357 prwc.prwc_need32 = (cmdsize == sizeof (int32_t)); in prwritectl_common()
366 while (uiop->uio_resid > 0 || prwc.prwc_curvalid > 0) { in prwritectl_common()
374 if ((ret = prwritectl_readin(&prwc, cmdsize)) != 0) { in prwritectl_common()
390 if ((proc_cmd = prwritectl_cmd_identify(&prwc, proc_info, in prwritectl_common()
416 if ((ret = prwritectl_readin(&prwc, needed_data)) != in prwritectl_common()
421 VERIFY3U(prwc.prwc_curvalid, >, cmdsize); in prwritectl_common()
422 data = (void *)((uintptr_t)prwc.prwc_buf + cmdsize); in prwritectl_common()
435 if ((ret = prwritectl_readin(&prwc, needed_data)) != 0) { in prwritectl_common()
458 prwc.prwc_curvalid > needed_data || in prwritectl_common()
459 prwc.prwc_uiop->uio_resid > 0) { in prwritectl_common()
462 if ((ret = prwritectl_readin(&prwc, in prwritectl_common()
469 if (!prwc.prwc_locked) { in prwritectl_common()
470 ret = prlock(prwc.prwc_pnp, ZNO); in prwritectl_common()
474 prwc.prwc_locked = B_TRUE; in prwritectl_common()
492 data = (void *)((uintptr_t)prwc.prwc_buf + cmdsize); in prwritectl_common()
498 if (prwc.prwc_need32 && ((uintptr_t)data % alignof (long)) != in prwritectl_common()
500 bcopy(data, prwc.prwc_buf32, needed_data - cmdsize); in prwritectl_common()
501 data = prwc.prwc_buf32; in prwritectl_common()
503 ret = pr_controlf(proc_cmd->pcs_cmd, data, prwc.prwc_pnp, cr); in prwritectl_common()
505 prwc.prwc_locked = B_FALSE; in prwritectl_common()
528 if (prwc.prwc_buf32 != NULL) { in prwritectl_common()
529 bzero(prwc.prwc_buf32, needed_data - cmdsize); in prwritectl_common()
532 if (prwc.prwc_curvalid > needed_data) { in prwritectl_common()
533 size_t save_size = prwc.prwc_curvalid - needed_data; in prwritectl_common()
534 void *first_save = (void *)((uintptr_t)prwc.prwc_buf + in prwritectl_common()
536 memmove(prwc.prwc_buf, first_save, save_size); in prwritectl_common()
537 void *first_zero = (void *)((uintptr_t)prwc.prwc_buf + in prwritectl_common()
541 bzero(prwc.prwc_buf, prwc.prwc_curvalid); in prwritectl_common()
543 prwc.prwc_curvalid -= needed_data; in prwritectl_common()
553 if (prwc.prwc_locked) { in prwritectl_common()
554 prunlock(prwc.prwc_pnp); in prwritectl_common()
555 prwc.prwc_locked = B_FALSE; in prwritectl_common()
558 if (prwc.prwc_buf != NULL) { in prwritectl_common()
559 kmem_free(prwc.prwc_buf, prwc.prwc_buflen); in prwritectl_common()
562 if (prwc.prwc_buf32 != NULL) { in prwritectl_common()
563 VERIFY(prwc.prwc_need32); in prwritectl_common()
564 kmem_free(prwc.prwc_buf32, prwc.prwc_buflen); in prwritectl_common()