Lines Matching refs:uio

67 static int uiomove_faultflag(void *cp, int n, struct uio *uio, int nofault);
98 struct uio uio; in physcopyin() local
103 uio.uio_iov = iov; in physcopyin()
104 uio.uio_iovcnt = 1; in physcopyin()
105 uio.uio_offset = 0; in physcopyin()
106 uio.uio_resid = len; in physcopyin()
107 uio.uio_segflg = UIO_SYSSPACE; in physcopyin()
108 uio.uio_rw = UIO_WRITE; in physcopyin()
111 return (uiomove_fromphys(m, dst & PAGE_MASK, len, &uio)); in physcopyin()
119 struct uio uio; in physcopyout() local
124 uio.uio_iov = iov; in physcopyout()
125 uio.uio_iovcnt = 1; in physcopyout()
126 uio.uio_offset = 0; in physcopyout()
127 uio.uio_resid = len; in physcopyout()
128 uio.uio_segflg = UIO_SYSSPACE; in physcopyout()
129 uio.uio_rw = UIO_READ; in physcopyout()
132 return (uiomove_fromphys(m, src & PAGE_MASK, len, &uio)); in physcopyout()
190 uiomove(void *cp, int n, struct uio *uio) in uiomove() argument
193 return (uiomove_faultflag(cp, n, uio, 0)); in uiomove()
197 uiomove_nofault(void *cp, int n, struct uio *uio) in uiomove_nofault() argument
200 return (uiomove_faultflag(cp, n, uio, 1)); in uiomove_nofault()
204 uiomove_faultflag(void *cp, int n, struct uio *uio, int nofault) in uiomove_faultflag() argument
212 KASSERT(uio->uio_rw == UIO_READ || uio->uio_rw == UIO_WRITE, in uiomove_faultflag()
214 KASSERT(uio->uio_segflg != UIO_USERSPACE || uio->uio_td == curthread, in uiomove_faultflag()
216 KASSERT(uio->uio_resid >= 0, in uiomove_faultflag()
217 ("%s: uio %p resid underflow", __func__, uio)); in uiomove_faultflag()
219 if (uio->uio_segflg == UIO_USERSPACE) { in uiomove_faultflag()
235 while (n > 0 && uio->uio_resid) { in uiomove_faultflag()
236 KASSERT(uio->uio_iovcnt > 0, in uiomove_faultflag()
237 ("%s: uio %p iovcnt underflow", __func__, uio)); in uiomove_faultflag()
239 iov = uio->uio_iov; in uiomove_faultflag()
242 uio->uio_iov++; in uiomove_faultflag()
243 uio->uio_iovcnt--; in uiomove_faultflag()
249 switch (uio->uio_segflg) { in uiomove_faultflag()
252 switch (uio->uio_rw) { in uiomove_faultflag()
265 switch (uio->uio_rw) { in uiomove_faultflag()
279 uio->uio_resid -= cnt; in uiomove_faultflag()
280 uio->uio_offset += cnt; in uiomove_faultflag()
298 uiomove_frombuf(void *buf, int buflen, struct uio *uio) in uiomove_frombuf() argument
302 if (uio->uio_offset < 0 || uio->uio_resid < 0 || in uiomove_frombuf()
303 (offset = uio->uio_offset) != uio->uio_offset) in uiomove_frombuf()
309 return (uiomove((char *)buf + offset, n, uio)); in uiomove_frombuf()
316 ureadc(int c, struct uio *uio) in ureadc() argument
325 if (uio->uio_iovcnt == 0 || uio->uio_resid == 0) in ureadc()
327 iov = uio->uio_iov; in ureadc()
329 uio->uio_iovcnt--; in ureadc()
330 uio->uio_iov++; in ureadc()
333 switch (uio->uio_segflg) { in ureadc()
349 uio->uio_resid--; in ureadc()
350 uio->uio_offset++; in ureadc()
373 copyinuio(const struct iovec *iovp, u_int iovcnt, struct uio **uiop) in copyinuio()
376 struct uio *uio; in copyinuio() local
384 uio = allocuio(iovcnt); in copyinuio()
385 iov = uio->uio_iov; in copyinuio()
388 freeuio(uio); in copyinuio()
391 uio->uio_iovcnt = iovcnt; in copyinuio()
392 uio->uio_segflg = UIO_USERSPACE; in copyinuio()
393 uio->uio_offset = -1; in copyinuio()
394 uio->uio_resid = 0; in copyinuio()
396 if (iov->iov_len > IOSIZE_MAX - uio->uio_resid) { in copyinuio()
397 freeuio(uio); in copyinuio()
400 uio->uio_resid += iov->iov_len; in copyinuio()
403 *uiop = uio; in copyinuio()
407 struct uio *
410 struct uio *uio; in allocuio() local
416 uio = malloc(iovlen + sizeof(*uio), M_IOV, M_WAITOK); in allocuio()
417 uio->uio_iov = (struct iovec *)(uio + 1); in allocuio()
419 return (uio); in allocuio()
423 freeuio(struct uio *uio) in freeuio() argument
425 free(uio, M_IOV); in freeuio()
428 struct uio *
429 cloneuio(struct uio *uiop) in cloneuio()
432 struct uio *uio; in cloneuio() local
436 uio = allocuio(uiop->uio_iovcnt); in cloneuio()
437 iov = uio->uio_iov; in cloneuio()
438 *uio = *uiop; in cloneuio()
439 uio->uio_iov = iov; in cloneuio()
440 bcopy(uiop->uio_iov, uio->uio_iov, iovlen); in cloneuio()
441 return (uio); in cloneuio()